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 + -
显示快捷键?