标题: 去掉while(1)循环后就只能按住键盘才能使LED发光 走过路过的大哥帮忙看看 [打印本页]

作者: qiran1818    时间: 2017-4-23 18:35
标题: 去掉while(1)循环后就只能按住键盘才能使LED发光 走过路过的大哥帮忙看看
为什么去掉while(1)循环后就只能按住键盘才能使LED发光,松手后就熄灭了。#include <reg52.h>
#define uint unsigned int
sbit key=P3^1;     //独立键盘
sbit led=P2^0;      //led
void delay(uint z)  //延时函数
{
while(z--);


}
void main()
{
if(key==0)   //消抖
{
delay(1000);    //延时
     if(key==0)
         {
          led=~led;   //点亮led
         }
  }
while(!key);   //松手消抖
}


/*void main()
{
  while(1)
{
   k1();
}
} */





作者: dzbj    时间: 2017-4-23 20:47
本帖最后由 dzbj 于 2017-4-23 20:49 编辑

拷贝回去试试这样行不行

#include <reg52.h>
#define uint unsigned int

sbit key=P3^1;     //独立键盘
sbit led=P2^0;      //led

void delay(uint z)  //延时函数
{
        while(z--);
}

void main()
{
        while(1)
        {
                if(key==0)   //消抖
                {
                        delay(1000);    //延时
                        if(key==0)
                        {
                                while(!key);   //松手消抖
                                led=1;   //点亮led(如果你是灌电流 这里就应该是0才能亮)
                        }
                }
        }
}
作者: 索拉卡    时间: 2017-4-23 20:53
我来看看 新手
作者: Herscon    时间: 2017-4-23 21:02
你那个程序就像遥控器的按钮,检测到放开才就会中断
作者: qiran1818    时间: 2017-4-23 21:20
Herscon 发表于 2017-4-23 21:02
你那个程序就像遥控器的按钮,检测到放开才就会中断

但是为什么把这个K1()这个函数放到while(1)中就算松手也会保持发光,讲道理while(1)中如果没有进行第二次按键,也不会触发K1()这个子函数
作者: qiran1818    时间: 2017-4-23 21:22
dzbj 发表于 2017-4-23 20:47
拷贝回去试试这样行不行

#include

我的意思是在去掉while(1)这个循环时松手后led会熄灭,但是把K1()这个子函数放到while(1)中就算松手也不会熄灭。实在想不明白
作者: dzbj    时间: 2017-4-23 21:39
qiran1818 发表于 2017-4-23 21:20
但是为什么把这个K1()这个函数放到while(1)中就算松手也会保持发光,讲道理while(1)中如果没有进行 ...

那你没写全啊 K1这个函数跟哪呢 根本没看见啊
作者: fengniaoyan    时间: 2017-4-23 22:20
遇同问题
作者: 天国    时间: 2017-4-24 08:28
可能是延时消抖的问题,在延时消抖中,检测不到按键状态
作者: imxuheng    时间: 2017-4-24 15:58
1楼正解,关键是 while(!key);   //松手消抖
作者: 桂木桂马    时间: 2017-4-24 16:40
主程序没有while(1)是不完整的,那样程序就只会执行一次,必须要一个while(1)
作者: 51Lovers    时间: 2017-4-24 19:55
主程序只执行了一遍,LED不会反转,把MAIN()中的代码写到while(1){    }中
作者: 碎碎念    时间: 2017-4-25 14:59
主程序没有while(1),那样程序就只会走一次,打多程序都要while(1)





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