发明内容
本发明克服了现有技术的不足,提供一种开关消抖系统及其方法,使得单片机在运行20ms的延时子程序时,可再执行其它任何指令,不会浪费掉CPU的时间;在一些时序控制复杂、并发事件多、动作条件多的情况下,也不会造成漏检开关信号、导致系统不能正常工作的情况,从而提高系统的可靠性。
为解决上述的技术问题,本发明采用以下技术方案:
第一种,开关触点断开或闭合时只有上升沿的情况下:
一种开关消抖的方法,开关触点断开或闭合时在一个时间段内会产生抖动电信号,所述抖动电信号包括上升沿,通过对上升沿的判定,来确定是否执行开关触点断开或闭合的命令;
首先对上升沿的时间段设一个预定值;
对上升沿的判定,开关线路中出现由低电平向高电平变化,在定时的情况下,通过计时器对定时后的时间段计时,所述计时器的计时时间小于上升沿的预定值时,退出上升沿的判定,所述计时器的计时时间大于或者等于上升沿的预定值时,再判断开关电压信号是否为高电平,此时计时器的定时重新置零;在不为高电平的情况下,退出上升沿的判定;在为高电平的情况下,再次判定是否由低电平向高电平变化,确认是由低电平向高电平变化的情况下,执行开关触点断开或闭合的命令,判定是由高电平向低电平变化的情况下,退出上升沿的判定;
开关线路中出现由低电平向高电平变化,在未定时的情况下,判断开关电压信号是否为高电平,在不为高电平的情况下,记录下不为高电平的情况后退出上升沿的判定,在为高电平的情况下,判断是否由低电平向高电平变化,判定不是由低电平向高电平变化的情况下,退出上升沿的判定;判定是低电平向高电平变化的情况下,使计时器由零开始计时,并进入下一次对上升沿的判定。
第二种,开关触点断开或闭合时只有下降沿的情况下:
一种开关消抖的方法,开关触点断开或闭合时在一个时间段内会产生抖动电信号,所述抖动电信号包括下降沿,通过对下降沿进行判定,来确定是否执行开关触点断开或闭合的命令;首先对下降升沿的时间段设一个预定值;
对下降沿的判定,开关线路中出现由高电平向低电平变化,在定时的情况下,通过计时器对定时后的时间段计时,所述计时器的计时时间小于下降沿的预定值时,退出下降沿的判定,所述计时器的计时时间大于或者等于下降沿的预定值时,再判断开关电压信号是否为低电平,此时计时器的定时重新置零;在不为低电平的情况下,退出下降沿的判定;在为低电平的情况下,再次判定是否由高电平向低电平变化,确认是由高电平向低电平变化的情况下,执行开关触点断开或闭合的命令,判定是由低电平向高电平变化的情况下,退出下降沿的判定;
开关线路中出现由高电平向低电平变化,在未定时的情况下,判断开关电压信号是否为低电平,在不为低电平的情况下,记录下不为低电平的情况,在为低电平的情况下,判断是否由高电平向低电平变化,判定不是高电平向低电平变化的情况下,退出下降沿的判定;判定是高电平向低电平变化的情况下,使计时器由零开始计时,进入下一次对下降沿的判定。
第三种,开关触点断开或闭合时包括下降沿和上升沿的情况下:
一种开关消抖的方法,开关触点断开或闭合时在一个时间段内会产生抖动电信号,所述抖动电信号包括上升沿和下降沿,其特征在于:通过分别对上升沿和或者下降沿进行判定,来确定是否执行开关触点断开或闭合的命令;
首先对上升沿的时间段和下降沿的时间段都设一个预定值;
对上升沿的判定,开关线路中出现由低电平向高电平变化,在定时的情况下,通过计时器对定时后的时间段计时,所述计时器的计时时间小于上升沿的预定值时,退出上升沿的判定,所述计时器的计时时间大于或者等于上升沿的预定值时,再判断开关电压信号是否为高电平,此时计时器的定时重新置零;在不为高电平的情况下,退出上升沿的判定;在为高电平的情况下,再次判定是否由低电平向高电平变化,确认是由低电平向高电平变化的情况下,执行开关触点断开或闭合的命令,判定是由高电平向低电平变化的情况下,退出上升沿的判定;
开关线路中出现由低电平向高电平变化,在未定时的情况下,判断开关电压信号是否为高电平,在不为高电平的情况下,记录下不为高电平的情况后退出上升沿的判定,在为高电平的情况下,判断是否由低电平向高电平变化,判定不是由低电平向高电平变化的情况下,退出上升沿的判定;判定是低电平向高电平变化的情况下,使计时器由零开始计时,并进入下一次对上升沿的判定。
对下降沿的判定,开关线路中出现由高电平向低电平变化,在定时的情况下,通过计时器对定时后的时间段计时,所述计时器的计时时间小于下降沿的预定值时,退出下降沿的判定,所述计时器的计时时间大于或者等于下降沿的预定值时,再判断开关电压信号是否为低电平,此时计时器的定时重新置零;在不为低电平的情况下,退出下降沿的判定;在为低电平的情况下,再次判定是否由高电平向低电平变化,确认是由高电平向低电平变化的情况下,执行开关触点断开或闭合的命令,判定是由低电平向高电平变化的情况下,退出下降沿的判定;
开关线路中出现由高电平向低电平变化,在未定时的情况下,判断开关电压信号是否为低电平,在不为低电平的情况下,记录下不为低电平的情况,在为低电平的情况下,判断是否由高电平向低电平变化,判定不是高电平向低电平变化的情况下,退出下降沿的判定;判定是高电平向低电平变化的情况下,使计时器由零开始计时,进入下一次对下降沿的判定。
为了更好的实现上述消抖的方法,下面作出进一步的技术改进:
作为优选:上述计时器的计时方式是通过单片机内的定时器和计数器进行的,先设定定时器的时钟时基,单片机运行时,定时器每定时一个时钟时基就产生一次中断,中断服务程序中计数器就加1,计时时间等于计数器的累加数乘以时钟时基。
作为优选:上述时钟时基为10ms。
作为优选:上述上升沿/下降沿时间段的预先设定值为20ms。
作为上述方法的实现手段之一,下面公布一种开关消抖系统:
一种开关消抖系统,包括:定时判断模块,开关触点断开或闭合时产生的抖动电信号通过定时判断模块判断是否定时,并将判断为定时的结果传递给计时器模块;计时器模块,用于监控计时器的计时时间,并对抖动电信号设一个预定值,将计时器的计时时间与预定值进行比较,计时器的计时时间大于或者等于预定值的情况下进入开关高压信号判断模块;开关高压信号判断模块,用于判断开关高压信号是否为高电平,在为高电平的情况下进入上升沿判断模块;上升沿沿判断模块,用于判断开关触点断开或闭合时产生的抖动电信号是否由低电平到高电平,确认是由低电平到高电平的情况下则执行开关的通断命令。
作为上述方法的实现手段之二,下面公布一种开关消抖系统:
一种开关消抖系统,包括:定时判断模块,开关触点断开或闭合时产生的抖动电信号通过定时判断模块判断是否定时,并将判断为定时的结果传递给计时器模块;计时器模块,用于监控计时器的计时时间,并对抖动电信号设一个预定值,将计时器的计时时间与预定值进行比较,在计时器的计时时间大于或者等于预定值的情况下进入开关高压信号判断模块;开关高压信号判断模块,用于判断开关高压信号为低电平,在为低电平的情况下进入下降沿判断模块;下降沿判断模块,用于判断开关触点断开或闭合时产生的抖动电信号是否由高电平到低电平,确认是由高电平到低电平的情况下则执行开关的通断命令。
与现有技术相比,本发明的有益效果是:
本发明的一种开关消抖系统及其方法,该技术方案的基本思路是利用单片机的定时器产生10ms的时钟时基,在开关处理程序中嵌入20ms的延时判定,时间没到,继续执行系统的其它指令,时间到,则做相应开关处理;
单片机在运行这20ms的延时子程序时,可再执行其它任何指令,不浪费CPU大量时间,系统可查询的开关数量多,从十几个到几十个不等,效率大大提高,系统的实时性好;在一些时序控制复杂、并发事件多、动作条件多的情况下,也不会造成漏检开关信号,导致系统不能正常工作的情况发生,从而大大提高了系统的可靠性;
综上所述,本发明的技术方案可保证系统程序流畅的运行,实时性好,快速高效的处理并发事件,在实时多任务的嵌入系统中能发挥很好的作用,达到既延时又不误时的效果,保证准确有效的辨认开关信号。
具体实施方式
下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
实施例1
一种开关消抖的方法,开关触点断开或闭合时在一个时间段内会产生抖动电信号,所述抖动电信号包括上升沿,通过对上升沿的判定,来确定是否执行开关触点断开或闭合的命令;
首先对上升沿的时间段设一个预定值;
对上升沿的判定,开关线路中出现由低电平向高电平变化,在定时的情况下,通过计时器对定时后的时间段计时,所述计时器的计时时间小于上升沿的预定值时,退出上升沿的判定,所述计时器的计时时间大于或者等于上升沿的预定值时,再判断开关电压信号是否为高电平,此时计时器的定时重新置零;在不为高电平的情况下,退出上升沿的判定;在为高电平的情况下,再次判定是否由低电平向高电平变化,确认是由低电平向高电平变化的情况下,执行开关触点断开或闭合的命令,判定是由高电平向低电平变化的情况下,退出上升沿的判定;
开关线路中出现由低电平向高电平变化,在未定时的情况下,判断开关电压信号是否为高电平,在不为高电平的情况下,记录下不为高电平的情况后退出上升沿的判定,在为高电平的情况下,判断是否由低电平向高电平变化,判定不是由低电平向高电平变化的情况下,退出上升沿的判定;判定是低电平向高电平变化的情况下,使计时器由零开始计时,并进入下一次对上升沿的判定。
上述计时器的计时方式是通过单片机内的定时器和计数器进行的,先设定定时器的时钟时基,单片机运行时,定时器每定时一个时钟时基就产生一次中断,中断服务程序中计数器就加1,计时时间等于计数器的累加数乘以时钟时基。
基于上述思想,下面通过列举具体参数对以上工作原理,做进一步的说明:
对于不同类型的开关触点断开或闭合时产生抖动电信号的时间段不一样,本实施例假设上述的开关触点断开或闭合时产生的抖动电信号的时间段为20ms,由于此处的开关没有下降沿,所以上升沿时间段的预定值即为20ms。
上述时钟时基设为10ms,那么单片机运行时,设定定时器每定时10ms就产生一次中断,在中断服务程序中计数器就加1,这样,时间=计数器的累加数×10ms,系统就知道具体时间段。
在判定开关电压信号是否由低电平向高电平变化的情况,可设定上升沿标志位。
上升沿标志位:1个内存单元变量为8位,标志位占其中的1位,标志位用于表示某一事件的状态是否出现,用1或0表示,在这里表示开关信号的状态,是低电平还是高电平,1表示低电平,0表示高电平。
在判定是否定时的情况下,可设20ms标志位。
20ms标志位,和上升沿标志位一样,在这里表示是否在定时20ms这一事件,为1表示在定时,为0表示没有定时。
对于是否执行开关触点断开或闭合的命令,可设定运行标志位。
运行标志位,和上升沿标志位一样,在这里表示开关的信号是否有上升沿这一事件,为1表示有上升沿,为0表示没有上升沿。
系统根据其状态来决定是否执行某一特定的功能。
参见附图1,首先判断20ms标志位是否等于1,在等于1的情况下,判断计数器是否大于2,即是否到20ms,在没有到20ms的情况下,退出上升沿的判定,在达到20ms的情况下,使20ms标志位等于0;再判断开关电压信号是否为高电平,在不为高电平的情况下,退出上升沿的判定;在为高电平的情况下,再次确认上升沿标志位是否等于1,在等于1的情况下,使运行标志位等于1,即执行开关触点断开或闭合的命令,在不等于1的情况下,退出上升沿的判定;
开关线路中出现由低电平向高电平变化,在20ms标志位不等于1的情况下,判断开关电压信号是否为高电平,在不为高电平的情况下,上升沿标志位等于1,并退出上升沿的判定;在为高电平的情况下,判断上升沿标志位是否等于1,判定为不等于1的情况下,退出上升沿的判定;在等于1的情况下,使计时器由零开始计时,20ms标志位等于1,并进入下一次对上升沿的判定。
在开关处理系统中,开关处理程序会对上述每个标志位的1或者0零进行引用,从而进行相应的开关处理。
实施例2
一种开关消抖的方法,开关触点断开或闭合时在一个时间段内会产生抖动电信号,所述抖动电信号包括下降沿,通过对下降沿进行判定,来确定是否执行开关触点断开或闭合的命令;首先对下降升沿的时间段设一个预定值;
对下降沿的判定,开关线路中出现由高电平向低电平变化,在定时的情况下,通过计时器对定时后的时间段计时,所述计时器的计时时间小于下降沿的预定值时,退出下降沿的判定,所述计时器的计时时间大于或者等于下降沿的预定值时,再判断开关电压信号是否为低电平,此时计时器的定时重新置零;在不为低电平的情况下,退出下降沿的判定;在为低电平的情况下,再次判定是否由高电平向低电平变化,确认是由高电平向低电平变化的情况下,执行开关触点断开或闭合的命令,判定是由低电平向高电平变化的情况下,退出下降沿的判定;
开关线路中出现由高电平向低电平变化,在未定时的情况下,判断开关电压信号是否为低电平,在不为低电平的情况下,记录下不为低电平的情况,在为低电平的情况下,判断是否由高电平向低电平变化,判定不是高电平向低电平变化的情况下,退出下降沿的判定;判定是高电平向低电平变化的情况下,使计时器由零开始计时,进入下一次对下降沿的判定。
上述计时器的计时方式是通过单片机内的定时器和计数器进行的,先设定定时器的时钟时基,单片机运行时,定时器每定时一个时钟时基就产生一次中断,中断服务程序中计数器就加1,计时时间等于计数器的累加数乘以时钟时基。
基于上述思想,下面通过列举具体参数对以上工作原理,做进一步的说明:
对于不同类型的开关触点断开或闭合时产生抖动电信号的时间段不一样,本实施例假设上述的开关触点断开或闭合时产生的抖动电信号的时间段为20ms,由于此处的开关没有上升沿,所以下降沿时间段的预定值即为20ms。
上述时钟时基设为10ms,那么单片机运行时,设定定时器每定时10ms就产生一次中断,在中断服务程序中计数器就加1,这样,时间=计数器的累加数×10ms,系统就知道具体时间段。
在判定开关电压信号是否由高电平向低电平变化的情况,可设定下降沿标志位。
下降沿标志位:1个内存单元变量为8位,标志位占其中的1位,标志位用于表示某一事件的状态是否出现,用1或0表示,在这里表示开关信号的状态,是低电平还是高电平,1表示低电平,0表示高电平。
在判定是否定时的情况下,可设20ms标志位。
20ms标志位,和下降沿标志位一样,在这里表示是否在定时20ms这一事件,为1表示在定时,为0表示没有定时。
对于是否执行开关触点断开或闭合的命令,可设定运行标志位。
运行标志位,和上升沿标志位一样,在这里表示开关的信号是否有下降沿这一事件,为1表示有下降沿,为0表示没有下降沿。
系统根据其状态来决定是否执行某一特定的功能。
参见附图2,首先判断20ms标志位是否等于1,在等于1的情况下,判断计数器是否大于2,即是否到20ms,在没有到20ms的情况下,退出下降沿的判定,在达到20ms的情况下,使20ms标志位等于0;再判断开关电压信号是否为低电平,在不为低电平的情况下,退出下降沿的判定;在为低电平的情况下,再次确认下降沿标志位是否等于1,在等于1的情况下,使运行标志位等于1,即执行开关触点断开或闭合的命令,在不等于1的情况下,退出下降沿的判定;
开关线路中出现由高电平向低电平变化,在20ms标志位不等于1的情况下,判断开关电压信号是否为低电平,在不为低电平的情况下,下降沿标志位等于1,并退出下降沿的判定;在为低电平的情况下,判断下降沿标志位是否等于1,判定为不等于1的情况下,退出下降沿的判定;在等于1的情况下,使计时器由零开始计时,20ms标志位等于1,并进入下一次对下降沿的判定。
在开关处理系统中,开关处理程序会对上述每个标志位的1或者0零进行引用,从而进行相应的开关处理。
实施例3
一种开关消抖的方法,开关触点断开或闭合时在一个时间段内会产生抖动电信号,所述抖动电信号包括上升沿和下降沿,其特征在于:通过分别对上升沿和或者下降沿进行判定,来确定是否执行开关触点断开或闭合的命令;
首先对上升沿的时间段和下降沿的时间段都设一个预定值;
对上升沿的判定,开关线路中出现由低电平向高电平变化,在定时的情况下,通过计时器对定时后的时间段计时,所述计时器的计时时间小于上升沿的预定值时,退出上升沿的判定,所述计时器的计时时间大于或者等于上升沿的预定值时,再判断开关电压信号是否为高电平,此时计时器的定时重新置零;在不为高电平的情况下,退出上升沿的判定;在为高电平的情况下,再次判定是否由低电平向高电平变化,确认是由低电平向高电平变化的情况下,执行开关触点断开或闭合的命令,判定是由高电平向低电平变化的情况下,退出上升沿的判定;
开关线路中出现由低电平向高电平变化,在未定时的情况下,判断开关电压信号是否为高电平,在不为高电平的情况下,记录下不为高电平的情况后退出上升沿的判定,在为高电平的情况下,判断是否由低电平向高电平变化,判定不是由低电平向高电平变化的情况下,退出上升沿的判定;判定是低电平向高电平变化的情况下,使计时器由零开始计时,并进入下一次对上升沿的判定。
对下降沿的判定,开关线路中出现由高电平向低电平变化,在定时的情况下,通过计时器对定时后的时间段计时,所述计时器的计时时间小于下降沿的预定值时,退出下降沿的判定,所述计时器的计时时间大于或者等于下降沿的预定值时,再判断开关电压信号是否为低电平,此时计时器的定时重新置零;在不为低电平的情况下,退出下降沿的判定;在为低电平的情况下,再次判定是否由高电平向低电平变化,确认是由高电平向低电平变化的情况下,执行开关触点断开或闭合的命令,判定是由低电平向高电平变化的情况下,退出下降沿的判定;
开关线路中出现由高电平向低电平变化,在未定时的情况下,判断开关电压信号是否为低电平,在不为低电平的情况下,记录下不为低电平的情况,在为低电平的情况下,判断是否由高电平向低电平变化,判定不是高电平向低电平变化的情况下,退出下降沿的判定;判定是高电平向低电平变化的情况下,使计时器由零开始计时,进入下一次对下降沿的判定。
本实施例的开关包含了实施1中的上升沿判断和实施例2下降沿的判断,只要出现上升沿和下降沿的一种情况,开关处理系统就进行相应开关处理。
实施例4
一种开关消抖系统,包括:定时判断模块,开关触点断开或闭合时产生的抖动电信号通过定时判断模块判断是否定时,并将判断为定时的结果传递给计时器模块;计时器模块,用于监控计时器的计时时间,并对抖动电信号设一个预定值,将计时器的计时时间与预定值进行比较,在计时器的计时时间大于或者预定值的情况下进入开关高压信号判断模块;开关高压信号判断模块,用于判断开关高压信号是否为高电平,在为高电平的情况下进入上升沿判断模块;上升沿沿判断模块,用于判断开关触点断开或闭合时产生的抖动电信号是否由低电平到高电平,确认是由低电平到高电平则执行开关的通断命令。
实施例5
根据权利要求1所述的开关消抖系统,包括:定时判断模块,开关触点断开或闭合时产生的抖动电信号通过定时判断模块判断是否定时,并将判断为定时的结果传递给计时器模块;计时器模块,用于监控计时器的计时时间,并对抖动电信号设一个预定值,将计时器的计时时间与预定值进行比较,在计时器的计时时间大于或者预定值的情况下进入开关高压信号判断模块;开关高压信号判断模块,用于判断开关高压信号为低电平,在为低电平的情况下进入下降沿判断模块;下降沿判断模块,用于判断开关触点断开或闭合时产生的抖动电信号是否由高电平到低电平,确认是由由高电平到低电平则执行开关的通断命令。
以上实施方式的描述中,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。