获得更多单片机以及c相关的资料以及源代码例程,请私信回复 “单片机”
一,键盘接口的设计需要解决的问题
- 需要判断是否有按键按下,如果有,那么进入下一个动作。
- 识别是哪一个按键被按下?并求出相应的键值。
- 根据键值找到相应的按键处理程序入口即可。
按键可以分为(独立按键,和矩阵键盘)
矩阵可以用做按键较多的案例。比如,计算器的编写
独立按键用来实现一些用到按键比较少的案例。
二,键盘的工作原理
键盘中的一个按键开关的两端分别连接在行线和列线上,列线接地,行线通过电阻接到+5v上。当开关的机械触点断开,闭合,其行线的电压输出波形如下图(图二)
在第二张图中,我们可以看到,t1和t3分别为按键的闭合与断开过程中的抖动时间段,而且呈现一看连串的负脉冲,我们注意到这个抖动时间的长短与开关的机械特性有关,一般在我们按下按键后年,一般为5-10ms的样子。t2为一个稳定的闭合时间段。注意:在设计时,应该考虑到消抖(软件和硬件)
三,按键的识别高电平(低电平有效)
按键是否能够闭合,这与行线的输出电压有关系,其实就是反应在行线的输出电压的高电平还是低电平,单片机通过对行线电平的高低状态的检测,就可以确认按键是否按下与松开,为了确保单片机对一次按键发生的动作只确认一次按键有效,那么必须要消除抖动期的t1与t2的影响。
四,消除按键机械带来的抖动
我们一般都是采用两种方案:
- 软件消抖
主要的一个思想还是:当检测到有按键按下时,对该键对应的行线为低电平,且执行一段延时函数,大约为10ms的延时,确认该行线电平是否为低电平,如果仍为低电平,那么我们就确认确实有按键按下了。当按键被松开时,行线的低电平变为高电平,执行一短延时10ms的程序后,检测该行线为高电平,说明按键确实已经松开。