防抖,判断到端口高电平之后,延时10ms左右,再判断一次是否还是刚刚的高电平状态,如果是,再等待按键释放,即while(!key);。跳出这个循环之后就表示按键事件完成。那么就LED =~LED。
你的程序:if(key == 0) 如果是高电平触发,那么大部分时间都在进行LED取反,导致过快闪烁,你看不出变化,就看成了长亮。如果是低电平触发,你按下的每一时刻都在变化,释放之后,可能是亮的,也可能是灭的
1判断是否按下
2软件延时去抖
3判断是否按下
4等待按键松开
sbit KEY = P3^3; //enter -> 0
void key_scan(void)
{
while(1)
{
while(KEY); //wait for enter
delay_ms(10); //delay 10ms
if(!KEY) break; //if enter
}
while(!KEY); //wait for release
}
主要目的是为了提高按键输入可靠性,由于机械触点的d性振动,
按键在按下时不会马上稳定地接通而在d起时也不能一下子
完全地断开,
因而在按键闭合和断开的瞬间均会出现一连串的抖动,
这称为按键的抖动干扰。
按键的抖动会造成按一次键产生的开关状态被
CPU
误读几次。
为了使
CPU
能正确地读取按键
状态,必须在按键闭合或断开时,消除产生的前沿或后沿抖动。
去抖动的方法有硬件方法和软件方法两种。
硬件方法是设计一个滤波延时电路或单稳态电路
等硬件电路来避开按键的抖动时间。
软件方法是指编制一段时间大于
100ms
的延时程序,
在
第一次检测到有键按下时,
执行这段延时子程序使键的前沿抖动消失后再检测该键状态,
如
果该键仍保持闭合状态电平,则确认为该键已稳定按下,否则无键按下,从而消除了抖动的
影响。
以上就是关于51单片机按键防抖这么处理全部的内容,包括:51单片机按键防抖这么处理、基于52单片机的按键防抖程序怎么写、键盘或拨码开关为什么要防止抖动在微机控制系统中如何实现防抖等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)