一种基于定时器的延时的按键处理方法及应用与流程

文档序号:16753281发布日期:2019-01-29 17:05阅读:466来源:国知局
一种基于定时器的延时的按键处理方法及应用与流程

本发明属于按键处理技术领域,尤其涉及一种基于定时器的延时的按键处理方法,同时,本发明还提供一种基于定时器的延时的按键处理应用。



背景技术:

按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开。因而在闭合及断开的瞬间总是伴有一连串的抖动的。按键去抖动的方法主要有两种,一种是硬件电路去抖动;另一种就是软件延时去抖动。而延时又一般分为了两种,一种是for循环等待,另一种是定时器延时。在操作系统中,由于效率方面的原因,一般不允许使用for循环来等待,只能使用定时器,现有技术存在现有软件消抖基本都是用一个延时函数来实现10-20ms的延时,从而导致也许一个20ms程序周期由于有键盘延时判断的存在,将导致整个系统运行都慢了下来的问题。



技术实现要素:

本发明提供一种基于定时器的延时的按键处理方法及应用,以解决上述背景技术中提出了现有技术存在现有软件消抖基本都是用一个延时函数来实现10-20ms的延时,从而导致也许一个20ms程序周期由于有键盘延时判断的存在,将导致整个系统运行都慢了下来的问题。

本发明所解决的技术问题采用以下技术方案来实现:一种基于定时器的延时的按键处理方法,包括:

按键检查:查询按键是否被轻触并置复位按键标志位;

定时器轮询:查询按键标志位并置复位计时标志位以及形成计时时间;

去抖处理:通过计时时间判断确定按键是否有效。

进一步,所述查询按键是否被轻触并置复位按键标志位包括判断按键是否轻触,若按键轻触,则置位按键标志位,否则,则复位按键标志位;

所述查询按键标志位并置复位计时标志位以及形成计时时间包括设置轮询定时器和计时定时器,在轮询定时器中断中判断按键标志位是否被置位,若按键标志位被置位,则触发计时定时器且在计时定时器中断中累计计时变量形成计时时间,若按键标志位被复位,则锁定计时定时器且置位计时完成标志;

所述通过计时时间判断确定按键是否有效包括若计时完成标志被置位,则若计时时间大于判定阈值,则按键有效,否则按键无效。

进一步,所述判定阈值为20ms。

进一步,所述计时时间为计时变量乘以计时时间片。

进一步,所述触发计时定时器包括启动触发计时定时器且置位计时标志位,所述锁定计时定时器包括关闭触发计时定时器且复位计时标志位。

进一步,所述计时定时器中断中累计计时变量包括若计时定时器产生中断,则若计时标志位置位,则在计时定时器中断服务程序中计时变量自增1个计时时间片,若计时标志位复位,则停止计时变量自增且锁定。

进一步,所述轮询定时器的最小时间片为10ms,所述计时定时器的计时时间片为10ms。

进一步,所述判断按键是否轻触包括采用外部中断方式或扫描方式检查按键是否轻触,所述扫描方式检查包括定时器检查或程序扫描检查。

进一步,所述检查按键是否轻触包括判断按键相应的io端口是否被拉低,若按键相应的io端口被拉低,则确定按键轻触。

同时,本发明还提供一种基于定时器的延时的按键处理应用,包括:按键处理模块;

所述按键处理模块用于:

判断按键是否轻触,若按键轻触,则置位按键标志位,否则,则复位按键标志位;

设置轮询定时器和计时定时器,在轮询定时器中断中判断按键标志位是否被置位,若标志位被置位,则触发计时定时器且在计时定时器中断中累计计时变量形成计时时间,若按键标志位被复位,则锁定计时定时器;

若计时时间大于判定阈值,则按键有效,否则按键无效。

有益技术效果:

1、本专利采用按键检查:查询按键是否被轻触并置复位按键标志位;定时器轮询:查询按键标志位并置复位计时标志位以及形成计时时间;去抖处理:通过计时时间判断确定按键是否有效,所述查询按键是否被轻触并置复位按键标志位包括判断按键是否轻触,若按键轻触,则置位按键标志位,否则,则复位按键标志位;所述查询按键标志位并置复位计时标志位以及形成计时时间包括设置轮询定时器和计时定时器,在轮询定时器中断中判断按键标志位是否被置位,若按键标志位被置位,则触发计时定时器且在计时定时器中断中累计计时变量形成计时时间,若按键标志位被复位,则锁定计时定时器且置位计时完成标志;所述通过计时时间判断确定按键是否有效包括若计时完成标志被置位,则若计时时间大于判定阈值,则按键有效,否则按键无效,由于实际应用中具有三条线程的一种处理方法,该方法包括采用外部中断方式(或者扫描方式)检查是否有键被按下,如果有,将一个标志位置位,表示有键按下了,姑且定义这个标志位为keyflag,如果进入中断,则keyflag=1;第二条线:系统应该提供一个10ms的定时器,作为系统的时间片,在定时中断内检测是否keyflag==1,如果该标志位为1,则表示已经检测到有键按下,则启动计时,计时变量定义为keytimes。可以用代码if(key.flag==1){key.times++}来统计检测到按键以后进入10ms系统定时中断的次数;第三条线:键扫描处理,主程序则主要判断是否有键被按下,按下以后是否计时变量大于某个值(该值决定你想定义的消抖时间),可以看到,对于这样的三线处理键盘的方式,对于键盘程序处理或显示闪烁的处理等需要大量延时的程序,都可以采用这样的结构,由于其处理过程大部分采用定时器中断完成,定时中断仅仅占用一个小小的周期,然后返回主程序继续执行,通过这样的处理,大大的提高系统的实时性。

2、本专利采用通过计时时间判断确定按键是否有效包括若计时完成标志被置位,则若计时时间大于判定阈值,则按键有效,否则按键无效,所述判定阈值为20ms,由于抖动延时的过程由于放到了定时中断内,这个时间可以用来做其他的任务,大大的提高了系统的实时性能。

3、本专利采用所述计时定时器中断中累计计时变量包括若计时定时器产生中断,则若计时标志位置位,则在计时定时器中断服务程序中计时变量自增1个计时时间片,若计时标志位复位,则停止计时变量自增且锁定,所述轮询定时器的最小时间片为10ms,所述计时定时器的计时时间片为10ms,由于采用变种的计数器多次累计形成定时时间,相对于传统的大定时器,其具有时间片短,执行速度快的特点。

4、本专利采用所述判断按键是否轻触包括采用外部中断方式或扫描方式检查按键是否轻触,所述扫描方式检查包括定时器检查或程序扫描检查,由于按键的轮询采用硬件与软件相结合、或硬件中断、或软件定时周期的,其应用可根据系统的硬件条件、软件资源,自由进行选择,具有灵活性高的特点。

5、本专利采用所述检查按键是否轻触包括判断按键相应的io端口是否被拉低,若按键相应的io端口被拉低,则确定按键轻触,由于采用io口中断方式进行,由于采用硬件中断,具有速度快和响应及时的特点。

6、本专利同时提供一种基于定时器的延时的按键处理应用,从而提高了系统运行的实用性和稳定性。

附图说明

图1是本发明一种基于定时器的延时的按键处理方法的总流程图;

图2是本发明一种基于定时器的延时的按键处理方法的具体流程图;

图3是本发明一种基于定时器的延时的按键处理方法的计时定时器中断中累计计时流程图。

具体实施方式

以下结合附图对本发明做进一步描述:

图中:s101-按键检查;

s102-定时器轮询;

s103-去抖处理;

s201-判断按键是否轻触;

s202-按键轻触;

s203-置位按键标志位;

s204-复位按键标志位;

s205-设置轮询定时器和计时定时器;

s206-在轮询定时器中断中判断按键标志位是否被置位;

s207-按键标志位被置位;

s208-触发计时定时器且在计时定时器中断中累计计时变量形成计时时间;

s209-锁定计时定时器且置位计时完成标志;

s210-若计时完成标志被置位;

s211-若计时时间大于判定阈值;

s212-按键有效;

s213-按键无效;

s301-若计时定时器产生中断;

s302-若计时标志位置位;

s303-在计时定时器中断服务程序中计时变量自增1个计时时间片;

s304-停止计时变量自增且锁定;

实施例:

本实施例:如图1、2所示,一种基于定时器的延时的按键处理方法,包括:

按键检查s101:查询按键是否被轻触并置复位按键标志位s204;

定时器轮询s102:查询按键标志位并置复位计时标志位以及形成计时时间;

去抖处理s103:通过计时时间判断确定按键是否有效。

所述查询按键是否被轻触并置复位按键标志位s204包括判断按键是否轻触s201,若按键轻触s202,则置位按键标志位s203,否则,则复位按键标志位s204;

所述查询按键标志位并置复位计时标志位以及形成计时时间包括设置轮询定时器和计时定时器s205,在轮询定时器中断中判断按键标志位是否被置位s206,若按键标志位被置位s207,则触发计时定时器且在计时定时器中断中累计计时变量形成计时时间s208,若按键标志位被复位,则锁定计时定时器且置位计时完成标志s209;

所述通过计时时间判断确定按键是否有效包括若计时完成标志被置位s210,则若计时时间大于判定阈值s211,则按键有效s212,否则按键无效s213。

由于采用按键检查:查询按键是否被轻触并置复位按键标志位;定时器轮询:查询按键标志位并置复位计时标志位以及形成计时时间;去抖处理:通过计时时间判断确定按键是否有效,所述查询按键是否被轻触并置复位按键标志位包括判断按键是否轻触,若按键轻触,则置位按键标志位,否则,则复位按键标志位;所述查询按键标志位并置复位计时标志位以及形成计时时间包括设置轮询定时器和计时定时器,在轮询定时器中断中判断按键标志位是否被置位,若按键标志位被置位,则触发计时定时器且在计时定时器中断中累计计时变量形成计时时间,若按键标志位被复位,则锁定计时定时器且置位计时完成标志;所述通过计时时间判断确定按键是否有效包括若计时完成标志被置位,则若计时时间大于判定阈值,则按键有效,否则按键无效,由于实际应用中具有三条线程的一种处理方法,该方法包括采用外部中断方式(或者扫描方式)检查是否有键被按下,如果有,将一个标志位置位,表示有键按下了,姑且定义这个标志位为keyflag,如果进入中断,则keyflag=1;第二条线:系统应该提供一个10ms的定时器,作为系统的时间片,在定时中断内检测是否keyflag==1,如果该标志位为1,则表示已经检测到有键按下,则启动计时,计时变量定义为keytimes。可以用代码if(key.flag==1){key.times++}来统计检测到按键以后进入10ms系统定时中断的次数;第三条线:键扫描处理,主程序则主要判断是否有键被按下,按下以后是否计时变量大于某个值(该值决定你想定义的消抖时间),可以看到,对于这样的三线处理键盘的方式,对于键盘程序处理或显示闪烁的处理等需要大量延时的程序,都可以采用这样的结构,由于其处理过程大部分采用定时器中断完成,定时中断仅仅占用一个小小的周期,然后返回主程序继续执行,通过这样的处理,大大的提高系统的实时性。

所述判定阈值为20ms。

由于采用通过计时时间判断确定按键是否有效包括若计时完成标志被置位,则若计时时间大于判定阈值,则按键有效,否则按键无效,所述判定阈值为20ms,由于抖动延时的过程由于放到了定时中断内,这个时间可以用来做其他的任务,大大的提高了系统的实时性能。

所述计时时间为计时变量乘以计时时间片。

所述触发计时定时器包括启动触发计时定时器且置位计时标志位,所述锁定计时定时器包括关闭触发计时定时器且复位计时标志位。

如图3所示,所述计时定时器中断中累计计时变量包括若计时定时器产生中断s301,则若计时标志位置位s302,则在计时定时器中断服务程序中计时变量自增1个计时时间片s303,若计时标志位复位,则停止计时变量自增且锁定s304。

由于采用所述计时定时器中断中累计计时变量包括若计时定时器产生中断,则若计时标志位置位,则在计时定时器中断服务程序中计时变量自增1个计时时间片,若计时标志位复位,则停止计时变量自增且锁定,所述轮询定时器的最小时间片为10ms,所述计时定时器的计时时间片为10ms,由于采用变种的计数器多次累计形成定时时间,相对于传统的大定时器,其具有时间片短,执行速度快的特点。

所述轮询定时器的最小时间片为10ms,所述计时定时器的计时时间片为10ms。

所述判断按键是否轻触s201包括采用外部中断方式或扫描方式检查按键是否轻触,所述扫描方式检查包括定时器检查或程序扫描检查。

所述检查按键是否轻触包括判断按键相应的io端口是否被拉低,若按键相应的io端口被拉低,则确定按键轻触s202。

由于采用所述判断按键是否轻触包括采用外部中断方式或扫描方式检查按键是否轻触,所述扫描方式检查包括定时器检查或程序扫描检查,由于按键的轮询采用硬件与软件相结合、或硬件中断、或软件定时周期的,其应用可根据系统的硬件条件、软件资源,自由进行选择,具有灵活性高的特点。

一种基于定时器的延时的按键处理应用,包括:按键处理模块;

所述按键处理模块用于:

判断按键是否轻触s201,若按键轻触s202,则置位按键标志位s203,否则,则复位按键标志位s204;

设置轮询定时器和计时定时器s205,在轮询定时器中断中判断按键标志位是否被置位s206,若标志位被置位,则触发计时定时器且在计时定时器中断中累计计时变量形成计时时间s208,若按键标志位被复位,则锁定计时定时器;

若计时时间大于判定阈值s211,则按键有效s212,否则按键无效s213。

同时,提供一种基于定时器的延时的按键处理应用,从而提高了系统运行的实用性和稳定性。

工作原理:

本专利通过按键检查:查询按键是否被轻触并置复位按键标志位;定时器轮询:查询按键标志位并置复位计时标志位以及形成计时时间;去抖处理:通过计时时间判断确定按键是否有效,所述查询按键是否被轻触并置复位按键标志位包括判断按键是否轻触,若按键轻触,则置位按键标志位,否则,则复位按键标志位;所述查询按键标志位并置复位计时标志位以及形成计时时间包括设置轮询定时器和计时定时器,在轮询定时器中断中判断按键标志位是否被置位,若按键标志位被置位,则触发计时定时器且在计时定时器中断中累计计时变量形成计时时间,若按键标志位被复位,则锁定计时定时器且置位计时完成标志;所述通过计时时间判断确定按键是否有效包括若计时完成标志被置位,则若计时时间大于判定阈值,则按键有效,否则按键无效,由于实际应用中具有三条线程的一种处理方法,该方法包括采用外部中断方式(或者扫描方式)检查是否有键被按下,如果有,将一个标志位置位,表示有键按下了,姑且定义这个标志位为keyflag,如果进入中断,则keyflag=1;第二条线:系统应该提供一个10ms的定时器,作为系统的时间片,在定时中断内检测是否keyflag==1,如果该标志位为1,则表示已经检测到有键按下,则启动计时,计时变量定义为keytimes。可以用代码if(key.flag==1){key.times++}来统计检测到按键以后进入10ms系统定时中断的次数;第三条线:键扫描处理,主程序则主要判断是否有键被按下,按下以后是否计时变量大于某个值(该值决定你想定义的消抖时间),可以看到,对于这样的三线处理键盘的方式,对于键盘程序处理或显示闪烁的处理等需要大量延时的程序,都可以采用这样的结构,由于其处理过程大部分采用定时器中断完成,定时中断仅仅占用一个小小的周期,然后返回主程序继续执行,本发明解决了现有技术存在现有软件消抖基本都是用一个延时函数来实现10-20ms的延时,从而导致也许一个20ms程序周期由于有键盘延时判断的存在,将导致整个系统运行都慢了下来的问题,具有实时性高、执行速度快、灵活性高、响应及时的有益技术效果。

利用本发明的技术方案,或本领域的技术人员在本发明技术方案的启发下,设计出类似的技术方案,而达到上述技术效果的,均是落入本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1