📄 lcddisplayandkeyboard.txt
字号:
;本程序为简单的12232F型LCD液晶显示及键盘功能程序
;K1键为进入调整,进入后显示四个0,再次按下为退出调整,初始状态 ;为首行显示河北工程大学
;K2键为进入调整后加一
;K3键为进入调整后减一
;K4键为光标右移
ORG 0000H
AJMP MAIN
ORG 0100H
;/主程序,LCD初始化/
MAIN: LCALL DELAY1 ;主程序开始,调用延时
MOV SP, #40H
MOV A, #01H ;清屏
LCALL ORDER
LCALL BUSY
LCALL DELAY2
MOV A, #0EH ;整体显示,游标开,关闪烁
LCALL ORDER
LCALL BUSY
MOV A, #06H ;游标右移,地址计数器加一
LCALL ORDER
LCALL BUSY
MOV A, #80H ;赋第一行行首地址
LCALL ORDER
LCALL BUSY
LCALL SHOW ;调用显示子程序
MOV A, #02H ;地址归位
LCALL ORDER
LCALL BUSY
MOV A, #90H ;赋第二行行首地址
LCALL ORDER
LCALL BUSY
LCALL SHOWR ;调用显示子程序
;/K1键扫描程序/
KEY: MOV C, P2.1 ;查询K1键
LCALL DELAY2 ;消抖动
ORL C, P2.1
JC KEY ;未按下,重新查询
LCALL DELAY2
SJMP L ;有键按下,进入调整,跳转键盘查询程序
DELAY2: MOV R2, #100 ;延时子程序
DEL21: MOV R3, #160
DEL22: DJNZ R3, DEL22
DJNZ R2, DEL21
RET
;/K1键按下,键盘扫描/
L: MOV A, #02H ;K1键按下,地址归位
LCALL ORDER
LCALL BUSY
LCALL DELAY2
MOV A, #01H ;清屏
LCALL ORDER
LCALL BUSY
LCALL DELAY3
MOV A, #0FH ;整体显示,开光标,开闪烁
LCALL ORDER
LCALL BUSY
MOV R4, #04H ;显示四个0,循环次数
LOOP2: MOV A, #0A3H ;0显示
LCALL DIGITAL
LCALL BUSY
MOV A, #0B0H
LCALL DIGITAL
LCALL BUSY
DJNZ R4, LOOP2
LCALL DELAY2
MOV A, #02H ;显示结束,地址归位
LCALL ORDER
LCALL BUSY
LCALL DELAY2
MOV A, #80H ;赋首行行首地址
LCALL ORDER
LCALL BUSY
MOV R5, #04H ;K4键按下的循环次数
MOV DPTR,#TAB1 ;赋表首地址
MOV A, #TAB1
ADD A, #16
MOV R4, A ;赋表尾地址
MOV R6, #01H ;数字显示循环次数
MOV R0, #80H ;保存首行行首地址
MOV 31H, DPH ;开辟显示缓冲区
MOV 32H, DPL
MOV 33H, DPH
MOV 34H, DPL
MOV 35H, DPH
MOV 36H, DPL
MOV 37H, DPH
MOV 38H, DPL
KEYBOARD1:MOV A, P2 ;键盘查询子程序
ANL A, #1EH ;屏蔽高三位和最低位
MOV B, A
LCALL DELAY1 ;消抖动
MOV A, P2
ANL A, #1EH
CJNE A, B, RETURN ;相等则有键按下
CJNE A, #1CH, KEY2 ;相等则K1按下,不等则继续查询
LJMP LKEY1
KEY2: CJNE A, #1AH, KEY3 ;相等则K2按下,不等则继续查询
LCALL LKEY2
KEY3: CJNE A, #16H, KEY4 ;相等则K3按下,不等则继续查询
LCALL LKEY3
KEY4: CJNE A, #0EH, RETURN ;相等则K4按下,不等则重新查询
LCALL LKEY4
LCALL DELAY1
RETURN: SJMP KEYBOARD1
LKEY1: LJMP MAIN ;K1再次按下,退出调整
LKEY2: CJNE R0, #80H, LKEY21 ;K2键按下,查询光标位置
MOV DPH,31H
MOV DPL,32H
LKEY21: CJNE R0, #81H, LKEY22
MOV DPH,33H
MOV DPL,34H
LKEY22: CJNE R0, #82H, LKEY23
MOV DPH,35H
MOV DPL,36H
LKEY23: CJNE R0, #83H, KAISHI
MOV DPH,37H
MOV DPL,38H
KAISHI: MOV R7, #02H
CJNE R6, #0AH, PLKEY2 ;显示9则返回1
MOV DPTR, #TAB1
MOV R6, #01H
PLKEY2: CLR A ;加1显示程序
MOVC A, @A+DPTR
LCALL DIGITAL
LCALL DELAY1
INC DPTR
DJNZ R7, PLKEY2
CJNE R0, #80H, PLKEY21 ;显示结果存入对应缓冲区
MOV 31H,DPH
MOV 32H,DPL
PLKEY21: CJNE R0, #81H, PLKEY22
MOV 33H, DPH
MOV 34H, DPL
PLKEY22: CJNE R0, #82H, PLKEY23
MOV 35H, DPH
MOV 36H, DPL
PLKEY23: CJNE R0, #83H, TT
MOV 37H, DPH
MOV 38H, DPL
TT: INC R6 ;一次显示结束,光标归位,
MOV A, #02H
LCALL ORDER
LCALL BUSY
LCALL DELAY1
MOV A, R0
LCALL ORDER
LCALL BUSY
LCALL DELAY3
RET
LKEY3: CJNE R0, #80H, LKEY31 ;K3键按下,确定光标位置,确定显示缓冲区
MOV DPH, 31H
MOV DPL, 32H
LKEY31: CJNE R0, #81H, LKEY32
MOV DPH, 33H
MOV DPL, 34H
LKEY32: CJNE R0, #82H, LKEY33
MOV DPH, 35H
MOV DPL, 36H
LKEY33: CJNE R0, #83H, KAISHI2
MOV DPH, 37H
MOV DPL, 38H
KAISHI2: MOV R7, #02H
MOV A, #TAB1 ;减一显示策略
SUBB A, #01H
MOV 40H, A
MOV A, DPL
CJNE A, 40H, PLKEY3
MOV DPL, R4
PLKEY3: CLR A ;减一显示子程序
MOVC A, @A+DPTR
LCALL DIGITAL
LCALL DELAY1
INC DPTR
DJNZ R7, PLKEY3
MOV A, DPL
SUBB A, #04H
MOV DPL, A
CJNE R0, #80H, PLKEY31 ;一次显示结束,结果存入对应缓冲区
MOV 31H, DPH
MOV 32H, DPL
PLKEY31: CJNE R0, #81H, PLKEY32
MOV 33H, DPH
MOV 34H, DPL
PLKEY32: CJNE R0, #82H, PLKEY33
MOV 35H, DPH
MOV 36H, DPL
PLKEY33: CJNE R0, #83H, TT2
MOV 37H, DPH
MOV 38H, DPL
TT2: MOV A, #02H ;一次显示结束,光标复位
LCALL ORDER
LCALL BUSY
LCALL DELAY1
MOV A, R0
LCALL ORDER
LCALL BUSY
LCALL DELAY3
RET
LKEY4: MOV A, #14H ;K4键按下,光标右移
LCALL ORDER
LCALL BUSY
INC R0
DJNZ R5, RETURN4
MOV R5 ,#04H ;移至行尾,再赋循环次数
MOV A, #02H
LCALL ORDER
LCALL BUSY
LCALL DELAY2
MOV R0, #80H
MOV A, R0
LCALL ORDER
LCALL BUSY
RETURN4: RET
TAB1: DW 0A3B1H 0A3B2H 0A3B3H 0A3B4H 0A3B5H ;加一减一数字表
DW 0A3B6H 0A3B7H 0A3B8H 0A3B9H
;/显示子程序/
SHOW: MOV DPTR,#TAB ;显示字符子程序
SHOWR: MOV R7, #0CH
SHOWL: CLR A
MOVC A, @A+DPTR
LCALL DIGITAL
INC DPTR
LCALL BUSY
DJNZ R7, SHOWL
RET
TAB: DW 0BAD3H 0B1B1H 0B9A4H 0B3CCH 0B4F3H 0D1A7H ;字符表
DW 0D5D4H 0C1F5H 0CCEFH 0C8CEH 0CBD5H 0CDF5H
ORDER: CLR P2.7 ;命令输入子程序
CLR P2.6
SETB P2.5
MOV P1, A
CLR P2.5
RET
BUSY: PUSH PSW ;查询是否繁忙子程序
PUSH A
SETB P2.6
SETB P2.5
LOOP: MOV A, P1
JB ACC.7, LOOP
POP A
POP PSW
RET
DIGITAL:SETB P2.7 ;数据输入子程序
CLR P2.6
SETB P2.5
MOV P1, A
CLR P2.5
RET
DELAY1: MOV R2, #200 ;延时子程序
DEL11: MOV R3, #100
DEL12: DJNZ R3, DEL12
DJNZ R2, DEL11
RET
DELAY3: MOV R2, #200
DEL31: MOV R3, #200
DEL32: DJNZ R3, DEL32
DJNZ R2, DEL31
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -