📄 lcd.txt
字号:
XPOS EQU 20H ;列方向地址指针(用于LCDPOS子程序)
YPOS EQU 21H ;行方向地址指针(用于LCDPOS子程序)
RWADDR EQU 0800H ;P2.3
CS1ADDR EQU 0200H ;P2.2
CS2ADDR EQU 0400H ;P2.1
RSADDR EQU 0100H ;P2.0
CSADDR EQU 8000H ;P2.7
ORG 0000H
SJMP START
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 0040H
START:
MOV SP,#60H
LCALL LCDRESET
MOV A,#00h
LCALL LCDFILL
LCALL LCDINIT
LCALL LCDRESET
MOV A,#00h
LCALL LCDFILL
MAIN:
MOV A,#00h
LCALL LCDFILL
MOV A,#01H
LCALL LCDLINE
LCALL LCDSIN
LCALL DELAY11
LCALL DELAY11
LCALL DELAY11
LCALL DELAY11
LJMP MAIN
LCDINIT:
LCALL LCDRESET
MOV A,#00h
LCALL LCDFILL
LCALL LCDRESET
MOV DPTR,#STRING1
MOV XPOS,#30
MOV YPOS,#0
LCALL PUTSTR
MOV XPOS,#10
MOV YPOS,#3
LCALL PUTSTR
LCALL DELAY11
LCALL DELAY11
LCALL DELAY11
MOV A,#00h
LCALL LCDFILL
MOV XPOS,#0
MOV YPOS,#0
LCALL PUTSTR
MOV XPOS,#80
MOV YPOS,#2
LCALL PUTSTR
MOV XPOS,#80
MOV YPOS,#4
LCALL PUTSTR
LCALL DELAY11
LCALL DELAY11
LCALL DELAY11
MOV A,#00h
LCALL LCDFILL
MOV XPOS,#0
MOV YPOS,#6
LCALL PUTSTR
MOV XPOS,#80
MOV YPOS,#2
LCALL PUTSTR
LCALL DELAY11
LCALL DELAY11
LCALL DELAY11
MOV XPOS,#80
MOV YPOS,#0
LCALL PUTSTR
MOV A,#00h
LCALL LCDFILL
MOV XPOS,#0
MOV YPOS,#3
LCALL PUTSTR
LCALL DELAY11
LCALL DELAY11
LCALL DELAY11
LCALL DELAY11
MOV A,#00h
LCALL LCDFILL
MOV XPOS,#0
MOV YPOS,#0
LCALL PUTSTR
LCALL DELAY11
LCALL DELAY11
LCALL DELAY11
LCALL DELAY11
ret
GETSTRCHAR:
GSC_PA:
CLR A
MOVC A,@A+DPTR
INC DPTR
MOV B,A
INC A
CLR C
JZ GSC_LAX
CLR A
MOVC A,@A+DPTR
INC DPTR
SETB C
GSC_LAX:
RET
PUTSTR:
CALL LCDRESET
CALL DELAY
CALL GETSTRCHAR
PUSH DPL
PUSH DPH
JNC PSR_LAX
JNB B.7,PSR_LBY
;CHINESE:
CALL HZKPOS
CALL PUTCHARDOT
CALL PUTCHARDOT
JMP PSR_LBX
PSR_LBY:
;ENGLISH:
CALL HZKPOS
CALL PUTCHARDOT
PSR_LBX:
POP DPH
POP DPL
JMP PUTSTR
PSR_LAX:POP DPH
POP DPL
RET
HZKPOS:
MOV R2,#5
HTP_PA:
CLR C
RLC A
XCH A,B
RLC A
XCH A,B
DJNZ R2,HTP_PA
MOV DPTR,#HZKDOT
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
RET
DELAY:
MOV R6,#2
DLY_PA: MOV R5,#0
DLY_PB: MOV R4,#0
DJNZ R4,$
DJNZ R5,DLY_PB
DJNZ R6,DLY_PA
RET
LCDFILL: ;LCD整屏显示A的内容
MOV R7,A
MOV YPOS,#0
LFL_PB: MOV XPOS,#0
LFL_PA: MOV A,R7
LCALL LCDWRITE ;定位并写数据
INC XPOS
MOV A,XPOS
CJNE A,#128,LFL_PA ;XPOS<128则循环(128列)
INC YPOS
MOV A,YPOS
CJNE A,#8,LFL_PB ;YPOS<8则循环(8页)
MOV XPOS,#0
MOV YPOS,#0
RET
LCDLINE: ;LCD整屏显示A的内容
MOV R7,A
MOV YPOS,#4
MOV XPOS,#40
LFL_PA1: MOV A,R7
LCALL LCDWRITE ;定位并写数据
INC XPOS
MOV A,XPOS
CJNE A,#128,LFL_PA1 ;XPOS<128则循环(128列)
MOV XPOS,#0
MOV YPOS,#0
RET
LCDSIN: ;LCD整屏显示A的内容
PUSH 0
MOV R0,#00H
MOV XPOS,#40
MOV YPOS,#0
LFL_PA11: CJNE R0,#255,XIA1
MOV R0,#00H
XIA1: MOV DPTR,#SIN
MOV A,R0
MOVC A,@A+DPTR
MOV B,A
CLR C
SUBB A,#224
JC COM192
MOV YPOS,#7
LCALL COM_A
LJMP LCD_END
COM192:MOV A,B
CLR C
SUBB A,#192
JC COM160
MOV YPOS,#6
LCALL COM_A
LJMP LCD_END
COM160:MOV A,B
CLR C
SUBB A,#160
JC COM128
MOV YPOS,#5
LCALL COM_A
LJMP LCD_END
COM128:MOV A,B
CLR C
SUBB A,#128
JC COM96
MOV YPOS,#4
LCALL COM_A
LJMP LCD_END
COM96:MOV A,B
CLR C
SUBB A,#96
JC COM64
MOV YPOS,#3
LCALL COM_A
LJMP LCD_END
COM64: MOV A,B
CLR C
SUBB A,#64
JC COM32
MOV YPOS,#2
LCALL COM_A
LJMP LCD_END
COM32: MOV A,B
CLR C
SUBB A,#32
JC COM0
MOV YPOS,#1
LCALL COM_A
LJMP LCD_END
COM0 : MOV A,B
CLR C
MOV YPOS,#0
LCALL COM_A
LCD_END:
LCALL LCDWRITE ;定位并写数据
INC XPOS
MOV A,XPOS
INC R0
INC R0
INC R0
INC R0
INC R0
INC R0
INC R0
INC R0
INC R0
INC R0
INC R0
INC R0
SUBB A,#128 ;XPOS<128则循环(128列)
JNC XIA
LJMP LFL_PA11
XIA: MOV XPOS,#0
MOV YPOS,#0
RET
COM_A: PUSH 1
MOV R1,A
CLR C
SUBB A,#80H
JC COM40H
MOV A,#0E0H
LJMP COM_END
COM40H: MOV A,R1
CLR C
SUBB A,#40H
JC COM20H
MOV A,#70H
LJMP COM_END
COM20H: MOV A,R1
CLR C
SUBB A,#20H
JC COM10H
MOV A,#38H
LJMP COM_END
COM10H: MOV A,R1
CLR C
SUBB A,#10H
JC COM08H
MOV A,#1CH
LJMP COM_END
COM08H: MOV A,R1
CLR C
SUBB A,#08H
JC COM04H
MOV A,#0EH
LJMP COM_END
COM04H: MOV A,R1
CLR C
SUBB A,#04H
JC COM02H
MOV A,#07H
LJMP COM_END
COM02H: MOV A,R1
CLR C
SUBB A,#02H
JC COM01H
MOV A,#03H
LJMP COM_END
COM01H: MOV A,#01H
COM_END:POP 1
RET
COM_A1: PUSH 1
MOV R1,A
CLR C
SUBB A,#28
JC COM40H1
MOV A,#01H
LJMP COM_END1
COM40H1: MOV A,R1
CLR C
SUBB A,#24
JC COM20H1
MOV A,#02H
LJMP COM_END1
COM20H1: MOV A,R1
CLR C
SUBB A,#20
JC COM10H1
MOV A,#01H
LJMP COM_END1
COM10H1: MOV A,R1
CLR C
SUBB A,#16
JC COM08H1
MOV A,#08H
LJMP COM_END1
COM08H1: MOV A,R1
CLR C
SUBB A,#12
JC COM04H1
MOV A,#10H
LJMP COM_END1
COM04H1: MOV A,R1
CLR C
SUBB A,#8
JC COM02H1
MOV A,#20H
LJMP COM_END1
COM02H1: MOV A,R1
CLR C
SUBB A,#4
JC COM01H1
MOV A,#40H
LJMP COM_END1
COM01H1: MOV A,#80H
COM_END1:POP 1
RET
LCDWRITE: ;定位并写数据子程序
LCALL LCDPOS ;内部写数指针定位
LCALL LCDWD ;写数据
RET
LCDPOS: ;内部写数指针定位子程序
PUSH ACC
MOV A,XPOS
JB ACC.6,LPS_LAY
MOV A,YPOS ;XPOS列方向小于64则对CS1操作
ANL A,#07H
ADD A,#0B8H
CALL LCDWC1 ;设页码
MOV A,XPOS
ANL A,#3FH
ORL A,#40H
CALL LCDWC1 ;设列码
JMP LPS_LAX
LPS_LAY:MOV A,YPOS ;XPOS列方向大于等于64则对CS2操作
ANL A,#07H
ADD A,#0B8H
CALL LCDWC2 ;设页码
MOV A,XPOS
ANL A,#3FH
ORL A,#40H
CALL LCDWC2 ;设列码
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -