键盘扫描的实现方法

文档序号:6436942阅读:998来源:国知局
专利名称:键盘扫描的实现方法
技术领域
本发明涉及一种键盘扫描的实现方法,尤其涉及一种基于状态机的键盘扫描的实现方法。
背景技术
在编写单片机程序的过程中,键盘作为一种人机接口的实现方式,是很常用的。而一般的实现方法有1、外接键盘扫描芯片(例如8279、7279等芯片),然后由该芯片来完成去抖、键值读取、中断请求等功能。然后单片机响应中断并读取键值,有的时候也可以采用轮训的方式。而这种方法需要专门的外围芯片,增加成本,且不容易检测按键的按下、释放以及长按
键等一些事件。2、如果按键数比较少,那么可以直接将按键接到单片机的IO 口,然后各按键取逻辑或再送到单片机的中断管脚(对于51体系),单片机响应中断后再去读取IO 口的数据。 如果单片机的中断向量比较多(例如AVR系列的单片机,每个IO都可以作为中断),那么也可以直接把各个按键接到各个具有中断功能的IO上面。在中断处理程序中往往需要执行这样一个操作序列延时一定时间来去抖,如果按键有效那么等待按键释放。而这种方法同样不容易检测按键的按下、释放以及长按键等一些事件。且采用软件延时的方式,浪费CPU 资源。键按下之后的理想波形如图1所示,按键处于空闲状态Sl时,信号为高;按键处于将按下状态2时,信号垂直降为低;按键处于按下状态S3时,信号为低;按键处于将释放状态S4时,信号垂直升为高。而实际波形如图2所示,按键处于空闲状态Sl时,信号为高;按键处于将按下状态S2时,信号出现一段时间的抖动,然后降为低;按键处于按下状态S3时, 信号为低,按键处于将释放状态S4时,信号抖动一段时间后升为高。同时,在数据线为低或者为高的过程中,都有可能出现一些很窄的干扰信号。如果可以采用基于这种基于状态机的扫描式的方法来判断各种按键事件,则可有效的解决了上述方法中问题。

发明内容
本发明的目的在于提供一种键盘扫描的实现方法,其工作稳定,占用系统资源少, 对各种按键事件响应及时。为实现上述目的,本发明提供一种键盘扫描的实现方法,包括如下步骤步骤1、在按键处于空闲状态时,如果信号线为高,继续保持空闲状态,如果信号线为低,切换到按键将按下状态;步骤2、在按键处于将按下状态时,如果信号线为高,切换到按键空闲状态,如果信号线为低,发送按键按下消息,并将该按键按下消息存入消息列队,切换到按键按下状态;步骤3、在按键处于按下状态时,如果信号线为低,保持按键按下状态,并对信号为低这一状态进行计数,如果信号线为高,切换到按键将释放状态;
3
步骤4、在按键处于将释放状态时,如果信号为低,切换到按键按下状态,如果信号线为高,发送按键释放消息,并将该按键释放消息存入消息队列,切换到按键空闲状态。所述步骤2中所发送的按键按下消息经过系统判断为不需要消息时,释放该按键按下消息。所述步骤4中信号为低时,系统根据预设阈值对信号为低这一按键消息的计数进行判断,如果该计数的数值大于该预设阈值,该按键消息作为一长按键消息,小于该预设阈值,该按键消息作为一短按键消息。所述步骤4中信号为高时,系统对所发送的按键释放消息进行判断,如该按键释放消息为不需要时,释放该按键释放消息。本发明的有益效果本发明所提供的键盘扫描的实现方法,使用状态机的模式设计键盘扫描程序,其工作稳定可靠,占用系统资源非常少,对各种按键事件响应及时,在现有的程序框架下还可以方便地扩展其它类型的按键事件。为了能更进一步了解本发明的特征以及技术内容,请参阅以下有关本发明的详细说明与附图,然而附图仅提供参考与说明用,并非用来对本发明加以限制。


