APP下载

一种单片机键盘的实现方法

2016-11-14聂丽文

深圳职业技术学院学报 2016年1期
关键词:施密特触发器中断

聂丽文

(深圳职业技术学院 计算机工程学院,广东 深圳 518055)

一种单片机键盘的实现方法

聂丽文

(深圳职业技术学院 计算机工程学院,广东 深圳 518055)

介绍了一种单片机应用系统中键盘的实现方法,该方法使用的单片机资源为一路A/D转换和一个外部中断,硬件主要包括一个串联的电阻网络、一个施密特触发器;软件采用中断方式处理按键.该方法的原理是利用每个按键对应的不同电阻对VCC进行分压,再经A/D转换为其对应的不同的数字量,且当有键被按下时使施密特触发器产生下降沿,引起单片机外部中断,单片机通过中断方式进行键盘处理.

单片机;键盘;A/D转换;施密特触发器.

1 常用实现单片机键盘的方法

在单片机应用系统中经常需要连接一些外部设备,其中键盘是构成人机对话的一种基本方式,具有向单片机输入数据、命令等功能,通常实现单片机键盘的方法有:独立式键盘法、矩阵键盘法、专用键盘控制芯片法[1].

1)独立键盘法.也称为直接连接法,是将按键开关直接连接到单片机的I/O线上,一个按键连接一根I/O线.此方法硬件和软件都较简单.当按键个数很少时,可以采用这种方法,有几个按键就需要占用几根I/O线,这种方法键盘占用单片机的I/O资源较多.

2)矩阵键盘法.一般地,当按键个数大于8时,多采用此法,将按键排列成矩阵形式,将矩阵的行线和列线分别连接到单片机的I/O线,所占用单片机的I/O线数为该矩阵的行数与列数之和.可见,矩阵法虽然比独立按键法占用的单片机I/O资源少,但当按键较多时,仍然需要占用较多的单片机I/O资源.

3)专用键盘控制芯片法.有时受到单片机的I/O口数量的限制,不能采用上述方式实现键盘,则可以采用外围专用键盘控制芯片(如具有I2C接口的键盘控制芯片ZLG7290)来实现单片机键盘.该方法可以实现多至64个按键组成的键盘,只需要占用3根单片机的I/O线.此法,硬件上添加了专用芯片,软件上通过控制该芯片实现键盘功能.

文献[2-3] 给出单片机A/D端口扩展键盘的方法,本文介绍另一种实现单片机键盘的方法,即通过A/D转换法实现键盘输入.

2 A/D转换法实现单片机键盘

A/D转换方法通过一个串联电阻网络、一个施密特触发器、一路空闲的A/D,以中断的方式实现单片机系统的键盘输入,如图1所示.占用单片机的资源仅为一路A/D和一个外部中断.

2.1 工作原理

如图1所示,该键盘电路由电阻R1至R8、按键K1至K8(不限于8个按键,可以多至几十个)、公共电阻R、电容C、一个施密特触发器、一路A/D组成.当无按键被按下时,A/D的输入电压Vin为低,施密特触发器输出为高电平,中断信号无效;当有按键被按下时,Vin产生一定的电压值,施密特触发器的输入端产生由零电压向正电压的变化,使施密特触发器触发.这样,施密特触发器的输出端就会产生一个下降沿,从而引起单片机中断.

图1 A/D转换法实现键盘的原理图

可以根据所选的施密特触发器的不同,通过调整R1-R8以及R的值,使Vin的变化能够引起施密特触发器触发.也就是说,选择各按键对应的电阻值时要注意,按键对应的电阻(R1至R8)值之和与公共电阻R对VCC的分压产生的Vin应高于施密特触发器的触发电压,这样才能保证每个按键按下时,都会使施密特触发器触发,在其输出端产生一个下降沿,从而引起单片机中断.中断程序流程图如图2所示.进入中断服务程序后,启动A/D,并置位按键标志位.主程序流程图如图3所示.键盘处理模块流程图如图4所示.在键盘处理模块中,首先判断按键标志是否被置位,若是,则说明有按键被按下,则需读取A/D转换的结果.由于不同按键被按下时Vin不同,则A/D转换结果值不同,对所读取的A/D转换的结果进行处理后即可据此判断出被按下的是哪个键,获取相应键值,最后将按键标志清除.

电容C和施密特触发器,都保证了键盘在没有按键被按下或按键抖动时,不会引起单片机中断.只有当按键被按下时,单片机中断才会被触发.电容C的取值参考设计实例.

2.2 设计实例

图2 中断程序流程

图3 主程序流程

图4 键盘处理模块流程

图5 设计实例

如图5所示,单片机使用STM32F103,它内含12位线性A/D,VCC为3.6V,参考电压VREF为3.6V,按键使用硅胶碳膜按键,施密特触发器采用的是74HC14.

首先是公共电阻R和电容C的选择.公共电阻R的阻值应远大于按键的接触电阻,硅胶碳膜按键的接触电阻小于100 Ω,此处电阻R选择1 MΩ,电容C选用0.1µf.电容C宜选的小些,它影响到从按键按下至电容C充电至施密特触发器被触发引起单片机中断的时间,也决定了按键的响应时间.

其次是电阻R1~R8(本例以8个按键为例)的选择.R1~R8都要选择常用电阻序列中的值.方法是,先根据按键个数和VCC以及施密特触发器的触发电压值假定各按键对应的Vin值,计算出各按键对应的电阻值,在常用电阻序列表中找出各电阻值的接近值.然后,再根据确定的R1~R8反过来计算出各按键对应的Vin值即可.

在该实例中,选择电阻R1~R8的步骤如下:

