51单片机按键防抖这么处理

如题所述

防抖,判断到端口高电平之后,延时10ms左右,再判断一次是否还是刚刚的高电平状态,如果是,再等待按键释放,即while(!key);。跳出这个循环之后就表示按键事件完成。那么就LED =~LED。
你的程序:if(key == 0) 如果是高电平触发,那么大部分时间都在进行LED取反,导致过快闪烁,你看不出变化,就看成了长亮。如果是低电平触发,你按下的每一时刻都在变化,释放之后,可能是亮的,也可能是灭的追问

可以帮我发个代码吗?C代码?

追答

if(!key)
{
delay(10);//延迟10ms
if(!key)//再判断,防抖 {
while(key);//等待释放
LED = ~LED;
}
}

追问

太谢谢你了,

还是不行哦!

追答

能把你的程序截个图贴出来么?

追问

现在可以了,谢谢

追答

最终是什么问题呢?

追问

延时函数有问题,延时没算好

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-21
一般是检测到按键按下后,过一段时间再检测一次,如果两次都检测到了说明确实是按键按下了。

间隔时间 一般是10-20毫秒。追问

if(key==0)
LED=~LED
本来上面代码当按键一下灯亮,在按一下关,可是现在有事

可是现在按好几下也关不了是这么回事

追答

就是没有防抖造成的

追问

C代码这么写,

追答

if(key==0){ delayms(10);//延10ms if(key==0)//再判,防抖
{
LED = ~LED;
while(key);//等释放 }}

追问

谢谢

第2个回答  2013-12-21
通过延时。。。。。

51单片机按键检测电路与消抖
在51单片机的按键检测电路设计中,R3电阻的选取通常为4.7K,其原理在于,通过将按键与单片机I\/O口连接,并引入R3作为分压电阻,可以有效降低按键抖动对电路的影响。4.7K的电阻值在保证足够分压以避免I\/O口直接受到大电流冲击的同时,又能提供合适的阻抗匹配,避免信号传输延迟。为了更高效地处理按键输入...

51单片机按键防抖这么处理
防抖,判断到端口高电平之后,延时10ms左右,再判断一次是否还是刚刚的高电平状态,如果是,再等待按键释放,即while(!key);。跳出这个循环之后就表示按键事件完成。那么就LED =~LED。你的程序:if(key == 0) 如果是高电平触发,那么大部分时间都在进行LED取反,导致过快闪烁,你看不出变化,就看成...

请教,51单片机C语言,按键防抖
while(!sw) 的意思是松开按键才有效,就是松开按键才会执行下一条语句,不能起到防抖作用

51单片机按键消抖方法介绍
1,任意引脚接按键,2,开个定时器中断几毫秒-几十毫秒中断一次,执行下面的函数。unsigned char Cnt=0;\/\/键按下时间计数器 if(!Key)\/\/如果键按下,{ if(Cnt)\/\/如果已经计数一次中断时间 { Cnt=0;\/\/清计数器 Key_flag =1;\/\/键识别成功 } else\/\/按键初次按下,{ Cnt++;\/\/计数器加1 }...

用51单片机做一个键盘,按一下数码管加1,可是无论我怎么消抖动,总是有...
你可以在去抖程序里加入检测松手程序例如 ………if(!key) \/\/检测键盘是否按下 delay():\/\/去抖延时一般是50ms if(!key)\/\/再次检测键盘是否按下 ×××++: \/\/这里写数码管加"1"程序 while(key);\/\/加入写句,目的是等待key变为原来的状态才会执行下一条指令!希望可以帮到你!

请教高手,用51单片机独立按键控制数码管数字加减,为什么在按下独立按...
因为你按键的时候影响了数码管刷新;数码管一般都是动态扫描的,利用人眼的视觉暂留做的,你按下按键的时候,肯定有延时消抖,延时的时候就影响了数码管显示,所以数码管刷新的慢了,人眼就能分辨出来亮和灭的状态...解决办法 1、改进按键扫描 2、改进数码管显示 3、用嵌入式系统 以上三选一即可解决 ...

单片机外部中断0用按键输入,怎样消抖?
中断,还用消抖?需要消抖的按键,就不要使用在中断输入引脚上。外部中断,是用于处理那些需要紧急处理的设备。按键,本是人工操作的,属于不紧不慢的东西。用它来触发中断,就是自己给自己添乱。满意答案中,还说延时 10 ms,这样做,就失去了中断的意义。

求51单片机,io口按键防抖,中间插入一个时间,按键扫描的程序。
if(!KEY1) \/\/再次确认按键是否按下,没有按下则退出 { while(!KEY1);\/\/如果确认按下按键等待按键释放,没有释放则一直等待 LED = 0; \/\/亮 } } if(!KEY2){ DelayMs(10); \/\/延时去抖,一般10-20ms if(!KEY2) \/\/再次确认按键是否按下,没有按下则退出 { while(!KEY2)...

51单片机的外部中断如何写按键消抖c程序!
跟外部的按键消抖一样处理就可以了。void ext0() interrupt 0 { delay(10);\/\/ flag=0;\/\/按键有效标志=0为无效 if(P3_2){ while(!P3_2);\/\/等待按键抬起 flag=1;} }

51单片机按键释放时候为什么不用消抖
按键按实了,就不会抖动 既然检测到释放,就𣎴会有假释放 按下消抖是因为单片机处理速度特别快,按键按下一次,可能被当作按很多次 即使加了消抖处理,由于人手的反应比较慢,一次按下持续时间仍然至少零点几秒,仍然会被当作多次处理,有了按键抬起检测,就可以避免这个问题 虽然按键抬起也有抖动...

相似回答