⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 MP3 Player Source Code
💻 C
字号:
#include "board.h"#include "lcd.h"#include "lcdfonts.c"/**\file lcd.c * LCD function implementations. * Required modules: board */ /** hexadecimal character set */code const unsigned char lcd_hexchars[17] = "0123456789abcdef";/** Low level: Send one data character to LCD. * \param c Octet to be sent to LCD */void LcdPutChar(char c) {  WaitOutDelay();  LCD_RS = LCD_DATA_MODE;  LCD_ENABLE = 1; /* Rising edge */  LCD_DATABUS = c;  LCD_ENABLE = 1; /* Keep high...*/  LCD_ENABLE = 0; /* Falling edge */  InitiateDelay(44);}/** Low level: Send one command octet to LCD. * \param cmd Command octet to be sent to LCD */void LcdPutCommand(char cmd){  WaitOutDelay();  LCD_RS = LCD_COMMAND_MODE;  LCD_ENABLE = 1; /* Rising edge */  LCD_DATABUS = cmd;  LCD_ENABLE = 0; /* Falling edge */}void LcdSelectFont(ROM_CHAR_PTR font){  static ROM_CHAR_PTR loadedFont = 0;  if (loadedFont != font){    loadedFont=font;        LcdLocateCG();    LcdPutConstantString(font);      LcdLocateHome();     }}/** Low level: Reset LCD */void LcdReset(){  LCD_ENABLE = 0;  InitiateDelay(0); /* Initialize the delay system */  LcdPutCommand(56); /* 8 data bits, 2 lines */  InitiateDelay(39);  WaitOutDelay();  LcdPutCommand(56); /* Command 2 times "just in case" */  InitiateDelay(39);  WaitOutDelay();  LcdPutCommand(12); /* Panel on, no cursor */  InitiateDelay(39);  WaitOutDelay();  LcdPutCommand(1);  /* Clear screen */  InitiateDelay(1530); /* Start a 1.53 ms delay */  LcdSelectFont(lcdFont_barchars);}/** Low level: Send a zero-terminated string of bytes to lcd  * from buffer in any memory.  * <b>Example:</b> LcdPutString (s); * \param *str pointer to a zero-terminated string in idata segment  * \warning Do not call for const type strings in the ROM! */void LcdPutString (char *str) {  while (*str) {    LcdPutChar (*str++);  }}/** Low level: Send a zero-terminated string of bytes to lcd  * from buffer in ROM.  * <b>Example:</b> LcdPutConstantString ("Hello!"); * \param *str pointer to a zero-terminated string in code ROM.*/void LcdPutConstantString(char code *str){  while (*str)    {      LcdPutChar (*str++);    }}void LcdFadeIn(){  unsigned char c,d;  for (c=0; c<254; c++){    for (d=252; d; d-=2){      if (d>c){	LcdPutCommand (8);	InitiateDelay(40);      }else{	LcdPutCommand (12);	InitiateDelay(40);      }    }  }  LcdPutCommand(12);  InitiateDelay(40);}void LcdFadeOut(){  unsigned char c,d;  for (c=0; c<254; c++){    for (d=252; d; d-=2){      if (d<c){	LcdPutCommand (8);	InitiateDelay(40);      }else{	LcdPutCommand (12);	InitiateDelay(40);      }    }  }  LcdPutCommand(8);  InitiateDelay(40);}/** Splash screen */void LcdSplashScreen(){      LcdReset();   LcdSelectFont(lcdFont_vlsichars);    LcdLocateHome();    LcdPutChar(0);  LcdPutConstantString("\1\2\3 Sol");  LcdLocateLine2();  LcdPutConstantString("ution Oy");   LcdFadeIn();  LcdFadeOut(); }/** Print a 16-bit hex value on LCD */void LcdPutHex16 (unsigned int value){  LcdPutChar(lcd_hexchars[value>>12]);  LcdPutChar(lcd_hexchars[(value>>8)&0xf]);  LcdPutChar(lcd_hexchars[(value>>4)&0xf]);  LcdPutChar(lcd_hexchars[(value)&0xf]);}/** Print an 8-bit hex value on LCD */void LcdPutHex8 (unsigned char value){  LcdPutChar(lcd_hexchars[(value>>4)&0xf]);  LcdPutChar(lcd_hexchars[(value)&0xf]);}/** Print OK or Error (hex8) on LCD */unsigned char LcdPrintGenericResult (unsigned char errorlevel){  if (!errorlevel){            LcdPutConstantString ("OK      ");  }else{    LcdPutConstantString ("Error ");    LcdPutChar(lcd_hexchars[(errorlevel>>4)&0xf]);    LcdPutChar(lcd_hexchars[(errorlevel)&0xf]);    ConsoleWrite ("\rSystem error ");    ConsolePutHex8 (errorlevel);    ConsoleWrite (": \"");    switch (errorlevel){    case 0x01: ConsoleWrite ("No storage"); break;    case 0x02: ConsoleWrite ("Storage powerup"); break;    case 0x03: ConsoleWrite ("Storage init"); break;    case 0x04: ConsoleWrite ("No storage ID"); break;    case 0x05: ConsoleWrite ("Datablock header"); break;    case 0x06: ConsoleWrite ("Storage Data reply failed"); break;    case 0x07: ConsoleWrite ("Generic Storage Command"); break;    case 0x08: ConsoleWrite ("Sector 0 not in recognized format"); break;    case 0x09: ConsoleWrite ("No active partition"); break;    case 0x0a: ConsoleWrite ("Filesystem load"); break;    case 0x0b: ConsoleWrite ("No root directory"); break;    case 0x0c: ConsoleWrite ("File not found"); break;    };    ConsoleWrite("\" failure.\r");        Delay(500);  }  return errorlevel;}/** Print a 16-bit unsigned integer value on LCD */void LcdPutUInt(unsigned long value){  xdata unsigned char valueString[10];  char c;  for (c=0; c<10; c++){    valueString[c]=value % 10;    value = value / 10;  }  c=9;  while ((valueString[c]==0) && (c!=0))    c--;  for (;c!=0;c--)    LcdPutChar('0'+valueString[c]);  LcdPutChar('0'+valueString[0]);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -