最近在做设计,要求用汇编,就模仿网上的代码。但是初始化LCD12864的时候一直在检测忙中循环。
RS BIT P2.0
RS BIT P2.0
RW BIT P2.1
E BIT P2.2
PSB BIT P2.3
RST BIT P2.5
LCD EQU P1
ORG 0000H
SJMP MAIN
ORG 0060H
MAIN:;CLR RS
;CLR RW
;CLR RST
ACALL DELAY5MS
CLR RST
ACALL DELAY5MS
SETB RST
ACALL INIT_LCD
LOOP:ACALL DISP
ACALL DELAY1S
AJMP LOOP
INIT_LCD:MOV A,#30H ;设定基本指令集
ACALL WR_COM ;调用写指令
ACALL DELAY50US
MOV A,#30H ;再次设定基本指令集
ACALL WR_COM ;调用写指令
ACALL DELAY50US
MOV A,#0CH ;开显示,关光标,不显示
ACALL WR_COM ;调用写指令
ACALL DELAY50US
MOV A,#01H ;清屏
ACALL WR_COM ;调用写指令
ACALL DELAY50US
MOV A,#06H ;指定在资料写入或读取时,光标的移动方向
ACALL WR_COM ;调用写指令
ACALL DELAY50US
RET
DISP:MOV A,#80H ;将首地址送入12864
ACALL WR_COM ;调用写命令
ACALL DELAY5MS
MOV A,#'A' ;传送数据给LCD
ACALL WR_DATA ;显示'A'
ACALL DELAY5MS
RET
WR_COM:ACALL CHECK_BF
CLR RS
CLR RW
SETB E
MOV LCD,A
NOP
NOP
CLR E
RET
WR_DATA:ACALL CHECK_BF
SETB RS
CLR RW
SETB E
MOV LCD,A
NOP
NOP
CLR E
RET
CHECK_BF:MOV LCD,#0FFH
SETB RS
CLR RW
SETB E
MOV A,LCD
JB ACC.7,CHECK_BF
CLR E
RET
DELAY1S:MOV R5,#100
D1:MOV R6,#100
D2:MOV R7,#50
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
DELAY50US:NOP
NOP
NOP
NOP
NOP
RET
DELAY1MS:ACALL DELAY50US
ACALL DELAY50US
RET
DELAY5MS:ACALL DELAY1MS
ACALL DELAY1MS
ACALL DELAY1MS
ACALL DELAY1MS
ACALL DELAY1MS
RET
END
希望大佬们解答一下,谢谢!!!
|