标题: 分享一个单片机按键抬起不用死等的代码 [打印本页]

作者: 非凡科技    时间: 2021-5-23 18:03
标题: 分享一个单片机按键抬起不用死等的代码
我们经常用到按键抬起检测,很多人用while(!key)程序走到这里会死等,影响效率。分享一个不用死等的代码,实际用着还不错。代码如下
if(key==0&&key_sign==0) //检测输入如果为0(按键按下)并且按键标志为0.
        {
                   delay(10);  //抗抖延时                  

                      key_sign=1; //按键状态标志置1。        

        }
              if(key==1&&key_sign==1)//如果松开按键
              {
                 key_sign=0;//按键状态标志置0。
                           //写执行的程序。
                                                      
                }        


作者: 崇庆阳光    时间: 2021-5-23 18:27
好思路
作者: man1234567    时间: 2021-5-23 18:35
为何不在中断中用 ?
作者: dzbj    时间: 2021-5-24 01:22
man1234567 发表于 2021-5-23 18:35
为何不在中断中用 ?

因为中断资源少 而且按键没必要
作者: robinsonlin    时间: 2021-5-24 16:32
在按键检测过程中用delay 有很多弊端,如下解决方法,即可防止抖动,又可调节按键手感,更加不会出现while(!key)的尴尬。  而且资源占用少。
switch(key)
{
    case 0:
        if((Systick-Tpress)<100) break;
        //------------按键响应操作
        Tpress = Systick;
    break;
    case 1:
        Tpress = Systick;
    break;
}
Systick和Tpress是什么变量? 不做解释了,不懂的看多点例程就知道了。
作者: nqwang    时间: 2021-5-26 00:09
mark,如果可以的话,按键用带中断的IO是最方便的,
作者: dzbj    时间: 2021-5-26 10:26
我还是觉得用定时器好点 一个定时器中断可以给多个变量累加 中断只有2 扩展了也没几个 相比中断资源比定时器宝贵 一个按键就用中断有点可惜
作者: 1588848    时间: 2021-8-30 20:24
  delay(10);  //抗抖延时  这就是瞎胡闹
作者: 188610329    时间: 2021-9-1 20:49
delay(10) 抗抖这个,和 While 等按键抬起,半斤八两。不管你括号里的10代表什么,真要达到消抖的效果至少需要10毫秒。用死等消抖,和等按键抬起其实是同根同源。
真要不死等,就是定时器计数,连续5次为0表示确实按下,为1的时候就是释放,计数到200就标记为长按。

作者: hewayking    时间: 2021-9-7 10:15
我见过的 大师板子都是硬件加个104电容消抖  不差那几分钱




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