找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4010|回复: 4
打印 上一主题 下一主题
收起左侧

[求助] 一个KEY一个LED闪, ON/OFF功能,关不掉LED

[复制链接]
跳转到指定楼层
楼主
ID:34602 发表于 2012-5-9 00:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

/*---------------------------------------------------------------------------------
功能描述:一个按键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编辑过]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:27080 发表于 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);
  }
 }
}

 

 

回复

使用道具 举报

板凳
ID:24484 发表于 2012-7-25 20:48 | 只看该作者

楼主给个说法了

回复

使用道具 举报

地板
ID:24484 发表于 2012-7-25 20:56 | 只看该作者

老兄 搞定了吗

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

回复

使用道具 举报

5#
ID:43247 发表于 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去掉,但程序还不完整。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表