⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 矩阵键盘测试.asm

📁 错1单片机的一个8个按键控制程序
💻 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 + -