标题: [求助] 一个KEY一个LED闪, ON/OFF功能,关不掉LED [打印本页]

作者: longzhiming    时间: 2012-5-9 00:06
标题: [求助] 一个KEY一个LED闪, ON/OFF功能,关不掉LED

/*---------------------------------------------------------------------------------
功能描述:一个按键1个LED闪, ON/OFF功能,即按一下LED闪,再按一下LED灭.
---------------------------------------------------------------------------------*/
#include <reg51.h>    
sbit LED = P1^0;            
sbit KEY = P3^2;

void Delay (unsigned int a)             //延时程序声明,并声明变量a为无符号整型数据
{ unsigned int i;                       //声明变量i为无符号整型数据
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); } }} }  //各路高手,我要怎么写才能关掉LED呢? 现在是一旦按一下按键就一直闪, 我折腾了一个晚上了没折腾出来.谢谢

[此贴子已经被作者于2012-5-9 0:07:38编辑过]

作者: hrlzw    时间: 2012-5-11 14:11

用一个计数器,记录按键按下的次数,当按键次数为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);
  }
 }
}

 

 


作者: ydhnhx    时间: 2012-7-25 20:48

楼主给个说法了


作者: ydhnhx    时间: 2012-7-25 20:56

老兄 搞定了吗

搞定了 请赐教  我也有同类的问题 


作者: wyzjoyful    时间: 2012-7-25 21:05
以下是引用longzhiming在2012-5-9 0:06:47的发言:

/*---------------------------------------------------------------------------------
功能描述:一个按键1个LED闪, ON/OFF功能,即按一下LED闪,再按一下LED灭.
---------------------------------------------------------------------------------*/
#include <reg51.h>    
sbit LED = P1^0;            
sbit KEY = P3^2;

void Delay (unsigned int a)             //延时程序声明,并声明变量a为无符号整型数据
{ unsigned int i;                       //声明变量i为无符号整型数据
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); } }}
}  //各路高手,我要怎么写才能关掉LED呢? 现在是一旦按一下按键就一直闪, 我折腾了一个晚上了没折腾出来.谢谢

[此贴子已经被作者于2012-5-9 0:07:38编辑过]

蓝色处是个死循环所以灯一闪一闪的。应该把这个while去掉,但程序还不完整。






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1