1)先预设各按键对应的Vin的差值, 12位线性A/D,参考电压VREF为3.6V,则A/D转换的分辨率为0.879 mV,20倍的分辨率对应的是17.6 mV,采用按键对应的Vin的差值大于等于17.6mV即可.但在该例中,按键个数只有8个,我们可以选择按键对应的Vin的差值大些,如选择按键对应的Vin差值为0.1V,这样我们预设8个按键K1~K8对应的Vin1~Vin8的值分别为:3.5、3.4、3.3、3.2、3.1、3.0、2.9、2.8V.说明:当键盘的按键个数增多时,可以减小按键对应的Vin的电压差(这里只要大于17.6mV即可),可见该例中可以扩充按键的个数.考虑到采用的施密特触发器74HC14,使其输出产生下降沿翻转的输入电压为2.17V(据74HC14的DC参数表可知,当其VCC为3.6V时,使其输出产生下降沿跳变的输入电压为3.6V*60%=2.17V),所以要保证各按键对应的Vin都必须大于2.17V, 这样的话,理论上按键的个数扩展至几十个没有问题.

2)根据上述预设的各按键对应的Vin值,计算出各按键对应的电阻值R1~R8,然后再在常用电阻序列表中找出阻值接近的电阻(注意电阻值要远大于按键的接触电阻).

据预估的Vin值求R1~R8的公式如下:(该例中VCC=3.6V, R=1 MΩ)

当K1键按下时: [VCC/(R+R1)]*R=Vin1,可以求出R1;

当K2键按下时:[VCC/(R+R1+R2)]*R=Vin2, 可以求出R2;

……

当Ki键按下时: [VCC/(R+∑Ri)]*R=Vini(∑Ri=R1+R2+…+Ri),可以求出Ri.

例如,求R1时(由于单片机中A/D的输入电阻很大,与R并联时可以不考虑),K1接通,其它按键无论是断开或接通,都有公式:[3.6V/(1 MΩ+R1)]*1 MΩ=3.5V,求得:R1≈28 KΩ,查常用电阻系列,选其中的接近值R1=27 KΩ(在“精度位5%的碳膜电阻的标称值系列”表中查找),最后确定了R1取值为27 KΩ.同理,得到其他的电阻值如图5所示.

可见,当有2个及以上的按键同时按下时,只有最低的一个按键有效.此方法不能识别2个及以上的按键同时按下.

由R1再反过来计算K1按下时,对应的Vin值:

Vin1=3.6V*[1M Ω/(R1+1MΩ)]=3.505V,

则软件处理时设置K1键的电压有效值为:3.505V±(0.1V*20%),允许误差为按键对应的Vin的差值的20%. 则对应于K1键,A/D输出的取值范围为:

上限:(3.505+0.02)/3.6*4096≈4011,

下限:(3.505-0.02)/3.6*4096≈3965.

则当A/D连续采样4个值都在3965~4011范围内,就可以认为是此键K1被按下了.同理,可以计算出K1~K8键对应的电压为3.505~2.799V;得到K2~K8对应的A/D输出取值范围.

综上所述,此例中施密特触发器采用74HC14,据其DC参数表可知,当VCC为3.6V时,使其输出产生下降沿翻转的输入电压值约为2.17V,而上述各键被按下时对应的电压值远高于该值.软件处理中当采样值低于2V时均认为是抖动,舍弃.当连续采样4个电压差值在按键对应的电压差值的20%(如此例中为0.1V*20%)内时,才确定该按键被按下.

3 结 论

本文所述单片机键盘的实现方法已经在多个单片机相关项目中应用,能可靠地实现键盘的功能.在实际中若使用的单片机含有A/D且有一路空闲,且单片机的I/O资源较紧张时,采用此方法实现单片机键盘是个不错的选择.该方法不能处理多个按键同时按下的情况,当多个按键同时被按下时,只有编号较低的按键有效.根据单片机的VCC以及所使用的施密特触发器的不同,此法所能连接按键的个数有所不同,一般可连接十几个到几十个按键.

[1] 张毅刚.单片机原理及接口技术[M].北京:人民邮电出版社,2011.

[2] 常波.利用单片机A/D端口扩展键盘的方法[J].单片机与嵌入式系统应用,2001(8):77.

[3] 尹授远.通过单片机A/D方式实现键盘输入的方法[J].仪器仪表用户,2001(3):38-39.

A Method for Realizing MCU Keyboard

NlE Liwen

(School of Computer Engineering, Shenzhen Polytechnic, Shenzhen, Guangdong 518055, China)

This paper introduces a method to realize the keyboard in the application system of MCU, in which only one A/D channel and an external interrupt of MCU’s resources are used. In hardware, a resistance network and a Schmitt trigger are used. In software, MCU process keyboard by Interrupt mode. The principle of this method is to use the different resistance of each key to divide voltage of VCC, so MCU will get the different results of A/D. When a key is pressed, the Schmitt trigger will get a falling edge output, thus causing an external interrupt of MCU.

MCU; keyboard; A/D; Schmitt trigger

TP272

A

1672-0318(2016)01-0015-04

10.13899/j.cnki.szptxb.2016.01.003

2015-09-02

聂丽文(1966-),女,江苏镇江人,副教授,工学硕士,研究方向:计算机应用.

猜你喜欢

施密特触发器中断
二重秩序的悖论:施密特和阿甘本对马勒布朗士哲学的再解读
主从JK触发器逻辑功能分析
跟踪导练(二)(5)
千里移防,卫勤保障不中断
使用触发器,强化安全性
带着GPS去流浪
AT89C51与中断有关的寄存器功能表解
FPGA内嵌PowerPC的中断响应分析
对触发器逻辑功能转换的分析
触发器逻辑功能转换的两种方法