|
尽量不要用阻塞延时去抖,下面这个更具实用价值,供你参考:
#include<reg52.h>
sbit key1=P3^2;
sbit LED=P0^7;
unsigned char ucKeySec=0;//键值
void key()
{
static unsigned int uiKeyTimeCnt1 = 0; //按键去抖动,累加去抖定时器
static bit ucKeyLock1=0; //按键自锁标志
if (key1== 1) //IO是高电平,说明按键没有被按下,清零标志位
{
ucKeyLock1 = 0; //按键自锁标志清零
uiKeyTimeCnt1 = 0; //按键去抖动延时计数器清零
}else if (ucKeyLock1 == 0) { //有按键按下,且是第一次被按下
uiKeyTimeCnt1++; //累加去抖
if (uiKeyTimeCnt1 > 2000) {
uiKeyTimeCnt1 = 0;
ucKeyLock1 = 1; //自锁按键置位,避免一直触发
ucKeySec = 1; //触发1号键
}
}
}
//
void main()
{
while(1)
{
key();
if(ucKeySec==1)
{
ucKeySec=0; //键值复位
LED=!LED;
}
}
}
//
|
|