键盘扫描去抖方法

键盘扫描去抖方法

ID:38465827

大小:30.50 KB

页数:3页

时间:2019-06-13

键盘扫描去抖方法_第1页
键盘扫描去抖方法_第2页
键盘扫描去抖方法_第3页
资源描述:

《键盘扫描去抖方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实现简洁高效的键盘处理对于提高单片机系统的可靠性及速度有重要意义。键盘处理的重要环节是扫描和去抖,不少书籍在介绍这些内容时往往只介绍查询和循环延迟的方法,这使初学者比较容易理解,但在实际中通常不会使用这些方法,因为那样的话效率太低了。这里我们介绍一种采用定时扫描和计数去抖的键盘处理方法,它不仅使程序非常简单高效,而且便于灵活扩展实现处理更复杂的键盘要求。本文先介绍它的基本算法。算法流程图图1位该算法的流程图,它用到下面的变量和常数。变量KscnaBuf:键盘扫描码缓存KScan:键盘扫描码KCount:去抖计数器KReady:按键有效标志常量KD_val:去抖计数长

2、度算法的基本过程如下:CPU以一定时间间隔周期地执行此键盘扫描处理程序。先是对键盘作扫描,获得反映键盘状态的键盘扫描码;然后对扫描码进行前后对比和定时计数,实现去抖;去抖后置位KReady标志,通知键盘分析程序已检测到有效按键。关于键盘扫描码键盘扫描码反映读取键盘时刻的键盘动作状态。对键盘扫描码的基本要求是它要能对每一个单键作唯一编码,如果要使用多键组合则要能对每一种组合进行唯一编码。通常能做到对任意单键或双键作唯一编码即能满足大多数场合的要求。具体键盘扫描码的编码方法随采用电路的不同而不同,这里以图2中的4X4键盘为例说明。在该电路中,D4–D7是输出,D0–D3

3、是输入。在读取键盘时程序分别将D4,D5,D6和D7单独地置成低电平,然后依次读取D0–D3,即可获得所有按键的状态。我们可以将D0–D3与D4–D7合在一起,作为按键的编码。例如,当A键按下时,得到的编码是10111110;当B键按下时,得到的编码是01110111。为了反映整个键盘的状态,可以将D0–D3不全为1的编码作逻辑与,其结果作为键盘扫描码。可以验证,这样设计的扫描码能够唯一地标识任意单键或双键的动作状态。去抖的实现我们知道,当一个按键按下和释放时,对应信号线电平的变化有一个不稳定期,即所谓“抖动”,这是因为多数开关的闭合和断开都有一个过程,并不是即刻实

4、现的。在读取键盘状态是必须避开这个不稳定期,以免造误判,这样一个做法叫做“去抖”。图3是一按键的动作波形,箭头表示定时扫描时读取键盘的时刻。可以看出,如果当在一段时间内都连续多次读到同一个非空(即有键按下)的扫描码,我们可以认为这时按键已处于稳定状态,这时得到的扫描码就代表了一个键盘动作,抖动的影响已经被剔除。按照这个想法,我们只需设置一计数器,当每次读到的非空扫描码与上一次的相同,就将计数器加1;而当一旦读到不同的扫描码或空码则立即将计数器清0。如果计数器的值达到某预定值N时,则表示连续N次读到同一扫描码,于是可认为已经读到了有效的按键。设键盘扫描的间隔是T,则去

5、抖的时间就是N*T。在实际中可以根据按键的特性选取适当的N和T值,以达到可靠的去抖效果。应用说明及示例键盘扫描程序通常用定时中断周期地启动执行。不过一般不宜将整个键盘扫描程序全部放在中断响应程序里,因为那样会降低系统对其他中断响应的性能。通常可以把它放在程序的主循环里(这里只是针对前后台系统讨论,若是多任务系统可以将其设计成一个任务),由定时中断程序通过一个标志周期地启动其执行。当然,如果系统对中断响应性能要求不高,也可以将整个键盘扫描程序放在中断响应程序里。在系统启动时,需要对键盘扫描程序作初始化,即将KReady和KDcnt清0。扫描获得的有效键盘动作通过变量K

6、Scan和标志KReady传递给键盘分析执行程序。下面应用示例程序。注意这不是完整的程序,若要直接使用则需要加上变量和常量定义,并根据所用的编译器写中断响应函数。//--中断程序……DoKeyScan=1;……//--键盘扫描及去抖程序voidKeyScan(void){//--扫描键盘,获得扫描码……//--去抖处理if(KScanBuf==NoKey)

7、

8、(KScanBuf!=KScan)){KScan=KScanBuf;KCount=0;}else{if(KCount==KD_val)return;//避免重复KCount++;If(KCount==KD_va

9、l)KReady=1;}}//--主程序intmain(){//--初始化KReady=0;KCount=0;……while(1){……if(DoKeyScan==1){//--作键盘扫描去抖DoKeyScan=0;KeyScan();}if(KReady==1){//--作键盘分析处理KReady=0;……}……}}该算法稍作修改,还可以灵活实现其他特殊的键盘要求,如重复、长按、释放时动作等,对此我们将另觅篇幅介绍。(2008.1.15)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。