精華區beta Electronics 關於我們 聯絡資訊
// LCD unsigned char NowPos=0; //for postion adjust sfr LCD_DATA = 0x80;//connect to P0 sbit LCD_E = P3^7; sbit LCD_RW = P3^6; sbit LCD_RS = P3^5; // RS = 0 instr reg, RS = 1 data reg #define LCD_CLS() WriteLCDCmd(0x1); #define LCD_HOME() WriteLCDCmd(0x2); unsigned char ReadLCD() { unsigned char tmp; LCD_RS = 0; LCD_RW = 1; LCD_E = 1; tmp = LCD_DATA; LCD_E = 0; LCD_RW = 1; LCD_RS = 1; return tmp; } unsigned char CheckLCDBusy() { unsigned char tmp; tmp = ReadLCD(); return (tmp & 0x80); } void WriteLCDCmd(unsigned char cmd) { while ( CheckLCDBusy() ); LCD_RS = 0; LCD_RW = 0; LCD_E = 1; LCD_DATA = cmd; LCD_E = 0; LCD_RW = 1; LCD_RS = 1; } void LCD_SetPos(unsigned char pos) { NowPos=pos; //read pos to NowPos WriteLCDCmd(pos | 0x80); } void WriteLCDData(unsigned char dat) { if(NowPos > 0x4F) //from last jump to first LCD_SetPos(0x0); if( (NowPos > 0x0F) && (NowPos<40) ) //from upper last jump to lower first LCD_SetPos(0x40); while ( CheckLCDBusy() ); LCD_RS = 1; LCD_RW = 0; LCD_E = 1; LCD_DATA = dat; LCD_E = 0; LCD_RW = 1; LCD_RS = 1; NowPos++; //NowPos increse } void LCD_Init() { WriteLCDCmd(0x38); //Function Set WriteLCDCmd(0xe); //Display On/Off control WriteLCDCmd(0x6); //Entry Mode Set } void LCD_Print(char *s) //Print S tring { while ( *s ) { WriteLCDData(*s); s++; } } LCD_SetPos是可以設定游標的函式.. 參考看囉!^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.175.197.87