找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于单片机LED灯循环点亮程序调试问题

[复制链接]
跳转到指定楼层
楼主
ID:924630 发表于 2021-5-20 20:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么我这条LED闪烁程序,闪烁五次没有停下来

#include <REGX52.H>
void delay(int t);
void main()
{
        char i;
        while(i<=5)
        {
                for(i=0;i<5;i++)
                {
                P2=0x00;
                delay(60000);
                P2=0xff;
                delay(60000);
                i=i+1;
                }
        }               
}
void delay(int t)
{
        while(--t);
}

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

使用道具 举报

沙发
ID:195446 发表于 2021-5-21 02:00 | 只看该作者
因为c51必须封闭运行,唯一的一个 while( )必须为while(1)。
回复

使用道具 举报

板凳
ID:213173 发表于 2021-5-21 06:27 | 只看该作者
#include <REG52.H>

void delay(unsigned int t);

void main()
{
        char i;
        for(i=0;i<5;i++)
        {
                P2=0x00;
                delay(60000);
                P2=0xff;
                delay(60000);
        }
        while(1);               
}

void delay(unsigned int t)
{
        while(--t);
}
回复

使用道具 举报

地板
ID:917199 发表于 2021-5-21 09:33 | 只看该作者
似乎与函数的作用域有关,
您的代码怎么看都挺危险
回复

使用道具 举报

5#
ID:824490 发表于 2021-5-21 10:14 | 只看该作者
while(i<=5) //i<=5就一直运行
        {
                for(i=0;i<5;i++) //在这里,i被重置为0了
                {                        //以下代码运行5次
                P2=0x00;
                delay(60000);
                P2=0xff;
                delay(60000);
                i=i+1;
                }
        }     
在for循环中只运行5次,但在 while(i<=5)循环中,i老是被 for(i=0;这个置0,所以就掉坑里,出不来了        
回复

使用道具 举报

6#
ID:136485 发表于 2021-5-21 11:01 | 只看该作者
你想要跳出来那个i=0你要在while循环外面赋值,不然i=0一直在赋值,那肯定一直在里面循环出不来
  char i;
        while(i<=5)
        {
                for(;i<5;i++)
                {
                P2=0x00;
                delay(60000);
                P2=0xff;
                delay(60000);
                }
        }         
回复

使用道具 举报

7#
ID:924861 发表于 2021-5-21 11:14 | 只看该作者
while( )改为while(1)
回复

使用道具 举报

8#
ID:924630 发表于 2021-5-21 11:39 | 只看该作者
mffhxa 发表于 2021-5-21 02:00
因为c51必须封闭运行,唯一的一个 while( )必须为while(1)。

那我去掉for循环,只用while(i<5)循环可以闪五次吗
回复

使用道具 举报

9#
ID:924630 发表于 2021-5-21 11:40 | 只看该作者
kxcuser 发表于 2021-5-21 11:01
你想要跳出来那个i=0你要在while循环外面赋值,不然i=0一直在赋值,那肯定一直在里面循环出不来
  char i; ...

只用while(i<5)循环可以闪五次吗
回复

使用道具 举报

10#
ID:711539 发表于 2021-5-21 14:18 | 只看该作者

改为:
  1. #include <REGX52.H>
  2. void delay(int t);
  3. void main()
  4. {
  5.         char i;
  6.         while(i<=5)
  7.         {
  8.                 P2=0x00;
  9.                 delay(60000);
  10.                 P2=0xff;
  11.                 delay(60000);
  12.                 i=i+1;
  13.         }
  14.         while(1);     
  15. }
  16. void delay(int t)
  17. {
  18.         while(--t);
  19. }
复制代码
回复

使用道具 举报

11#
ID:849913 发表于 2021-5-21 20:26 | 只看该作者
这个程序运行到i=5的时候跳出了FOR 循环 但是while(i<=5)退出while循环的条件没有具足 还在while中 就又回到了for 循环 i又被置零周而复始。。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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