原创 键盘接口设计

2011-1-21 21:30 2779 1 1 分类: MCU/ 嵌入式

键盘接口设计


摘要:本文主要介绍了键盘的工作原理和六种键盘接口电路的结构及其按键的识别方法,可以满足各种应用场合对于键盘的要求。


关键词:独立式  行列式  阶梯式  ADC Pin  I/O Pin和ADC Pin  二极管


一、引言


键盘是基本的输入设备,在单片机应用系统中能实现向单片机输入数据、传送命令等功能,是人工干预单片机的主要手段。下面介绍键盘的工作原理,键盘接口类型及其按键识别方法。


二、键盘的工作原理


1、键盘输入的特点


键盘实质上是一组按键开关的集合。通常,键盘开关利用了机械触点的合、断作用。一个电压信号通过键盘开关机械触点的断开、闭合,其行线电压输出波形如图1所示。



658cefe6-dde6-450c-a653-e812a70498e3.JPG


图1  键盘开关及其波形


图1中T1和T3分别是按键的闭合和断开过程中的抖动期(呈现一串负脉冲),抖动时间长短和开关的机械特性有关,一般为5~10ms,T2为稳定的闭合期,其时间由按键动作所确定,一般为十分之几秒到几秒,T0、T4为断开期。


2、按键的确认


按键的闭合与否,反映在行线输出电压上就是呈现高电平或低电平,如果高电平表示按键断开,低电平表示按键闭合,通过对行线电平高低状态的检测,便可确认按键按下与否。为了确保MCU对一次按键动作只确认一次按键有效,必须消除抖动期T1和T3的影响。


3、软件消除按键抖动


通常采用软件来消除按键抖动,基本思想是:在第一次检测到有键按下时,假设该键所对应的行线为低电平,执行一段延时10ms的子程序后,确认该行线电平是否仍为低电平,如果仍为低电平,则确认该行确实有按键按下。当按键松开时,行线的低电平变为高电平,执行一段延时10ms的子程序后,检测该行线为高电平,说明按键确实已经松开。


三、键盘接口类型及原理


1、独立式键盘接口


独立式键盘就是各键相互独立,每个按键各接一个Input Pin,通过检测Input Pin的电平状态可以很容易的判断哪个按键被按下。


在按键数目较多时,独立式键盘电路需要较多的Input Pin,且电路结构繁杂,故此种键盘适用于按键较少或操作速度较高的场合。具体电路结构如图2所示。



abe2269d-e6b4-487f-a713-396ed2253572.JPG


图2  独立式键盘接口


当Input Pin内部有上拉电阻,则外部电路的上拉电阻可以省去,如图2右半图所示。


2、行列式键盘接口


行列式(也称矩阵式)键盘适用于按键数目较多的场合,它由行线和列线组成,按键位于行、列的交叉点上。很明显,在按键数目较多的场合,行列式键盘与独立式键盘相比,要节省很多的I/O口线。图3、4所示为5×5行列式键盘接口电路,如果Input Pin内部有上拉电阻,则外部电路的上拉电阻可以省去。



1aab858b-0028-4a59-964d-e57d40d09286.JPG


图3  5×5行列式键盘接口(扫描法)



9cebc2f7-5837-4346-bdc6-0b75525a364c.JPG


图4  5×5行列式键盘接口(线反转法)


行列式键盘按键的识别方法主要有两种:扫描法和线反转法。


① 扫描法:第一步,识别键盘有无按键被按下。首先把所有的列线均置为低电平,检查各行线电平是否有变化,如果有变化,则说明有键被按下;如果没有变化,则说明没有键被按下。第二步,如有键被按下,识别具体的按键。首先把某一列置为低电平,其余各列置高电平,检查各行线电平的变化,如果某行线电平为低电平,则可确认此行交叉点处的按键被按下。


② 线反转法:第一步,设置行线为Input Pin模式,列线为Output Pin模式,并使全部Output Pin输出低电平,则行线中由高电平变低电平的所在行为按键所在行。第二步,把行线设置为Output Pin模式,把列线设置为Input Pin模式,并使全部Output Pin输出低电平,则列线中电平由高到低所在列为按键所在列。综合上述2步的结果,可以确定按键所在行和列,从而识别出所按的键。


3、阶梯式键盘接口


图5所示为阶梯式键盘接口电路(5个I/O),由图可以看出,键盘分布呈现阶梯状,故称为阶梯式键盘接口。如果I/O Pin内部有上拉电阻,则外部电路的上拉电阻可以省去。


