//Displaying "YES" on LCD connected to MDE8051 Trainer using 4-bit data connection //Using 4-bit data line option of LCD can save I/O port pins //Modified and tested from Example 12-1 in chapter 12 of the "8051 Microcontroller" textbook by Mazidis & McKinlay //P1.7-P1.4 to data line of D7-D4 of LCD // P2.0 = RS, P2.1 = R/W, and P2.2 = E #include sfr ldata = 0x90; sbit rs = P2^0; sbit rw = P2^1; sbit en = P2^2; void lcdcmd4(unsigned char); void lcddata4(unsigned char); void MSDelay(unsigned int); void main() { MSDelay(250); lcdcmd4(0x33); //needed by 4-bit data LCD MSDelay(250); lcdcmd4(0x32); //needed by 4-bit data LCD MSDelay(250); lcdcmd4(0x28); //needed by 4-bit data LCD MSDelay(250); lcdcmd4(0x0E); MSDelay(250); lcdcmd4(0x01); MSDelay(250); lcdcmd4(0x06); MSDelay(250); lcdcmd4(0x86); MSDelay(250); lcddata4('Y'); MSDelay(250); lcddata4('E'); MSDelay(250); lcddata4('S'); for(;;); //do it once and stay here } //------------- command-write 4-bit version void lcdcmd4(unsigned char value) { ldata = value & 0xF0; //mask the lower 4-bits and issue it D7-D4 data line rs = 0; rw = 0; en = 1; MSDelay(1); en = 0; ldata = (value &0x0F) <<4; //mask the upper 4-bits and issue it D7-D4 data line after shifting left rs = 0; rw = 0; en = 1; MSDelay(1); en = 0; return; } //------------- data-write 4-bit version void lcddata4(unsigned char value) { ldata = value & 0xF0; //mask the lower 4-bits and issue it D7-D4 data line rs = 1; rw = 0; en = 1; MSDelay(1); en = 0; ldata = (value &0x0F) <<4;//mask the upper 4-bits and issue it D7-D4 data line after shifting left rs = 1; rw = 0; en = 1; MSDelay(1); en = 0; return; } void MSDelay(unsigned int itime) { unsigned int i, j; for(i=0;i