找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4687|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

[求助] 一個(gè)KEY一個(gè)LED閃, ON/OFF功能,關(guān)不掉LED

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:34602 發(fā)表于 2012-5-9 00:06 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

/*---------------------------------------------------------------------------------
功能描述:一個(gè)按鍵1個(gè)LED閃, ON/OFF功能,即按一下LED閃,再按一下LED滅.
---------------------------------------------------------------------------------*/
#include <reg51.h>    
sbit LED = P1^0;            
sbit KEY = P3^2;

void Delay (unsigned int a)             //延時(shí)程序聲明,并聲明變量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)在是一旦按一下按鍵就一直閃, 我折騰了一個(gè)晚上了沒折騰出來.謝謝

[此貼子已經(jīng)被作者于2012-5-9 0:07:38編輯過]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:27080 發(fā)表于 2012-5-11 14:11 | 只看該作者

用一個(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);
  }
 }
}

 

 

回復(fù)

使用道具 舉報(bào)

板凳
ID:24484 發(fā)表于 2012-7-25 20:48 | 只看該作者

樓主給個(gè)說法了

回復(fù)

使用道具 舉報(bào)

地板
ID:24484 發(fā)表于 2012-7-25 20:56 | 只看該作者

老兄 搞定了嗎

搞定了 請賜教  我也有同類的問題 

回復(fù)

使用道具 舉報(bào)

5#
ID:43247 發(fā)表于 2012-7-25 21:05 | 只看該作者
以下是引用longzhiming在2012-5-9 0:06:47的發(fā)言:

/*---------------------------------------------------------------------------------
功能描述:一個(gè)按鍵1個(gè)LED閃, ON/OFF功能,即按一下LED閃,再按一下LED滅.
---------------------------------------------------------------------------------*/
#include <reg51.h>    
sbit LED = P1^0;            
sbit KEY = P3^2;

void Delay (unsigned int a)             //延時(shí)程序聲明,并聲明變量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)在是一旦按一下按鍵就一直閃, 我折騰了一個(gè)晚上了沒折騰出來.謝謝

[此貼子已經(jīng)被作者于2012-5-9 0:07:38編輯過]

藍(lán)色處是個(gè)死循環(huán)所以燈一閃一閃的。應(yīng)該把這個(gè)while去掉,但程序還不完整。

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表