标题: 单片机键盘消抖,不用延时还能用什么?中断轮询程序怎么写呢? [打印本页]

作者: 旁观者    时间: 2021-3-31 20:37
标题: 单片机键盘消抖,不用延时还能用什么?中断轮询程序怎么写呢?
上网查了用中断轮询,但是具体要怎么写,无从下手。有哪个大佬有演示程序给我参考一下吗?

作者: man1234567    时间: 2021-3-31 21:06
键盘消抖原理就是延时,认为超短的时间内能按多次就是抖,硬件软件都是绕着这个转的。
中断轮询就象一个简单的操作系统,弄个定时中断,以不同的间隔时长(中断)执行不同的函数(程序)。
试过也就扔一边了毕竟只是业余玩玩实用为主,网上可以找到如果真的很神奇早就必学了。
作者: wxxl    时间: 2021-3-31 21:39
并一个103电容也可以,但成本会上去一点
作者: 黄youhui    时间: 2021-4-1 08:47
我用STM8S做过。
就是中断函数里面检测到是下降沿中断(按下按键),就将标志位置1(flag = 1),上升沿(抬起)就将标志位置0(flag = 0).
在对应的执行函数内部多执行几次判断(if(flag == 1))


作者: 人人学会单片机    时间: 2021-4-1 09:10
参考这个贴子 短按+长按 http://www.51hei.com/bbs/dpj-201806-1.html
作者: taotie    时间: 2021-4-1 09:13
本帖最后由 taotie 于 2021-4-1 10:21 编辑

用硬件74c922。怎么用本坛搜哦。
作者: rayin    时间: 2021-4-1 09:30
不想用延时, 可以考虑加门电路去抖动, 要增加硬件成本开销. 还是在软件中做延时,消抖简单又节省成本.
作者: univers    时间: 2021-4-1 10:06
一般都是延时,几个ms级,也可以用定时器。定她个ms级。
作者: ZXWPL    时间: 2021-4-1 14:10
搞个计时,每10ms检测一次按键,如果连续累计7~8次都都能检测到,认为按键按下,若是某次检测不到,则清除计数。
作者: cn_zhx    时间: 2021-4-1 15:19
用硬件电路去抖,会增加成本。
如果不影响软件的执行效率,没必要去计较这些吧。
作者: yxh1010    时间: 2021-4-1 20:34
硬件消抖:按键上并联一个0.1uF的电容;软件消抖:除去延时消抖之外可以利用定时器消抖
作者: yxh1010    时间: 2021-4-1 20:36
硬件消抖:按键并联一个0.1uF的电容但往往效果不是很好;软件消抖:利用定时器消抖
作者: huagf007    时间: 2021-5-14 15:57
还是硬件消抖好点,两个电阻一个电容
作者: 18701931930    时间: 2021-5-14 16:18
关于按键去抖动。 去除低级的while和delay写法
硬件就是加个电容接地。
我常用的软件去抖动如下,  //最好软硬件结合效果会更好!!!!!
void Key_scan()
{
     static u8 i=0,j=0;
     if(key==0)
    {
          if(i==0)         {
              if(key==0&&j++>100)  //j的值根据函数调度周期调整
             {
                   i=1;
                   //要执行的任务
             }
        }
     }
    else
    {
        i=0;        j=0;
    }
}


作者: 10220916    时间: 2021-5-16 08:58
按键加小电容呀。那样不用对按键程序延时




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1