用一個(gè)計(jì)數(shù)器,記錄按鍵按下的次數(shù),當(dāng)按鍵次數(shù)為1時(shí),LED閃,當(dāng)按鍵次數(shù)為2時(shí),恢復(fù)至0,LED滅
/*--------------------------------------------------------------------------------- 功能描述:一個(gè)按鍵1個(gè)LED閃, ON/OFF功能,即按一下LED閃,再按一下LED滅. ---------------------------------------------------------------------------------*/ #include <reg51.h> sbit LED = P1^0; sbit KEY = P3^2;
unsigned char wKeyStatus; //定義一個(gè)無符號字節(jié),按鍵計(jì)數(shù)
void Delay (unsigned int a) //延時(shí)程序聲明,并聲明變量a為無符號整型數(shù)據(jù) { unsigned int i; //聲明變量i為無符號整型數(shù)據(jù) while(a--) { for(i=0;i<600;i++); } }
void KeyDet(void) //按鍵檢測子函數(shù) { if(KEY == 0) //當(dāng)檢測到有按鍵按下; { Delay(20); //延時(shí)防抖; if(KEY == 0)wKeyStatus++; //如果按鍵還在按下狀態(tài),則按鍵計(jì)數(shù)加1; if(wKeyStatus == 2)wKeyStatus = 0; //當(dāng)按鍵計(jì)數(shù)為2時(shí),恢復(fù)至0; while(KEY == 0); //直到按鍵釋放; } }
void main (void) { // KEY = 1; LED = 1; //置LED初始狀態(tài)為滅; while (1) //主循環(huán); { KeyDet(); //檢測按鍵 if(wKeyStatus == 0)LED = 1; //如果按鍵計(jì)數(shù)為0,LED滅; else if(wKeyStatus == 1) //如果按鍵計(jì)數(shù)為1,LED閃; { LED = 0; Delay(1000); LED = 1; Delay(1000); } } }
|