键盘接口技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.1 键盘接口技术
8.1.1 行列式非编码键盘的工作原理 行列式键盘又叫矩阵键盘,如图8-1所示,按键设置
在行列的交叉点上,如用2×2的行列结构可构成四个 键的键盘,4×4的行列结构可构成16个键的键盘。在 按键数量较多时,矩阵键盘可节省I/O口线。
P1.7
AT89C51
P1.6 P1.5
P1.4
SJMP BOAD
;转键扫描
BOAD2: CPL
A
MOV
32H,A
;取键值
BOAD3: LCALL
DELAY
LCALL BOADD
JNZ BOAD3
;等待键松开
B2: RET
;返回
;获取键值子程序
BOADD: MOV P1,#0FH ;置行线为0 MOV A,P1
MOV 30H,A MOV P1,#0F0H ;置列线为0 MOV A,P1 MOV 31H,A ANL 30H,#0FH ;取列值
DELAY: … ;延时程序(略)
(1) 由列线输出0,然后读入P1口的值存入内部 RAM 30H单元。
(2) 由行线输出0,然后读入P1口的值存入内部 RAM 31H单元。
(3) 把30H的低4位与31H的高4位的值相加存入累 加器A。
(4) 最后判断累加器A的值,如果累加器A的数据全 为1,说明无键按下,否则说明有键按下,且累加器A 的数据就是被按下键的键值(程序中对累加器A取反, 目的是用JNZ指令判断是否有键按下)。如图中圆圈所 指键的键值为10111110B。
WZD01: MOV
JNB
EX0
;不是,则恢复现场退出中断
POP A
POP PSW
RETI
MOV A,#01H ;置S1键的键值为1
P1,#0FEH
;扫描P1.0
P3.2,KEYR1
;是S1键则转移
INC A
;不是S1键,键值加1
MOV P1,#0FDH ;扫描P1.1,以下同P1.0类似
JNB P3.2,KEYR1
AT89C51
IN0T
IN1T
S1
S2 S3 S4 S5
S6 S7
S8
S9 S10 S11 S12 S13 S14 S15 S16
+5 V
图8-3 利用中断扩展2×8键盘电路图
通过前面的原理分析可知,完成键盘管理的程序主 要有主程序和中断服务程序,主程序主要完成初始化 和键值处理任务,中断服务程序主要完成键盘扫描和 键值读入任务。对应的程序流程图如图8-4所示(INT1 中断流程图与INT0类似,略)。
P1.3 P1.2 P1.1 P1.0
+5 V 5.1 k ×4
5.1 k ×4
图8-1 矩阵键盘与AT89C51接口连接图
+5 V
键按下
前沿抖动
键稳定
后沿抖动
图8-2 键闭合及断开时的电压抖动
综上所述,对于非编码键盘,按键处理程序应具有如下 四个功能:
(1) 判断键盘上有无键按下。 (2) 去除键的机械抖动。 (3) 求按下键的键码。 (4) 闭合一次,只进行一次键功能操作。 8.1.2 单片机对非编码键盘的控制方式 1. 查询方式
式处理键盘,它的硬件电路与编程扫描工作方式相同。 3. 中断工作方式 单片机应用系统工作时,并不经常需要键输入。因此,无论是编程
工作方式或是定时工作方式,CPU经常处于空扫描状态。 图8-3是AT89C51利用中断扫描方式实现的一个2×8矩阵式键盘的硬
件接口电路。
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
INC A
MOV P1,#0FBH
JNB P3.2,KEYR1
INC A
MOV P1,#0F7H
Hale Waihona Puke Baidu
JNB P3.2,KEYR1
INC A
MOV P1,#0EFH JNB P3.2,KEYR1 INC A MOV P1,#0DFH JNB P3.2,KEYR1 INC A MOV P1,#0BFH JNB P3.2,KEYR1 INC A MOV P1,#7FH
MOV
A,30H
ANL 31H,#0F0H ;取行值
ADD A,31H
;行值加列值
CPL A
;A全0无键按下
RET
2. 定时扫描工作方式 定时扫描工作方式是利用单片机内部定时器产生定时中断,CPU响
应中断后对键盘进行扫描,当有键按下时,转入键功能的处理程序。 定时扫描在本质上是中断方式,只不过是定时扫描键盘,以中断的方
程序如下: ORG 0000H LJMP BEGIN ORG 0003H LJMP WZD0 ORG 0013H LJMP WZD1
;转主程序 ;转外中断0程序 ;转外中断1程序
BEGIN: SETB
ORG 0100H
MOV SP,#60H
;设置堆栈
MOV R1,#00H
;R1存放键值
IT1
;设INT0、INT1为边沿触发
这种方式是指在单片机完成其它工作后的空余时间, 调用键盘扫描子程序,来响应键盘输入的要求,在执行键 功能程序时,CPU不再响应键输入要求。
[例8.1] 用查询法按图8-1读取行列键盘键码,并将 键码存入内部RAM 32H单元。
图中P1.4~P1.7用于控制行线,P1.0~P1.3用于控制 列线。行、列线通过上拉电阻接+5 V,没有键按下时, 被钳在高电平状态。通过发送扫描字确定键码,具体 方法如下:
SETB
IT0
SETB
EA
;开中断
SETB
EX0
SETB
EX1
MOV
P1,#00H
键值处理程序(略)
其它主程序(略)
WZD0: PUSH PSW
;保护现场
PUSH A
CLR EX0
;关中断INT0
LCALL DELAY ;调延时程序去抖动
JNB P3.2,WZD01
;再次确认是INT0中断吗
SETB
键扫描程序如下:
BOAD:LCALL BOADD
JNZ BOAD1
;无键按下转BOAD
LCALL DELAY
;调延时子程序
AJMP BOAD
;继续扫描键盘
BOAD1:LCALL DELAY ;消除键抖动(延时子程序略)
LCALL BOADD
;确认是否有键按下
JNZ BOAD2
LCALL DELAY
JNB P3.2,KEYR1
LJMP KEYR2
KEYR1:MOV R1,A ;将键值存入R1中
KEYR2:CLR IE0 ;清中断标志(因扫描中可能使IE0置位)
SETB EX0
;开中断INT0
POP A ;恢复现场
POP PSW
RETI
;中断返回
WZD1: … ;外中断1程序与中断0相似(略)
8.1.1 行列式非编码键盘的工作原理 行列式键盘又叫矩阵键盘,如图8-1所示,按键设置
在行列的交叉点上,如用2×2的行列结构可构成四个 键的键盘,4×4的行列结构可构成16个键的键盘。在 按键数量较多时,矩阵键盘可节省I/O口线。
P1.7
AT89C51
P1.6 P1.5
P1.4
SJMP BOAD
;转键扫描
BOAD2: CPL
A
MOV
32H,A
;取键值
BOAD3: LCALL
DELAY
LCALL BOADD
JNZ BOAD3
;等待键松开
B2: RET
;返回
;获取键值子程序
BOADD: MOV P1,#0FH ;置行线为0 MOV A,P1
MOV 30H,A MOV P1,#0F0H ;置列线为0 MOV A,P1 MOV 31H,A ANL 30H,#0FH ;取列值
DELAY: … ;延时程序(略)
(1) 由列线输出0,然后读入P1口的值存入内部 RAM 30H单元。
(2) 由行线输出0,然后读入P1口的值存入内部 RAM 31H单元。
(3) 把30H的低4位与31H的高4位的值相加存入累 加器A。
(4) 最后判断累加器A的值,如果累加器A的数据全 为1,说明无键按下,否则说明有键按下,且累加器A 的数据就是被按下键的键值(程序中对累加器A取反, 目的是用JNZ指令判断是否有键按下)。如图中圆圈所 指键的键值为10111110B。
WZD01: MOV
JNB
EX0
;不是,则恢复现场退出中断
POP A
POP PSW
RETI
MOV A,#01H ;置S1键的键值为1
P1,#0FEH
;扫描P1.0
P3.2,KEYR1
;是S1键则转移
INC A
;不是S1键,键值加1
MOV P1,#0FDH ;扫描P1.1,以下同P1.0类似
JNB P3.2,KEYR1
AT89C51
IN0T
IN1T
S1
S2 S3 S4 S5
S6 S7
S8
S9 S10 S11 S12 S13 S14 S15 S16
+5 V
图8-3 利用中断扩展2×8键盘电路图
通过前面的原理分析可知,完成键盘管理的程序主 要有主程序和中断服务程序,主程序主要完成初始化 和键值处理任务,中断服务程序主要完成键盘扫描和 键值读入任务。对应的程序流程图如图8-4所示(INT1 中断流程图与INT0类似,略)。
P1.3 P1.2 P1.1 P1.0
+5 V 5.1 k ×4
5.1 k ×4
图8-1 矩阵键盘与AT89C51接口连接图
+5 V
键按下
前沿抖动
键稳定
后沿抖动
图8-2 键闭合及断开时的电压抖动
综上所述,对于非编码键盘,按键处理程序应具有如下 四个功能:
(1) 判断键盘上有无键按下。 (2) 去除键的机械抖动。 (3) 求按下键的键码。 (4) 闭合一次,只进行一次键功能操作。 8.1.2 单片机对非编码键盘的控制方式 1. 查询方式
式处理键盘,它的硬件电路与编程扫描工作方式相同。 3. 中断工作方式 单片机应用系统工作时,并不经常需要键输入。因此,无论是编程
工作方式或是定时工作方式,CPU经常处于空扫描状态。 图8-3是AT89C51利用中断扫描方式实现的一个2×8矩阵式键盘的硬
件接口电路。
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
INC A
MOV P1,#0FBH
JNB P3.2,KEYR1
INC A
MOV P1,#0F7H
Hale Waihona Puke Baidu
JNB P3.2,KEYR1
INC A
MOV P1,#0EFH JNB P3.2,KEYR1 INC A MOV P1,#0DFH JNB P3.2,KEYR1 INC A MOV P1,#0BFH JNB P3.2,KEYR1 INC A MOV P1,#7FH
MOV
A,30H
ANL 31H,#0F0H ;取行值
ADD A,31H
;行值加列值
CPL A
;A全0无键按下
RET
2. 定时扫描工作方式 定时扫描工作方式是利用单片机内部定时器产生定时中断,CPU响
应中断后对键盘进行扫描,当有键按下时,转入键功能的处理程序。 定时扫描在本质上是中断方式,只不过是定时扫描键盘,以中断的方
程序如下: ORG 0000H LJMP BEGIN ORG 0003H LJMP WZD0 ORG 0013H LJMP WZD1
;转主程序 ;转外中断0程序 ;转外中断1程序
BEGIN: SETB
ORG 0100H
MOV SP,#60H
;设置堆栈
MOV R1,#00H
;R1存放键值
IT1
;设INT0、INT1为边沿触发
这种方式是指在单片机完成其它工作后的空余时间, 调用键盘扫描子程序,来响应键盘输入的要求,在执行键 功能程序时,CPU不再响应键输入要求。
[例8.1] 用查询法按图8-1读取行列键盘键码,并将 键码存入内部RAM 32H单元。
图中P1.4~P1.7用于控制行线,P1.0~P1.3用于控制 列线。行、列线通过上拉电阻接+5 V,没有键按下时, 被钳在高电平状态。通过发送扫描字确定键码,具体 方法如下:
SETB
IT0
SETB
EA
;开中断
SETB
EX0
SETB
EX1
MOV
P1,#00H
键值处理程序(略)
其它主程序(略)
WZD0: PUSH PSW
;保护现场
PUSH A
CLR EX0
;关中断INT0
LCALL DELAY ;调延时程序去抖动
JNB P3.2,WZD01
;再次确认是INT0中断吗
SETB
键扫描程序如下:
BOAD:LCALL BOADD
JNZ BOAD1
;无键按下转BOAD
LCALL DELAY
;调延时子程序
AJMP BOAD
;继续扫描键盘
BOAD1:LCALL DELAY ;消除键抖动(延时子程序略)
LCALL BOADD
;确认是否有键按下
JNZ BOAD2
LCALL DELAY
JNB P3.2,KEYR1
LJMP KEYR2
KEYR1:MOV R1,A ;将键值存入R1中
KEYR2:CLR IE0 ;清中断标志(因扫描中可能使IE0置位)
SETB EX0
;开中断INT0
POP A ;恢复现场
POP PSW
RETI
;中断返回
WZD1: … ;外中断1程序与中断0相似(略)