用的AT89S52单片机,按照ST7920的规格书写的程序,现在还是点不亮,用JHD529M1的是可以的,这两个控制器有些指令是有区别,按照规格书改过来了.那些高手帮我分析一下,把程序也发上来.谢谢.
B_CS BIT P2.0
B_DA BIT P2.1
B_CLK BIT P2.2
B_RET BIT P2.5
B_PSB BIT P2.3
R_LCDDATA EQU 40H
ORG 0000H
JMP START
ORG 0030H
START:
MOV SP,#70H
LCALL F_LCDINT
LCALL DELAY5MS
MOV R_LCDDATA,#80H
MOV DPTR,#TABLE1
LCALL F_LCDDATA
MOV R_LCDDATA,#90H
MOV DPTR,#TABLE2
LCALL F_LCDDATA
MOV R_LCDDATA,#0A0H
MOV DPTR,#TABLE3
LCALL F_LCDDATA
MOV R_LCDDATA,#0B0H
MOV DPTR,#TABLE4
LCALL F_LCDDATA
JMP $
/***************初始化***************************/
F_LCDINT:
CLR B_PSB
CLR B_CLK
CLR B_RET
LCALL DELAY10MS
SETB B_RET
MOV R_LCDDATA,#20H ; 基本指令操作
LCALL F_LCDINS
MOV R_LCDDATA,#06H ;
LCALL F_LCDINS
MOV R_LCDDATA,#0CH ;开显示,关光标,不闪烁
LCALL F_LCDINS
MOV R_LCDDATA,#01H ;清屏
LCALL F_LCDINS
LCALL DEALY4600
RET
;---------------写指令---------------
F_LCDINS:
MOV A,#0F8H
LCALL WR_BIT
MOV A,R_LCDDATA
ANL A,#0F0H
LCALL WR_BIT
MOV A,R_LCDDATA
ANL A,#0FH
SWAP A
LCALL WR_BIT
LCALL DELAY72US
RET
;----------------写数据位-----------------
WR_BIT:
MOV R3,#8
CLR B_CLK
L_LOOP:
RLC A
MOV B_DA,C
SETB B_CLK
NOP
NOP
NOP
CLR B_CLK
DJNZ R3,L_LOOP
RET
DELAY72US:
MOV R4,#36
DJNZ R4,$
RET
DELAY10MS:
MOV R6,#38
DLY1:
MOV R7,#130
DJNZ R7,$
DJNZ R6,DLY1
RET
/**************写数据**********************/
F_LCDDATA:
LCALL F_LCDINS
MOV R6,#0
L_LOOP1:
MOV A,R6
MOVC A,@A+DPTR
MOV R_LCDDATA,A
LCALL F_LCDOUT
INC R6
MOV R7,#8
L_LOOP2:
LCALL DELAY10MS
DJNZ R7,L_LOOP2
CJNE R6,#16,L_LOOP1
RET
F_LCDOUT:
MOV A,#0FAH
LCALL WR_BIT
MOV A,R_LCDDATA
ANL A,#0F0H
LCALL WR_BIT
MOV A,R_LCDDATA
ANL A,#0FH
SWAP A
LCALL WR_BIT
LCALL DELAY72US
RET
DEALY4600:
MOV R6,#16
DLY3:
MOV R7,#142
DJNZ R7,$
DJNZ R6,DLY3
RET
DELAY5MS :
MOV R6,#15
DLY2:
MOV R7,#165
DJNZ R7,$
DJNZ R6,DLY2
RET
/******************************************/
TABLE1: DB " 红外线遥控是目前"
TABLE2: DB "使用最广泛的一种"
TABLE3: DB "通信和遥控手段由"
TABLE4: DB "于红外线遥控装置具"
END |