📄 新建 文本文档.txt
字号:
;********用反转法扫描键盘并显示*******
ORG 0000H
LJMP KL1
KL1: MOV P3,#00FH ;先令行线为低惦平,列线为高电平
JB P3.4,PK1 ;若第一行行线变为高电平说明有键按下,跳到PK1
JB P3.5,PK1 ;判断第二行
JB P3.6,PK1 ;判断第三行
JNB P3.7,KL1 ;判断第四行,无键按下跳到KL1,重新扫描
PK1: LCALL DL10 ;延时消抖,重新扫描
JB P3.4,PK2
JB P3.5,PK3
JB P3.6,PK4
JNB P3.7,KL1
MOV A,#0CH ;第四行有键按下,把0CH放入累加器
LJMP PK5 ;跳到PK5
PK2: MOV A,#00H ;第一行有键按下,把00H放入累加器
LJMP PK5 ;跳到PK5
PK3: MOV A,#04H ;第二行有键按下,把04H放入累加器
LJMP PK5 ;跳到PK5
PK4: MOV A,#08H ;第三行有键按下,把08H放入累加器
PK5: MOV P3,#0F0H ;令行线为高,列线为低,进行列扫描
JB P3.0,PKONE ;判断第一列是否有键按下,若有跳到PKONE
JB P3.1,PKTWO ;判断第二列是否有键按下
JB P3.2,PKTHR ;判断第三列是否有键按下
JNB P3.3,KL1 ;判断第四列是否有键按下
LCALL KL4 ;调用子程序,等待键释放
ADD A,#03H ;计算键值
LCALL DIR ;调用显示程序
SJMP KL1 ;跳到KL1,重新键盘扫描
PKONE: LCALL KL4 ;调用子程序,等待键释放
ADD A,#00H ;第一列键按下,计算键值
LCALL DIR ;调用显示程序
SJMP KL1 ;跳到KL1,重新键盘扫描
PKTWO: LCALL KL4 ;调用子程序,等待键释放
ADD A,#01H ;第二列键按下,计算键值
LCALL DIR ;调用显示程序
SJMP KL1 ;跳到KL1,重新键盘扫描
PKTHR: LCALL KL4 ;调用子程序,等待键释放
ADD A,#02H ;第三列键按下,计算键值
LCALL DIR ;调用显示程序
SJMP KL1 ;跳到KL1,重新键盘扫描
;*******等待键释放子程序**********
KL4: JB P3.0,KL4
JB P3.1,KL4
JB P3.2,KL4
JB P3.3,KL4
RET
;*********显示子程序*************
DIR: MOV DPTR,#TAB ;查表
MOVC A,@A+DPTR
MOV P0,A ;A送P0口显示
RET
;***********延时10ms程序*********
DL10: MOV R7,#0AH
DEL1: MOV R6,#0FFH
DEL2: DJNZ R6,DEL2
DJNZ R7,DEL1
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H,73H,3EH
DB 31H,6EH,1CH,23H,40H,03H
DB 18H,00
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -