📄 lcd.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 + -