用一个计数器,记录按键按下的次数,当按键次数为1时,LED闪,当按键次数为2时,恢复至0,LED灭
/*--------------------------------------------------------------------------------- 功能描述:一个按键1个LED闪, ON/OFF功能,即按一下LED闪,再按一下LED灭. ---------------------------------------------------------------------------------*/ #include <reg51.h> sbit LED = P1^0; sbit KEY = P3^2;
unsigned char wKeyStatus; //定义一个无符号字节,按键计数
void Delay (unsigned int a) //延时程序声明,并声明变量a为无符号整型数据 { unsigned int i; //声明变量i为无符号整型数据 while(a--) { for(i=0;i<600;i++); } }
void KeyDet(void) //按键检测子函数 { if(KEY == 0) //当检测到有按键按下; { Delay(20); //延时防抖; if(KEY == 0)wKeyStatus++; //如果按键还在按下状态,则按键计数加1; if(wKeyStatus == 2)wKeyStatus = 0; //当按键计数为2时,恢复至0; while(KEY == 0); //直到按键释放; } }
void main (void) { // KEY = 1; LED = 1; //置LED初始状态为灭; while (1) //主循环; { KeyDet(); //检测按键 if(wKeyStatus == 0)LED = 1; //如果按键计数为0,LED灭; else if(wKeyStatus == 1) //如果按键计数为1,LED闪; { LED = 0; Delay(1000); LED = 1; Delay(1000); } } }
|