矩阵键盘汇编程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4*4矩阵键盘扫描汇编程序(基于51单片机)
// 程序名称:4-4keyscan.asm
;// 程序用途:4*4矩阵键盘扫描检测
;// 功能描述:扫描键盘,确定按键值。程序不支持双键同时按下,;// 如果发生双键同时按下时,程序将只识别其中先扫描的按键
;// 程序入口:void
;// 程序出口:KEYNAME,包含按键信息、按键有效信息、当前按键状态
;//================================================================= =====
PROC KEYCHK
KEYNAME DATA 40H ;按键名称存储单元
;(b7-b5纪录按键状态,b4位为有效位,
;b3-b0纪录按键)
KEYRTIME DATA 43H ;重复按键时间间隔
SIGNAL DATA 50H ;提示信号时间存储单元
KEY EQU P
3 ;键盘接口(必须完整I/O口)
KEYPL EQU P0.6 ;指示灯接口
RTIME EQU 30 ;重复按键输入等待时间
KEYCHK:
;//=============按键检测程序======================================== =====
MOV KEY,#0FH ;送扫描信号
MOV A,KE
Y ;读按键状态
CJNE A,#0FH,NEXT1 ;ACC<=0
FH
; CLR
C ;Acc等于0FH,则CY为0,无须置0
NEXT1:
; SETB
C ;Acc不等于0FH,则ACC
必小于0FH,
;CY为1,无须置1
MOV A,KEYNAME
ANL KEYNAME,#1FH ;按键
名称屏蔽高三位
RRC
A ;ACC带CY右移一位,纪录当前按键状态
屏蔽低五位
ORL KEYNAME,A ;保留按键状态
;//=============判别按键状态,决定是否执行按键扫描=================== =====
CJNE A,#0C0H,NEXT2 ;110按键稳定闭合,调用按键检测子程序
SJMP KEYSCAN
NEXT2:
CJNE A,#0E0H,NEXT3 ;111按键长闭合,重复输入允许判断
SJMP WAIT
NEXT3:
CJNE A,#0A0H,EXIT ;101干扰,当111长闭合处理
ORL KEYNAME,#0E0H
WAIT:
MOV A,KEYRTIME
JNZ EXI
T ;时间没到,退出
;//=============键盘扫描程序======================================== ======
KEYSCAN:
MOV R1,#
0 ;初始化列地址
MOV R3,#11110111B ;初始化扫描码
LOOP:
MOV A,R3
RL A
MOV R3,
A ;保留扫描码
MOV KEY,
A ;送扫描码
MOV A,KE
Y ;读键盘
屏蔽高四位
CJNE A,#0FFH,NEXT31 ;A不等于F FH,说明该列有按键动作
INC R
1 ;列地址加1,准备扫描下一列
CJNE R1,#4,LOOP ;列地址不等于4,扫描下一列
SJMP EXI
T ;没有按键,退出
;//=============按键判断对应位等于零,说明该行有按键按下============= =====
NEXT31:
JB ACC.0,NEXT32
MOV R2,#
0 ;第0行有按键
SJMP NEXT5
NEXT32:
JB ACC.1,NEXT33
MOV R2,#
1 ;第1行有按键
SJMP NEXT5
NEXT33:
JB ACC.2,NEXT34
MOV R2,#
2 ;第2行有按键
SJMP NEXT5
NEXT34:
MOV R2,#
3 ;第3行有按键
NEXT
5:
;计算按键地址
MOV A,R1
RL A
RL
A ;列地址乘4(每列对应4行)
ADD A,R
2 ;加行地址
MOV DPTR,#KEYTAB
MOVC A,@A+DPTR
ANL KEYNAME,#0E0H
ORL KEYNAME,A ;送
按键(送值的时候已经置按键有效)
MOV KEYRTIME,#RTIME ;送重复按
键等待时间
CLR KEYP
L ;打开指示灯
MOV SIGNAL,#10 ;送
信号提示时间(每次按键闪100ms)
EXIT:
MOV KEY,#0FFH ;置键盘接口高电平
RE
T ;退出
;//=============按键名称表========================================== ======
KEYTAB:
DB 1AH ;扫描码0,对应A ************************** ****************
DB 1BH ;扫描码1,对应B *
*
**
DB