这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【原创】51单片机按键的定时器消抖--from三叶

共9条 1/1 1 跳转至

【原创】51单片机按键的定时器消抖--from三叶

助工
2023-04-20 18:11:25     打赏

我在进行单片机的学习过程中,经常需要对按键进行消抖,因为按键在闭合及断开的瞬间均伴随有抖动。我之前一直用的都是延时消抖,当按键状态变化后,等待一个 10ms 左右的延时时间,让抖动消失后再进行一次按键状态检测。最近接触了定时器消抖,发现比延时消抖多了一些优点。

一、为什么要进行消抖

首先,进行按键消抖是防止按键一次按下或释放的时候被CPU误读多次操作;其次,按键所采用的开关为机械触点式按键开关,所以必须采用软件消抖或者硬件消抖。

二、定时器消抖的步骤

1、判断按键是否按下

2、当按键按下时,开启定时器中断

3、在定时器中断中再次判断按键是否按下

4、关闭定时器,松开按键

三、定时器消抖的优点

首先,相对于通常进行的延时消抖来说,可以减少延时变得更高效;其次,采用中断驱动的方式,节约了CPU资源。

四、部分代码

void Key_Loop(void)
{
                  static u8 input1 = 0,input2 = 0;
                  input2 = input1;
                  input1 = Key_NumBer();
                 
                  if(input1 == 0 && input2 == 1){KeyBer = 1;}
                  if(input1 == 0 && input2 == 2){KeyBer = 2;}
                  if(input1 == 0 && input2 == 3){KeyBer = 3;}
                  if(input1 == 0 && input2 == 4){KeyBer = 4;}
                  if(input1 == 0 && input2 == 5){KeyBer = 5;}
                  if(input1 == 0 && input2 == 6){KeyBer = 6;}
                  if(input1 == 0 && input2 == 7){KeyBer = 7;}
                  if(input1 == 0 && input2 == 8){KeyBer = 8;}
                  if(input1 == 0 && input2 == 9){KeyBer = 9;}
                  if(input1 == 0 && input2 == 10){KeyBer = 10;}
                  if(input1 == 0 && input2 == 11){KeyBer = 11;}
                  if(input1 == 0 && input2 == 12){KeyBer = 12;}
                  if(input1 == 0 && input2 == 13){KeyBer = 13;}
                  if(input1 == 0 && input2 == 14){KeyBer = 14;}
                  if(input1 == 0 && input2 == 15){KeyBer = 15;}
                  if(input1 == 0 && input2 == 16){KeyBer = 16;}
}




工程师
2023-04-20 18:43:28     打赏
2楼

感谢楼主的分享


工程师
2023-04-20 19:03:38     打赏
3楼

感谢楼主的分享,很实用了。


专家
2023-04-28 10:11:27     打赏
4楼

这个方法不错


助工
2023-04-28 14:32:33     打赏
5楼

谢谢分享,学习了


专家
2023-05-01 00:02:23     打赏
6楼
感谢楼主的分享,很实用了。

助工
2023-05-04 09:21:54     打赏
7楼

感谢楼主分享,学习了


助工
2023-05-05 12:36:34     打赏
8楼

代码排版有点问题


高工
2023-05-14 10:05:12     打赏
9楼

感谢楼主分享


共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]