You are on page 1of 2

;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

You might also like