;Displaying "YES" on LCD using 4-bit data line ;Written and tested by Mazidi ;Modified from prog 12-1 of 8051 Microcontroller book by Mazidis & McKinlay ;P1.7-P1.4 to D7-D4 of LCD ;P2.0=RS, P2.1=R/W, and P2.2=E ;You can modify this program to use only a single PORT P1 ;To initialize the LCD 4-bit data option we must send values 33H, 32H and 28H as command ORG 0 ACALL DELAY ACALL DELAY MOV A,#33H ;needed by LCD 4-bit data option ACALL COMNWRT4 ACALL DELAY MOV A,#32H ;needed by LCD 4-bit data option ACALL COMNWRT4 ACALL DELAY MOV A,#28H ;needed by LCD 4-bit data option ACALL COMNWRT4 ACALL DELAY MOV A,#0EH ACALL COMNWRT4 ACALL DELAY MOV A,#01 ACALL COMNWRT4 ACALL DELAY MOV A,#06H ACALL COMNWRT4 ACALL DELAY MOV A,#84H ACALL COMNWRT4 ACALL DELAY MOV A,#'Y' ACALL DATAWRT4 ACALL DELAY MOV A,#'A' ;ACALL DATAWRT4 ;MOV A,#'S' ACALL DATAWRT4 ACALL DELAY AGAIN: SJMP AGAIN ;-----------------Command-Write 4-bit version COMNWRT4: MOV R1,A ;save a copy ANL A,#0F0H ;mask the lower 4-bits MOV P1,A ;issue it to LCD data bus CLR P2.0 CLR P2.1 SETB P2.2 ACALL DELAY CLR P2.2 MOV A,R1 ;get a copy ANL A,#0FH ;mask the upper 4-bit RL A ;shift it to left 4 times RL A RL A RL A MOV P1,A ;issue it to LCD data bus CLR P2.0 CLR P2.1 SETB P2.2 ACALL DELAY CLR P2.2 RET ;-----------Data-Write 4-bit version DATAWRT4: MOV R1,A ;save a copy ANL A,#0F0H ;mask the lower 4-bits MOV P1,A ;issue it to LCD data bus SETB P2.0 CLR P2.1 SETB P2.2 ACALL DELAY CLR P2.2 MOV A,R1 ;get a copy ANL A,#0FH ;mask the upper 4-bit RL A ;shift it to left 4 times RL A RL A RL A MOV P1,A ;issue it to LCD data bus SETB P2.0 CLR P2.1 SETB P2.2 ACALL DELAY CLR P2.2 RET ;------------------------- ;200 msec. delay for DS89C4x0 with MDE8051 Trainer ;XTAL=11.0592 MHz on MDE8051 ;9 x 255 x 242 x 4 x 90 ns = 199 msec ;Notice DS89C4x0 uses 4 clocks for Machine Cycle. DELAY: MOV R5, #9 H3: MOV R4, #242 H2: MOV R3, #255 H1: DJNZ R3, H1 DJNZ R4, H2 DJNZ R5, H3 RET END