阶梯式键盘接口按键的识别方法是:首先令IO1输出低电平,检测IO2~IO5口电平是否有变化,如果有变化,则表示有按键被按下,若此时IO3检测到低电平,则表示K13被按下,退出键盘扫描;否则,表示没有按键被按下,继续键盘扫描。如果第一行没有按键被按下,则令IO2输出低电平,检测IO3~IO5口电平是否有变化,以此类推。


由图5很容易得到阶梯式键盘接口的I/O口资源与扫描按键数目的关系,如下式所示:


9e4b0863-22d4-44e6-8d9b-5fcfeb9afe27.JPG


由关系式可以看出,该方法不适合按键数目较少的应用场合,而对于按键数目较多的应用场合,该方法可以很好的发挥其优点,如使用8个I/O口可以扫描28个按键。


 c6d4a13f-d884-4cd6-bbfc-b40b3b01095f.JPG



图5  阶梯式键盘接口


4、ADC Pin键盘接口


目前市场上集成有ADC功能的单片机已经非常普遍了,对于I/O资源非常紧张的应用场合,就可以利用一个ADC口来实现键盘功能。ADC的作用是把模拟量转换成数字量,以便于MCU进行处理,所以只要能够通过按键来控制输入ADC的模拟量的大小,就可以实现按键的检测。具体电路结构如图6所示。



304fb6cb-f39e-49a6-a9ad-38f7e503fa62.JPG


图6  ADC Pin键盘接口


该键盘接口可以为MCU节省很多的I/O资源,尤其是按键数目较多的情况,但它是以牺牲硬件成本(电阻)为代价,而且抗干扰能力相对会差一些。另外,对于按键较多的情况,需要注意电阻的分配,即合理分配按键控制的ADC值,以避免相邻ADC值按键的误判。


5、I/O Pin与ADC Pin相结合键盘接口


对于较多按键,如25个按键的应用场合,行列式键盘接口需要10个I/O,或者9个I/O加一根地线,还是占用了比较多的I/O资源,尽管有的时候可以将按键I/O与其它I/O共用。而ADC Pin键盘接口,相对于行列式键盘接口最多可以节省9个I/O口,但相应的需要26个电阻,电路结构也相应变得复杂,成本增加,稳定性下降。该节介绍的键盘接口是将行列式键盘接口和ADC Pin键盘接口相结合,既节省了I/O口线,又没有增加太多的成本,稳定性也可以保证,具体电路结构如图7所示。



dcf91a15-5a90-4332-8d2d-5b47cfcbdc73.JPG


图7  I/O Pin与ADC Pin相结合键盘接口


该键盘按键的识别方法是:第一步,识别键盘有无按键被按下,检测各I/O Pin的电平状态,如果有低电平,则表示该列有按键被按下,否则,没有按键被按下。第二步,如果有按键被按下,则令检测到低电平的I/O Pin输出高电平,然后检测ADC电压,来确定是哪一行有按键按下。综合上述2步的结果,就可以确定是哪一个按键被按下。


利用该电路结构,可以根据不同的应用场合来调整I/O口数目和电阻R的数目,例如24个按键,可以是3个I/O、1个ADC、9个R,或者4个I/O、1个ADC、7个R,或者6个I/O、1个ADC、5个R,或者8个I/O、1个ADC、3个R。


6、二极管键盘接口


对于没有集成ADC功能的MCU,如果遇到按键数目较多的应用场合,如25,而I/O资源又相对紧张,则可以通过该节介绍的二极管键盘接口电路来实现键盘功能。具体电路结构如图8所示。



0233fba6-8cde-4086-a18a-2aa277c13e84.JPG


图8  二极管键盘接口


    该键盘按键的识别方法是:第一步,扫描Gnd行是否有按键被按下,如果检测到I/O口电平有低电平,则表示有按键被按下;否则,表示没有按键被按下,扫描程序进入第二步。第二步,首先设置所有I/O口工作在Output Pin模式,且令某一行输出低电平,其余行输出高电平。然后设置输出高电平行的I/O口为Input Pin,并检测电平是否有变化,如果检测到低电平,则表示该行与输出低电平的那一行的交叉点处有按键被按下,否则,没有按键被按下。


需要注意,当键盘扫描进入第二步时,如果Gnd行有按键被按下,则会发生误判按键。例如,当扫描L1行时,K11和K62按下都会令IO1检测到低电平。这可以通过软件来加以识别,当检测到IO1为低电平时,则下一步立即判断Gnd行是否有按键被按下,如果有,则表示按键位于Gnd行;否则,表示按键位于L1~L5行。


四、总结


在实际应用过程中,应该综合考虑各方面的因素,如按键数目,MCU的I/O口资源,MCU是否集成有ADC功能模块,对于硬件成本的考虑,工作环境(稳定性)等,来选取合适的键盘接口电路。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /3 下一条