/*---------------------------------------------------------------------------------
功能描述:一個按鍵1個LED閃, ON/OFF功能,即按一下LED閃,再按一下LED滅.
---------------------------------------------------------------------------------*/
#include <reg51.h>
sbit LED = P1^0;
sbit KEY = P3^2;
void Delay (unsigned int a) //延時程序聲明,并聲明變量a為無符號整型數(shù)據(jù)
{ unsigned int i; //聲明變量i為無符號整型數(shù)據(jù)
while(a--) {for(i=0;i<600;i++);} }
void main (void){
KEY = 1;
LED = 1;
while (1){if(KEY == 0)
{ while(1){LED = 0;
Delay(1000);
LED = 1;
Delay(1000);
while (KEY == 0); } }} } //各路高手,我要怎么寫才能關(guān)掉LED呢? 現(xiàn)在是一旦按一下按鍵就一直閃, 我折騰了一個晚上了沒折騰出來.謝謝
用一個計(jì)數(shù)器,記錄按鍵按下的次數(shù),當(dāng)按鍵次數(shù)為1時,LED閃,當(dāng)按鍵次數(shù)為2時,恢復(fù)至0,LED滅
/*---------------------------------------------------------------------------------
功能描述:一個按鍵1個LED閃, ON/OFF功能,即按一下LED閃,再按一下LED滅.
---------------------------------------------------------------------------------*/
#include <reg51.h>
sbit LED = P1^0;
sbit KEY = P3^2;
unsigned char wKeyStatus; //定義一個無符號字節(jié),按鍵計(jì)數(shù)
void Delay (unsigned int a) //延時程序聲明,并聲明變量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); //延時防抖;
if(KEY == 0)wKeyStatus++; //如果按鍵還在按下狀態(tài),則按鍵計(jì)數(shù)加1;
if(wKeyStatus == 2)wKeyStatus = 0; //當(dāng)按鍵計(jì)數(shù)為2時,恢復(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);
}
}
}
樓主給個說法了
老兄 搞定了嗎
搞定了 請賜教 我也有同類的問題
/*---------------------------------------------------------------------------------
功能描述:一個按鍵1個LED閃, ON/OFF功能,即按一下LED閃,再按一下LED滅.
---------------------------------------------------------------------------------*/
#include <reg51.h>
sbit LED = P1^0;
sbit KEY = P3^2;
void Delay (unsigned int a) //延時程序聲明,并聲明變量a為無符號整型數(shù)據(jù)
{ unsigned int i; //聲明變量i為無符號整型數(shù)據(jù)
while(a--) {for(i=0;i<600;i++);} }
void main (void){
KEY = 1;
LED = 1;
while (1){if(KEY == 0)
{ while(1){LED = 0;
Delay(1000);
LED = 1;
Delay(1000);
while (KEY == 0); } }} } //各路高手,我要怎么寫才能關(guān)掉LED呢? 現(xiàn)在是一旦按一下按鍵就一直閃, 我折騰了一個晚上了沒折騰出來.謝謝
藍(lán)色處是個死循環(huán)所以燈一閃一閃的。應(yīng)該把這個while去掉,但程序還不完整。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |