APP下载

基于单片机的一种消抖方法及应用

2014-09-24杨立宏

无线互联科技 2014年7期
关键词:处理程序低电平计数器

杨立宏

摘要:键盘电路是单片机应用中的常用电路,本文给出了一种基于单片机的利用定时器中断进行按键软件消抖的方法,在不改变定时器定时时间的情况下可以实现任意消抖延时时间的设定。

关键词:按键;软件消抖;单片机在微型计算机和工业控制应用领域中,开关是必不可少的输入设备。本文在实际应用的基础上介绍一种利用单片机定时器产生中断的方法来实现按键的消抖。特点是节省CPU资源,同时对延时時间可自由控制,而不需要改变定时器的定时时间。

1消抖原理

一个按键开关在闭合或者断开时不会马上稳定,均伴随有一连串的抖动,抖动的时间长短由按键的机械特性决定,一般为5ms~10ms。

软件消抖主要采用延时或者中断实现:一种是用延时子程序,首先读取按键的状态为低电平,然后调用延时子程序,执行完延时之后,再次判断此时按键的状态,如果和上次相同则证明被按下,否则被认为是抖动,但此种方法延时时一直占用CPU资源,在多任务的系统中不适合采用此法。另外一种方法则是用中断的方法,每一次中断读取按键的状态,如果与上次读取的数据不一致则说明当前读取的是前沿抖动数据,将当前的数据保留,等待下次定时器中断,如果当前读取的数据和前次读取的数据相同则说明读取的是稳定状态下的数据,则认为真正有键按下。本文同样也是采用中断的方法进行消抖。

2按键消抖硬件电路及软件设计

单片机有着丰富的定时器资源,此处使用定时器。实现的方法是:设定定时器定时时间为5ms,定时器定时时间到后,进入中断处理程序,在中断处理程序中判断按键的状态,并预先设定一个字节k[i](初始化为0xff)来存放按键的状态,如果按键被按下则将k[i]的最后一位置为0,同时将k[i]左移一位,再将最后一位置1,等待下次定时满后再判断。延时时间可以设定为5ms的整数倍。方便之处在于不改变定时器定时时间的情况下可以实现任意消抖延时时间的设定。

⑴自锁键消抖方法:自锁键的特点是按下后一直保持按下的状态,因此不宜采用中断的方法,可以采用定时扫描的方法。定义k[i]存放按键的状态。如果按键被按下,将k[i]的最后一位置0,并对端口为低电平的次数计数的计数器加1,对端口为高电平的次数计数的计数器清零,将k[i]左移一位,然后将最后一位置成1,并判断此时计数器是否记满,记满则将按下的状态送出,同时对端口为低电平的次数计数的计数器减1,如此循环。

具体实现程序如下:

if(np10==0)

{

k[5]&=0xfe;

cnt10=cnt10+1;

cnt11=0;

k[5]=k[5]<<1;

k[5]|=0x01;

if(cnt10==4)//如果检测到连续的4个0,说明此键按下,相当于延时20ms

{

ram[1]|=0x01;

cnt10=cnt10-1;

}

}

else

{

k[5]|=0x01;

cnt11=cnt11+1;

cnt10=0;

k[5]=k[5]<<1;

k[5]|=0x01;

if(cnt11==20) //如果1记数器检测到连续的4个1,则说明按键抬起

{

ram[1]&=0xfe;

cnt11=cnt11-1;

}

}

⑵弹起按键消抖方法:弹起按键的特点是按下,当手松开后又自动弹起,因此按键的判断宜采用中断的方法。MSP430的P2口具有中断功能,在按键按下的下降沿产生一个中断,设置标志,然后通过每一次的定时中断来读取按键状态,达到消抖的目的。实现方法是:按键下降沿进入中断处理程序,在中断处理程序中将k[i]最后一位置0,计数器设置为1。然后在定时器中断程序中读取按键的状态,如果定时器的4次中断仍为按下状态,则认为按键按下,送按键状态到相应单元,执行相应操作。具体实现程序如下:

if(count0!=0)

{

if(!(k[0]&0x01))

{

k[0]=k[0]<<1;

k[0]|=0x01;

np20=P2IN&BIT0

if(np20==0)

{

k[0]&=0xfe;

count0=count0+1;

if(count0==21) //如果计数器值为5,则认为按下此键,即延时20ms

{

count0=0;

ram[2]&=0xf8;

ram[2]|=0x01;

P6OUT=0x08;

}

}

}

}

3结论

按键的消抖有很多方法,本文使用的是基于中断的方法达到消抖的目的,优点是在不改变定时器定时时间的情况下可以自由设定消抖延时时间。本文介绍的软件消抖的方法已经在实际应用中得到验证,对按键的消抖达到了很好的效果。

[参考文献]

[1]沈建华,杨艳琴,翟骁曙.MSP430系列16位超低功耗单片机原理与应用[M].北京:清华大学出版社,2004.11.

猜你喜欢

处理程序低电平计数器
采用虚拟计数器的电子式膜式燃气表
铁道车辆高/低电平信号智能发生器设计
高速公路工程变更与计量支付处理程序的优化方法
2017款凯迪拉克2.8L/3.0L/3.2L/3.6L车型低电平参考电压总线电路图
基于C++的数控加工通用后处理程序的开发应用研究
企业危机公关管理问题分析
处理房地产纠纷中行政与民事交叉问题的正当程序
15-MeV电子直线加速器的低电平系统
计数器竞争冒险及其处理的仿真分析
任意N进制计数器的设计方法