C语言的按键开关防抖程序~

C语言的按键开关防抖程序~,第1张

key为按键,规定按下为低电平

if(key==0)

{

delay(50); //延时50ms,消抖

if(key==0) //再判断是否按下

{

while(!key); 松手检测

··················································

该按键按郑巧下要实现的功简消能程序

··················································

}

}

我的习惯是拦丛知这样写

防抖,判断到端口高电平之后,延时10ms左右,再判断一次是否还是刚刚的高电平状态,如果是扮瞎,再等待按键释放,即while(!key)。跳出这个循环之后就表示按键事件完成。那么就LED =~LED。

你的程序:if(key == 0) 如果是高电平触发,那么大部分时间都在进行LED取反,导致过快闪烁,你看不出变化,就看成了长亮厅猛空。如果是低电平触发,你按下的每一知绝时刻都在变化,释放之后,可能是亮的,也可能是灭的

#include “reg51.h”

sbit KEY1=P3^3 //定义按键输入端口

sbit KEY2=P3^4 //定义按键输入端口

sbit LED=P1^2 //定义led输出端口

/*------------------------------------------------

uS延时函数,含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下 T=tx2+5 uS

------------------------------------------------*/

void DelayUs2x(unsigned char t)

{

while(--t)

}

/*------------------------------------------------

mS延时函数,缺猜含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使竖物用汇编

------------------------------------------------*/

void DelayMs(unsigned char t)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245)

DelayUs2x(245)

}

}

void main()

{

while(1)

{

if(!KEY1)

{

DelayMs(10)//延时去抖,一般10-20ms

if(!KEY1) //再次确认按键是否按下,没有按下则退出

{

while(!KEY1)//如果确认按下按键等待按键释放,没有释放则一直等待余扮液

LED = 0 //亮

}

}

if(!KEY2)

{

DelayMs(10)//延时去抖,一般10-20ms

if(!KEY2) //再次确认按键是否按下,没有按下则退出

{

while(!KEY2)//如果确认按下按键等待按键释放,没有释放则一直等待

LED = 1 //灭

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12480009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存