#define BUSY 0x80 #define LCD_command_write 0x0000 #define LCD_data_write 0x0001 #define LCD_command_read 0x0002 #define LCD_data_read 0x0003 #define LCD 0x0A LcdReady() { char flag; while((flag=xpeek(LCD,LCD_command_read) & BUSY)) { if(flag == 0xFF) return -1; } return 1; } void clr_screen(void) { LcdReady(); xpoke(LCD,LCD_command_write,0x01); } char InitLcd(void) { if(-1 ==LcdReady()) return -1; xpoke(LCD,LCD_command_write,0x38); LcdReady(); xpoke(LCD,LCD_command_write,0x0c); clr_screen(); goto_xy(0,0); } goto_xy(char x,char y) { LcdReady(); switch(y){ case 0 : xpoke(LCD,LCD_command_write,(0x80+x)); break; case 1 : xpoke(LCD,LCD_command_write,(0xC0+x)); break; case 2 : xpoke(LCD,LCD_command_write,(0x94+x)); break; case 3 : xpoke(LCD,LCD_command_write,(0xd4+x)); break; } } char *Puts(char* str) { unsigned char i; for (i=0; str[i] != '\0'; i++){ LcdReady(); xpoke(LCD,LCD_data_write,str[i]); } return str; } void putch_lcd(char ch) { LcdReady(); xpoke(LCD,LCD_data_write,ch); } // print 4 digits decimal on LCD at current position print_4digit(int n) { char buffer[6]; int temp; if(n<0) buffer[0] = '-'; else buffer[0] = '+'; temp = n; if(n<0) { n=~temp; n++; // convert to unsigned } buffer[1] = (n/1000)+48; temp = n%1000; buffer[2] = (temp/100)+48; temp = n%100; buffer[3] = (temp/10)+48; buffer[4] = (temp%10)+48; putch_lcd(buffer[0]); putch_lcd(buffer[1]); putch_lcd(buffer[2]); putch_lcd(buffer[3]); putch_lcd(buffer[4]); }