📄 矩阵键盘测试.asm
字号:
KD EQU 55H
KP EQU 56H
ORG 0000H
MAIN:
LCALL JIANPAN
AJMP MAIN
JIANPAN:
MOV P1,#0F0H ; 置P1口为输入方式
MOV A,P1 ; 读入按键状态
ANL A,#0F0H ; 保留高4位
CJNE A,#0F0H,KEY1 ; 判断是否有键按下
CLR KD
CLR KP
SJMP KEYE ; 转到子程序
KEY1: JB KD ,KEY2 ; 有键按下且已延时去抖
SETB KD ; 首次被识别,置标志位
SJMP KEYE ; 子程序返回
KEY2: JB KP,KEYE ; 键已处理,子程序返回
SETB KP ; 键首次被处理,置标志位
MOV R4, #0FEH ; 设置逐行扫描初始化代码
MOV R3,#00H ; 行首号初始值为0
KEY3: MOV A,R4 ; 取出行扫描代码
MOV P1,A ; 输出行扫描代码
JB P1.4,NEXT1 ; 判别第0列是否有键按下
MOV A,#00H ; 第0列有键按下
SJMP KEYD ; 转计算键号
NEXT1: JB P1.5,XEXT2 ; 判别第1行是否有键按下
MOV A,#01H ; 第一列有键按下
SJMP KEYD ; 转计算键号
XEXT2: JB P1.6,XEXT3 ; 判别第二列是否有键按下
MOV A,#02H ; 第二列有键按下
SJMP KEYD ; 转计算按键
XEXT3: JB P1.7,NEXT4 ; 判断第三列是否有键按下
MOV A,#03H ; 第三列有键按下
SJMP KEYD ; 转计算键号
NEXT4: MOV A,R4 ; 取出行扫描打码
JNB ACC.3,KEYE ; 判断是否扫描完最后1行
RL A ; 准备扫描下一行
MOV R4,A ;
MOV A,R3 ; 修改下一行行首键号
ADD A,#4 ;
MOV R3,A ;
SJMP KEY3 ; 转回继续扫描下1行
KEYD: ADD A,R3 ; 键号=列号+行首号
RL A ; 根据键号转到键的处理程序
MOV DPTR,#TABLE ;
JMP @A+DPTR ;
KEYE: RET ;
TABLE: AJMP PR0 ; 转0号键的处理程序
AJMP PR1 ; 转1号键的处理程序
AJMP PR2 ; 转2号键的处理程序
AJMP PR3 ; 转3号键的处理程序
AJMP PR4 ; 转4号键的处理程序
AJMP PR5 ; 转5号键的处理程序
AJMP PR6 ; 转6号键的处理程序
AJMP PR7 ; 转7号键的处理程序
AJMP PR8 ; 转8号键的处理程序
AJMP PR9 ; 转9号键的处理程序
AJMP PR10 ; 转10号键的处理程序
AJMP PR11 ; 转11号键的处理程序
AJMP PR12
AJMP PR13
AJMP PR14
AJMP PR15
;.........................................................................
PR0:
CPL P2.0
RET
;.........................................................................
PR1:
CPL P2.0
RET
;.........................................................................
PR2:
CPL P2.1
RET
;.........................................................................
PR3:
CPL P2.1
RET
;.........................................................................
PR4:
CPL P2.2
RET
;.........................................................................
PR5:
CPL P2.2
RET
;.........................................................................
PR6:
CPL P2.3
RET
;.........................................................................
PR7:
CPL P2.3
RET
;.........................................................................
PR8:
CPL P2.4
RET
;.........................................................................
PR9:
CPL P2.4
RET
;.........................................................................
PR10:
CPL P2.5
RET
;.........................................................................
PR11:
CPL P2.5
RET
;.........................................................................
PR12:
CPL P2.6
RET
;.........................................................................
PR13:
CPL P2.6
RET
;.........................................................................
PR14:
CPL P2.7
RET
;.........................................................................
PR15:
CPL p2.7
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -