STM32之系统时基定时器中如何完成按键防抖动问题
扫描二维码
随时随地手机看文章
在按键演示防抖动部分的主要思路是:利用系统定时器溢出间隔中断来延时防抖。这样做可以提高代码的执行效率。我们怎么去很好的利用这个系统定时器来延时呢?如果只是简单在系统定时器中断中置位延时标志位,没有任何意义,我们需要有一个标志位来允许置延时标志。第一次扫描到有按键按下时,延时标志肯定为空,那么在此置位一个标志位,来允许系统定时器中置位延时标志,就解决了这个问题。
软件的逻辑结构是:如果没有延时,则置位允许延时标志置位标志。首先是置位标志位,如果置位了,在系统定时器溢出中断中,就可以置位延时标志位。如果已经置位,处理按键值。
下面给出一个在按键处理中的对延时标志判断的处理。
if(key_bit & 0x02) //如果按键没有被处理
{
if(key_bit & 0x01) //如果已经延时
{
key_bit &= ~0x01;//清0标志位
LED2B();//跳转LED2灯
key_bit |= 0x02;//置位按键处理标志
}
else //如果没有存在延时
{
key_bit |= 0x04;//置位 允许延时标志位置位 标志位
}
}