转载:
https://blog.csdn.net/renhaofan/article/details/78848547
总结一下,消抖两大类方法:
软件消抖:主要采取当按键按下,延时一会,越过信号不稳定的抖动时间,再次判断键盘是不是按下;
If ( !key)
{
Delay(xxxms/us);
if(!key)
true key;
else
shake key;
}
硬件消抖:主要是对抖动时,连续的进行判断,判断是否有“gap”,就是“间隙”;
但是这样有一个问题,就是可能延时判断时,抖动,正好满足,你的验证方法,比如说,刚才以下方法判断3位的,有可能抖动恰好满足;
所以硬件更好的方法,应该是用一个计数器,对松键和按键的抖动脉冲计数,然后分析按键的习惯,设定一个阈值,通过这个阈值就可以判断出是否是真的抖动。
方法一:RS触发器
这是用multisim做的一个,原理是,R,S端都用电阻上拉,开关打到A端,相当与输入时低电平,打向B的时候,产生一个低电平抖动,因为是与非门的RS触发器,R,S全是1的时候,输出保持不变,所以Q立马就变成1,之后就保持不变了。B到A,同样的道理,遇到第一个抖动,R的输入就立马变成0,所以Q也就为0;
方法二:D触发器
需要几位消抖,就用几个D触发器,以4位为例子:
实际上就是“滤波”的效果,抖动,肯定有低电平,高电平,分布不均匀,这样设计相当于,在某段时间内,没有所谓的gap才可以。
方法三:用状态转换图设计(本实验采用的方法)
实际上就是极短时间内判断了三个是不是同时是高电平