You are on page 1of 4

ORG 00H

RS EQU P3.5

RW EQU P3.4

E EQU P3.3

D7 EQU P2.7

MOV B,#1

MOV R1,#1

ACALL LCD_INIT

WRITE1:

MOV DPTR, #MYDATA

D1: CLR A

MOVC A, @A+DPTR

JZ MSG2

ACALL DATAWRT

INC DPTR

SJMP D1

MYDATA: DB "PAPIA TANJIA",0

RET

MSG2:

MOV A, #0C0H

ACALL CMDWRT

MOV R1,B

MOVELEFT:

MOV A, #10H ; SHIFT CURSOR RIGHT

ACALL CMDWRT

DJNZ R1,MOVELEFT

MOV DPTR, #MYDATA2

D2: CLR A
MOVC A, @A+DPTR

JZ NEXT1

ACALL DATAWRT

INC DPTR

SJMP D2

MYDATA2: DB " 160021132",0

RET

NEXT1:

ACALL DELAY1

MOV A, #01H ; Clear Display

ACALL CMDWRT

MOV R1,B

INC R1

MOV B,R1

MOV A,B

MOVERIGHT:

MOV A, #14H ; SHIFT CURSOR RIGHT

ACALL CMDWRT

DJNZ R1,MOVERIGHT

ACALL WRITE1

HERE: SJMP HERE

LCD_INIT: MOV A, #38H ; Initialize LCD 2 lines, 5x7 matrix

ACALL CMDWRT

MOV A, #0EH ; Display ON, Cursor Blinking

ACALL CMDWRT

MOV A, #01H ; Clear Display

ACALL CMDWRT

MOV A, #06H ; Shift Cursor Right

ACALL CMDWRT
MOV A, #80H ; Start from 80H

ACALL CMDWRT

RET

CMDWRT: ACALL BUSY_CHECK ; Check if D7 = 1 (Busy Flag)

MOV P2, A ; Move CMD from A to P2

CLR RS ; RS = 0 (Select CMD Register)

CLR RW ; RW = 0 (Select Write Operation)

SETB E ; H-L pulse to Enable pin for Write

NOP ; NOP for 450 ns delay

CLR E

RET

DATAWRT: ACALL BUSY_CHECK ; Check if D7 = 1 (Busy Flag)

MOV P2, A ; Move CMD from A to P2

SETB RS ; RS = 1 (Select Data Register)

CLR RW ; RW = 0 (Select Write Operation)

SETB E ; H-L pulse to Enable pin for Write

NOP ; NOP for 450 ns delay

CLR E

RET

BUSY_CHECK: SETB D7 ; Set D7 as input pin

CLR RS ; RS = 0 (Select Cmd Register)

SETB RW ; RW = 1 (Select Read Operation)

AGAIN: CLR E ; L-H pulse to Enable pin for Read

NOP ; NOP for 450 ns delay

SETB E

JB D7, AGAIN ; if D7 = 1 (busy), keep reading its status

RET
DELAY: MOV 4AH, #167

L3: MOV 4BH, #171

L2: MOV 4CH,#16

L1: DJNZ 4CH,L1

DJNZ 4BH,L2

DJNZ 4AH,L3

NOP

RET

DELAY1: MOV R6,#250D

MOV R7,#250D

LOOP1: DJNZ R6,LOOP1

LOOP2: DJNZ R7,LOOP1

RET

END

You might also like