#include #include #define out P2 #define en P1_0 #define rw P1_1 #define rs P1_2 #define busy P2_7 #define BIN(x) \ ( ((0x##x##L & 0x00000001L) ? 0x01 : 0) \ | ((0x##x##L & 0x00000010L) ? 0x02 : 0) \ | ((0x##x##L & 0x00000100L) ? 0x04 : 0) \ | ((0x##x##L & 0x00001000L) ? 0x08 : 0) \ | ((0x##x##L & 0x00010000L) ? 0x10 : 0) \ | ((0x##x##L & 0x00100000L) ? 0x20 : 0) \ | ((0x##x##L & 0x01000000L) ? 0x40 : 0) \ | ((0x##x##L & 0x10000000L) ? 0x80 : 0)) void delay(unsigned int ); void lcdinit(); void lcdfirst(); void lcdsec(); void lcdshift(); void lcdcmd(unsigned char ); void lcddata(unsigned char); unsigned char lcdread(unsigned char); void usdelay(unsigned int); void lcdstr(unsigned char *s); char dispDefineChar(signed char charnum, char values[]); unsigned char receive ( ); void transmit(unsigned char rec); const char CH_L[8] = { BIN(00010000), BIN(00010000), BIN(00010000), BIN(00010000), BIN(00010000), BIN(00010000), BIN(00010000), BIN(00010000) }; const char CH_R[8] = { BIN(00000001), BIN(00000001), BIN(00000001), BIN(00000001), BIN(00000001), BIN(00000001), BIN(00000001), BIN(00000001) }; const char CH_LR[8] = { BIN(00010001), BIN(00010001), BIN(00010001), BIN(00010001), BIN(00010001), BIN(00010001), BIN(00010001), BIN(00010001) }; const char CH_T[8] = { BIN(00011111), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000) }; const char CH_B[8] = { BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00011111) }; const char CH_TB[8] = { BIN(00011111), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00011111), }; const char CH_L_DOT[8] = { BIN(00010000), BIN(00010000), BIN(00010000), BIN(00010001), BIN(00010001), BIN(00010000), BIN(00010000), BIN(00010000) }; const char CH_E_DOT[8] = { BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000001), BIN(00000001), BIN(00000000), BIN(00000000), BIN(00000000) }; const char BCH_L[8] = { BIN(00011000), BIN(00011000), BIN(00011000), BIN(00011000), BIN(00011000), BIN(00011000), BIN(00011000), BIN(00011000) }; const char BCH_R[8] = { BIN(00000011), BIN(00000011), BIN(00000011), BIN(00000011), BIN(00000011), BIN(00000011), BIN(00000011), BIN(00000011) }; const char BCH_LR[8] = { BIN(00011011), BIN(00011011), BIN(00011011), BIN(00011011), BIN(00011011), BIN(00011011), BIN(00011011), BIN(00011011) }; const char BCH_T[8] = { BIN(00011111), BIN(00011111), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000) }; const char BCH_B[8] = { BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00011111), BIN(00011111) }; const char BCH_TB[8] = { BIN(00011111), BIN(00011111), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000000), BIN(00011111), BIN(00011111), }; const char BCH_L_DOT[8] = { BIN(00011000), BIN(00011000), BIN(00011000), BIN(00011001), BIN(00011001), BIN(00011000), BIN(00011000), BIN(00011000) }; const char BCH_E_DOT[8] = { BIN(00000000), BIN(00000000), BIN(00000000), BIN(00000001), BIN(00000001), BIN(00000000), BIN(00000000), BIN(00000000) }; const char TRANSLATION[10] = { BIN(11011011), BIN(00010001), BIN(01111010), BIN(01110011), BIN(10110001), BIN(11100011), BIN(11101011), BIN(01010001), BIN(11111011), BIN(11110011) }; void showNumber(char * buffer, char length) { char i, d, mask, prev_mask = 0; lcdfirst(); for (i = 0; i < length; i++) { d = buffer[i] - '0'; if(d >= 0 && d <= 9) { mask = TRANSLATION[d]; d = ((prev_mask >> 4) & 1) | ((mask >> 6) & 2); lcddata(d ? --d : ' '); d = ((mask >> 4) & 2) | ((mask >> 6) & 1); lcddata(d ? d+2 : ' '); prev_mask = mask; } else if(buffer[i] == ':') { lcddata(prev_mask & 0x10 ? 6 : 7); prev_mask = 0; } else if(buffer[i] == ' ') { lcddata(prev_mask & 0x10 ? 0 : ' '); prev_mask = 0; } else { lcddata(' '); prev_mask = 0; } } lcddata(prev_mask & 0x10 ? 0 : ' '); lcdsec(); for (prev_mask = 0, i = 0; i < length; i++) { d = buffer[i] - '0'; if(d >= 0 && d <= 9) { mask = TRANSLATION[d]; d = (prev_mask & 1) | ((mask >> 2) & 2); lcddata(d ? --d : ' '); d = ((mask >> 2) & 1) | (mask & 2); lcddata(d ? d+2 : ' '); prev_mask = mask; } else if(buffer[i] == ':') { lcddata(prev_mask & 1 ? 6 : 7); prev_mask = 0; } else if(buffer[i] == ' ') { lcddata(prev_mask & 1 ? 0 : ' '); prev_mask = 0; } else { lcddata(' '); prev_mask = 0; } } lcddata(prev_mask & 1 ? 0 : ' '); } void set_font() { dispDefineChar(0, BCH_L); dispDefineChar(1, BCH_R); dispDefineChar(2, BCH_LR); dispDefineChar(3, BCH_T); dispDefineChar(4, BCH_B); dispDefineChar(5, BCH_TB); dispDefineChar(6, BCH_L_DOT); dispDefineChar(7, BCH_E_DOT); } void main() { unsigned char rec[32],i,j, ch = 0; out=0; lcdinit(); lcdcmd(0x28); //4 bit interfacing mode, 2 lines, 5*8 dots lcdcmd(0x01); //clear lcd dispDefineChar(0, CH_L); dispDefineChar(1, CH_R); dispDefineChar(2, CH_LR); dispDefineChar(3, CH_T); dispDefineChar(4, CH_B); dispDefineChar(5, CH_TB); dispDefineChar(6, CH_L_DOT); dispDefineChar(7, CH_E_DOT); lcdcmd(0x0c); //display on, cursor off,blink off lcdcmd(0x06); //move to right strncpy(rec, "19:10:10", 8); showNumber(rec, 8); delay(1000); for(i=0; i<60; i++) { delay(1000); rec[6] = (i/10) + '0'; rec[7] = (i%10) + '0'; showNumber(rec, 8); } lcdfirst(); i = 0; while(1) { unsigned char a = receive(); transmit(a); lcddata(a); i++; if(i >= 16) { lcdfirst(); i = 0; } } while(1) { delay(1000); lcdcmd(0x01); for(i=0;i<16;i++) lcddata(ch++); lcdsec(); for(i=16;i<32;i++) lcddata(ch++); } //while(1); } void delay(unsigned int mstim) { unsigned int i,j; for(i=0;i>=4; rec|=temp; return rec; } void lcdstr(unsigned char *s) { while(*s) lcddata(*s++); } char dispDefineChar(signed char charnum, char values[]) { char i; if ((charnum < 0) || (charnum > 7)) return 0; // set LCD address to CG RAM lcdcmd(0x40 + charnum*8); // enter character bytes into CG RAM for (i=0; i<8; i++) { lcddata(values[i]); } // set LCD address back to display RAM //lcdfirst(); return 1; } unsigned char receive ( ) { unsigned char rec; TMOD=0x20; // timer1 8 bit auto reload mode TH1=249; //set 9600 baud rate SCON=0x50; //serial mode 1 with receive enable TR1=1; // start timer while(RI==0); rec=SBUF; RI=0; return rec; } void transmit(unsigned char rec) { TI=0; SBUF = rec; while(!TI); }