标题:
分享一个单片机按键抬起不用死等的代码
[打印本页]
作者:
非凡科技
时间:
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