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 //灭
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)