;多功能51單片機開發板
;LCD1602測試程序
RS EQU P2.0
RW EQU P2.1
E EQU P2.2
LDATA EQU P1
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV R0,#00H ;R0:每行顯示字符的個數
MOV R1,#80H ;寄存器地址
MOV A,#38H ;設置顯示(16×2)
ACALL WIR
MOV A,#0EH ;開顯示,顯示光標,光標不閃爍
ACALL WIR
MOV A,#06H ;整屏顯示不移動
ACALL WIR
MOV A,#01H ;顯示清屏
ACALL WIR
MOV DPTR,#LCD
LOOP0: MOV A,R1 ;寫地址
ACALL WIR
INC R1 ;地址加壹
CJNE R1,#90H,TT ;判斷第壹行寫完沒有
MOV R1,#0C0H ;若寫完,R1=第二行地址
TT: MOV A,R0
MOVC A,@A+DPTR
ACALL WDR
INC R0 ;計數R0加1
LCALL DELAY1
CJNE R0,#20H,LOOP0 ;R1不等於32則繼續
RE: AJMP RE
WIR: ACALL BUSY ;寫指令寄存器子程序
CLR E ;初始化
CLR RS
CLR RW
SETB E
MOV LDATA,A
CLR E
RET
WDR: ACALL BUSY ;寫數據寄存器子程序
CLR E
SETB RS
CLR RW
SETB E
MOV LDATA,A
CLR E
RET
BUSY: PUSH ACC ;檢測忙信號子程序
ISBUSY:CLR E
CLR RS
SETB RW
SETB E
MOV A,LDATA
JB ACC.7,ISBUSY ;ACC.7=1,說明忙
POP ACC
ACALL DELAY1
RET
DELAY1:MOV R6,#5 ;延時子程序
D0: MOV R7,#248
DJNZ R7,$
DJNZ R6,D0
RET
DELAY2:MOV R5,#2
D1: MOV R3,#245
D2: MOV R4,#245
DJNZ R4,$
DJNZ R3,D2
DJNZ R5,D1
RET
LCD:DB ' MCS-51 TEST '
DB ' Xu Rui Feng '
END