找回密码
 立即注册

QQ登录

只需一步,快速开始

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

去掉while(1)循环后就只能按住键盘才能使LED发光 走过路过的大哥帮忙看看

  [复制链接]
跳转到指定楼层
楼主
ID:156852 发表于 2017-4-23 18:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么去掉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();
}
} */




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:47286 发表于 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才能亮)
                        }
                }
        }
}
回复

使用道具 举报

板凳
ID:192838 发表于 2017-4-23 20:53 | 只看该作者
我来看看 新手
回复

使用道具 举报

地板
ID:192841 发表于 2017-4-23 21:02 | 只看该作者
你那个程序就像遥控器的按钮,检测到放开才就会中断
回复

使用道具 举报

5#
ID:156852 发表于 2017-4-23 21:20 | 只看该作者
Herscon 发表于 2017-4-23 21:02
你那个程序就像遥控器的按钮,检测到放开才就会中断

但是为什么把这个K1()这个函数放到while(1)中就算松手也会保持发光,讲道理while(1)中如果没有进行第二次按键,也不会触发K1()这个子函数
回复

使用道具 举报

6#
ID:156852 发表于 2017-4-23 21:22 | 只看该作者
dzbj 发表于 2017-4-23 20:47
拷贝回去试试这样行不行

#include

我的意思是在去掉while(1)这个循环时松手后led会熄灭,但是把K1()这个子函数放到while(1)中就算松手也不会熄灭。实在想不明白
回复

使用道具 举报

7#
ID:47286 发表于 2017-4-23 21:39 | 只看该作者
qiran1818 发表于 2017-4-23 21:20
但是为什么把这个K1()这个函数放到while(1)中就算松手也会保持发光,讲道理while(1)中如果没有进行 ...

那你没写全啊 K1这个函数跟哪呢 根本没看见啊
回复

使用道具 举报

8#
ID:192871 发表于 2017-4-23 22:20 | 只看该作者
遇同问题
回复

使用道具 举报

9#
ID:191913 发表于 2017-4-24 08:28 | 只看该作者
可能是延时消抖的问题,在延时消抖中,检测不到按键状态
回复

使用道具 举报

10#
ID:151348 发表于 2017-4-24 15:58 | 只看该作者
1楼正解,关键是 while(!key);   //松手消抖
回复

使用道具 举报

11#
ID:192523 发表于 2017-4-24 16:40 | 只看该作者
主程序没有while(1)是不完整的,那样程序就只会执行一次,必须要一个while(1)
回复

使用道具 举报

12#
ID:187614 发表于 2017-4-24 19:55 | 只看该作者
主程序只执行了一遍,LED不会反转,把MAIN()中的代码写到while(1){    }中
回复

使用道具 举报

13#
ID:193421 发表于 2017-4-25 14:59 | 只看该作者
主程序没有while(1),那样程序就只会走一次,打多程序都要while(1)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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