jianpansaomiao.asm

来自「矩阵键盘扫描应用,利用中断方式实现 在51中可以很好的应用」· 汇编 代码 · 共 87 行

ASM
87
字号
;**********************************************;
;                                              ;
;         * 4*4键盘扫描子程序	*              ;
;         *    jiang feng       *              ;
;         *     2007.8.10       *              ;
;                                              ;
;**********************************************;
;计算按键号码存入key_num(30h)中,按键接p2口
;使用参数:R2,R3,A
;入口参数:无
;出口参数:KEY_NUM


;程序调用变量宏定义
KEY_NUM EQU 30H         ;按键号码存储字节,为0无键按下,不为0时KEY_NUM所存数为键号
KEY0_KEY7 EQU P2		;按键接口

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:     MOV KEY0_KEY7,#0F0H ;按键口初始化设置

L1:       LCALL KEY_BOARD	  ;键盘扫描子程序
          MOV P1,KEY_NUM
          LJMP L1
          LJMP $

;**********************************************

KEY_BOARD:
         MOV KEY0_KEY7,#0F0H  ;键盘口初始化
         MOV A,KEY0_KEY7
         CPL A
         ANL A,#0F0H
         JZ KB1
         LCALL DELAY10MS	  ;去抖
         MOV KEY0_KEY7,#0F0H
         MOV A,KEY0_KEY7
         CPL A
         ANL A,#0F0H
         JNZ KB2			  ;判断是否有键按下
KB1:     MOV KEY_NUM,#0		  ;若无键按下,KEY_NUM为0
         LJMP KB9
KB2:     MOV R2,#0FEH		  ;求键号
         MOV R3,#00H
KB3:     MOV A,R2
         MOV KEY0_KEY7,A
         MOV A,KEY0_KEY7
         JB ACC.4,KB4
         MOV A,#01H
         LJMP KB8
KB4:     JB ACC.5,KB5
         MOV A,#02H
         LJMP KB8
KB5:     JB ACC.6,KB6
         MOV A,#03H
         LJMP KB8
KB6:     JB ACC.7,KB7
         MOV A,#04H
         LJMP KB8
KB7:     INC R3
         INC R3
         INC R3
         INC R3
         MOV A,R2
         RL A
         JNB ACC.4,KB9
         MOV R2,A
         LJMP KB3
KB8:     ADD A,R3
         MOV KEY_NUM,A
KB9:     MOV KEY0_KEY7,#0F0H      ;键盘口初始化
         RET

;********延时10MS子程序***************************

DELAY10MS:
         MOV R3,#20
D10MS:
         MOV R2,#250
         DJNZ R2,$
         DJNZ R3,D10MS
         RET

;**********************************************
         END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?