下面结合附图,通过对本发明的具体实施方式
详细描述,将使本发明的技术方案及其它有益效果显而易见。附图中,图1为按键过程的理想波形示意图;图2为按键过程的实际波形示意图;图3为本发明键盘扫描的实现方法的流程图。
具体实施例方式为更进一步阐述本发明所采取的技术手段及其效果,以下结合本发明的优选实施例及其附图进行详细描述。请参阅图3,本发明提供一种键盘扫描的实现方法,其包括如下步骤步骤1、在按键处于空闲状态Sl时,如果信号线为高,那么继续保持按键空闲状态 Si,如果信号线为低,那么切换到按键将按下状态S2。步骤2、在按键处于将按下状态S2时,如果信号线为高,那么切换到按键空闲状态 Si,如果信号线为低,那么切换到按键按下状态S3,此时表示有了键按下的消息事件,把此事件存入消息队列,如果系统不需要此消息,此时可以不存入这个键按下事件。步骤3、在按键处于按下状态S3时,如果信号线为低,那么保持按键按下状态S3, 并对信号为低这一状态进行计数,如果信号线为高,那么切换到按键将释放状态S4。步骤4、在按键处于释将放过态S4时,如果信号线为低,则切换到按键按下状态 S3,如果信号线为高,那么切换到按键空闲状态Si,此时表示有了键释放的消息事件,把此消息存入消息队列,如果系统不需要此消息,此时可以不存入这个键按下事件,同时还需要对信号为低这一状态的计数进行判断,如果大于预设的阈值,那么表示之前是一个长按键消息事件,小于此阈值,则表示之前为一个短按键消息事件。
本发明所提供的键盘扫描的实现方法,使用状态机的模式设计键盘扫描程序,其工作稳定可靠,占用系统资源非常少,对各种按键事件响应及时,在现有的程序框架下还可以方便地扩展其它类型的按键事件。以上所述,对于本领域的普通技术人员来说,可以根据本发明的技术方案和技术构思作出其他各种相应的改变和变形,而所有这些改变和变形都应属于本发明权利要求的保护范围。
权利要求
1.一种键盘扫描的实现方法,其特征在于,包括如下步骤步骤1、在按键处于空闲状态时,如果信号线为高,继续保持空闲状态,如果信号线为低,切换到按键将按下状态;步骤2、在按键处于将按下状态时,如果信号线为高,切换到按键空闲状态,如果信号线为低,发送按键按下消息,并将该按键按下消息存入消息列队,切换到按键按下状态;步骤3、在按键处于按下状态时,如果信号线为低,保持按键按下状态,并对信号为低这一状态进行计数,如果信号线为高,切换到按键将释放状态;步骤4、在按键处于将释放状态时,如果信号为低,切换到按键按下状态,如果信号线为高,发送按键释放消息,并将该按键释放消息存入消息队列,切换到按键空闲状态。
2.如权利要求1所述的键盘扫描的实现方法,其特征在于,所述步骤2中所发送的按键按下消息经过系统判断为不需要消息时,释放该按键按下消息。
3.如权利要求1所述的键盘扫描的实现方法,其特征在于,所述步骤4中信号为低时, 系统根据预设阈值对信号为低这一按键消息的计数进行判断,如果该计数的数值大于该预设阈值,该按键消息作为一长按键消息,小于该预设阈值,该按键消息作为一短按键消息。
4.如权利要求1所述的键盘扫描的实现方法,其特征在于,所述步骤4中信号为高时, 系统对所发送的按键释放消息进行判断,如该按键释放消息为不需要时,释放该按键释放消息。
全文摘要
本发明提供一种键盘扫描的实现方法,其包括如下步骤步骤1、按键处于空闲状态,如果信号线为高,继续保持空闲状态,如果信号线为低,切换到按键将按下状态;步骤2、按键处于将按下状态,如果信号线为高,切换到按键空闲状态,如果信号线为低,发送按键按下消息,并将该按键按下消息存入消息列队,切换到按键按下状态;步骤3、按键处于按下状态,如果信号线为低,保持按键按下状态,并对信号为低这一状态进行计数,如果信号线为高,切换到按键将释放状态;步骤4、按键处于将释放状态,如果信号为低,切换到按键按下状态,如果信号线为高,发送按键释放消息,并将该按键释放消息存入消息队列,切换到按键空闲状态,起工作稳定,占用资源少。
文档编号G06F3/023GK102508556SQ201110337759
公开日2012年6月20日 申请日期2011年10月31日 优先权日2011年10月31日
发明者刘均, 胡贵 申请人:深圳市元征软件开发有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1