最近在做設計,要求用匯編,就模仿網上的代碼。但是初始化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
希望大佬們解答一下,謝謝!!!
|