为什么程序运行一段时间后就会花屏
CS BIT P2.0 ;片选 试验板上的连接线
SID BIT P2.1 ;串行数据线
SCLK BIT P2.2
ORG 0000H
LJMP MAIN
ORG 0060H
MAIN:clr p2.3 ;这3句是因为实验板上没有连线,如果有液晶屏上连接上后就不需要了
setb p2.4
setb p2.5
LCALL LCDRESET
X1:LCALL HZDIS
lcall x1
LCDRESET:LCALL DL1MS
MOV A,#30H ;使用基本指令集(0011 0000B)
LCALL LCDWRITE
LCALL DL1MS
MOV A,#0CH
LCALL LCDWRITE ;整体显示(00001100B)
LCALL DL1MS
MOV A,#01H
LCALL LCDWRITE ;清屏(00000001B)
LCALL DL1MS
MOV A,#06H
LCALL LCDWRITE ;显示右移(00000110B)
LCALL DL1MS
RET
LCDWRITE:SETB CS
SETB SID
CLR SCLK
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
CLR SCLK
SETB SCLK ;5
CLR SCLK
CLR SID
SETB SCLK ;RW=0
CLR SCLK
SETB SCLK ;RS=0
CLR SCLK
SETB SCLK ;1
CLR SCLK
MOV C,ACC.7
MOV SID,C
SETB SCLK ;1
CLR SCLK
MOV C,ACC.6
MOV SID,C
SETB SCLK ;2
CLR SCLK
MOV C,ACC.5
MOV SID,C
SETB SCLK ;3
CLR SCLK
MOV C,ACC.4
MOV SID,C
SETB SCLK ;4
CLR SCLK ;SID=0000
CLR SID
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
CLR SCLK
MOV C,ACC.3
MOV SID,C
SETB SCLK ;1
CLR SCLK
MOV C,ACC.2
MOV SID,C
SETB SCLK ;2
CLR SCLK
MOV C,ACC.1
MOV SID,C
SETB SCLK ;3
CLR SCLK
MOV C,ACC.0
MOV SID,C
SETB SCLK ;4
CLR SCLK
CLR SID
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
LCALL DL1MS
SETB CS
RET
LCDDAT:SETB SCLK
SETB SID
CLR SCLK
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
CLR SCLK
SETB SCLK ;5
CLR SCLK
CLR SID
SETB SCLK ;RW=0
CLR SCLK
SETB SID
SETB SCLK ;RS=1
CLR SCLK
CLR SID
SETB SCLK ;1
CLR SCLK
MOV C,ACC.7
MOV SID,C
SETB SCLK ;1
CLR SCLK
MOV C,ACC.6
MOV SID,C
SETB SCLK ;2
CLR SCLK
MOV C,ACC.5
MOV SID,C
SETB SCLK ;3
CLR SCLK
MOV C,ACC.4
MOV SID,C
SETB SCLK ;4
CLR SCLK ;SID=0000
CLR SID
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
CLR SCLK
MOV C,ACC.3
MOV SID,C
SETB SCLK ;1
CLR SCLK
MOV C,ACC.2
MOV SID,C
SETB SCLK ;2
CLR SCLK
MOV C,ACC.1
MOV SID,C
SETB SCLK ;3
CLR SCLK
MOV C,ACC.0
MOV SID,C
SETB SCLK ;4
CLR SCLK ;SID=0000
CLR SID
SETB SCLK ;1
CLR SCLK
SETB SCLK ;2
CLR SCLK
SETB SCLK ;3
CLR SCLK
SETB SCLK ;4
LCALL DL1MS
SETB CS
RET
WRHZ:LCALL LCDWRITE ;读汉字需要读2个字节 调用写指令
NOP
DD:CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL LCDDAT
CLR A
MOVC A,@A+DPTR
INC DPTR
LCALL LCDDAT
DJNZ R4,DD
RET
HZDIS:
MOV DPTR,#TAB_HZ ;合闸表
H1:MOV R4,#08H
MOV A,#80H
LCALL WRHZ
lcall dl500ms
MOV DPTR,#TAB2 ;第2行显示
MOV R4,#08H
MOV A,#90H
LCALL WRHZ
lcall dl500ms
MOV DPTR,#TAB3 ;第3行显示
MOV R4,#08H
MOV A,#88H
LCALL WRHZ
lcall dl500ms
MOV DPTR,#TAB4 ;第4行显示
MOV R4,#08H
MOV A,#98H
LCALL WRHZ
lcall dl500ms
RET
DL1MS: ;延时子程序
PUSH 00H ;0.1MS
PUSH 01H
PUSH 02H
MOV R2,#01H
WA_PA: MOV R0,#0FH
WA_PB: MOV R1,#0FH
DJNZ R1,$
DJNZ R0,WA_PB
DJNZ R2,WA_PA
POP 02H
POP 01H
POP 00H
RET
NOP
RET
DL500MS:MOV R2,#50
D5:LCALL DEL_2MS
DJNZ R2,D5
RET
DEL_2MS:MOV R0,#2
D1:MOV R1,#200
D2:NOP
NOP
NOP
DJNZ R1,D2
DJNZ R0,D1
RET
DL40MS: ;延时子程序
PUSH 00H ;40MS
PUSH 01H
PUSH 02H
MOV R2,#01H
DL_PA: MOV R0,#0FFH
DL_PB: MOV R1,#0FFH
DJNZ R1,$
DJNZ R0,DL_PB
DJNZ R2,DL_PA
POP 02H
POP 01H
POP 00H
RET
NOP
NOP
NOP
RET
TAB_HZ:DB 0BFH,0AAH,0B9H,0D8H,0D7H,0B4H,0CCH,0ACH ;
DB 0A3H,0BAH,020H,020H,0BAH,0CFH,0D5H,0A2H ;
TAB2:DB 0B5H,0E7H,0D1H,0B9H,0A3H,0BDH,031H,031H ;
DB 034H,030H,056H,020H,020H,020H,020H,020H ;
TAB3:DB 0B5H,0E7H,0C1H,0F7H,0A3H,0BDH,034H,030H ;
DB 030H,041H,020H,020H,020H,020H,020H,020H ;
TAB4:DB 0B5H,0E7H,0C1H,0F7H,0A3H,0BDH,034H,030H ;
DB 030H,041H,020H,020H,020H,020H,020H,020H ;
END |