#1楼主:求助1602c,虽然是很简单的东西,可就是调不出来
文章发表于:2008-05-16 09:27
CW_Add EQU 8000H ;写指令代码
CR_Add EQU 0A000H ; read busy and ac
DW_Add EQU 0C000H ;WRITE DATA
ORG 00H
AJMP START
ORG 0100H
START:ACALL DELY20MS ;等待LCD电源稳定
MOV SP,#50H
INIT:MOV A,#00000001B ;初始话清屏
ACALL WC51R
ACALL DELY
MOV A,#00111000B ;双行显示 ,5*7字符,8位数据
LCALL WC51R
ACALL DELY
MOV A,#0EH ;显示开,光标开,闪烁关
LCALL WC51R
ACALL DELY
MOV A,#00000110B ; AC自动加 1,画面保持不动
LCALL WC51R
ACALL DELY
DISPLAY:MOV A,#10000000B ;设置显示位置
ACALL WC51R
MOV A,#"G"
ACALL WC51DDR
MOV A,#"O"
ACALL WC51DDR
MOV A,#"O"
ACALL WC51DDR
MOV A,#"D"
ACALL WC51DDR
MOV A,#11000101B
ACALL WC51R
MOV A,#"B"
ACALL WC51DDR
MOV A,#"Y"
ACALL WC51DDR
MOV A,#"E"
ACALL WC51DDR
LOOP:MOV P2,#00H ;在硬件上观测能否运行完显示程序
ACALL DELY2S
MOV P2,#0FFH
ACALL DELY2S
LJMP LOOP
;--------------1、读BF和AC值
F_BUSY: PUSH ACC
MOV DPTR,#CR_Add ;设置指令口读地址
WAIT: MOVX A,@DPTR ;读BF和AC值
JB ACC.7,WAIT
POP ACC
RET
;-------2、写指令代码子程序
WC51R: ACALL F_BUSY
MOV DPTR,#CW_Add
MOVX @DPTR,A
ACALL DELY
RET
;-------------2、写显示数据子程序
WC51DDR: ACALL F_BUSY
MOV DPTR,#DW_Add
MOVX @DPTR,A
ACALL DELY
RET
DELY: MOV R6,#5
D1:MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DELY20MS:MOV R6,#64H
AAA:MOV R7,#98
NOP
DJNZ R7,$
DJNZ R6,AAA
RET
DELY2S: MOV R5,#64H
ABC:MOV R6,#64H
BBB:MOV R7,#99
NOP
DJNZ R7,$
DJNZ R6,BBB
DJNZ R5,ABC
RET
END
万分感谢