标题: 关于单片机LED灯循环点亮程序调试问题 [打印本页]

作者: 摇头玩    时间: 2021-5-20 20:37
标题: 关于单片机LED灯循环点亮程序调试问题
为什么我这条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);
}


作者: mffhxa    时间: 2021-5-21 02:00
因为c51必须封闭运行,唯一的一个 while( )必须为while(1)。
作者: wulin    时间: 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);
}
作者: timerzero    时间: 2021-5-21 09:33
似乎与函数的作用域有关,
您的代码怎么看都挺危险
作者: 名字不是重点    时间: 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,所以就掉坑里,出不来了        

作者: kxcuser    时间: 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);
                }
        }         
作者: chz131266    时间: 2021-5-21 11:14
while( )改为while(1)
作者: 摇头玩    时间: 2021-5-21 11:39
mffhxa 发表于 2021-5-21 02:00
因为c51必须封闭运行,唯一的一个 while( )必须为while(1)。

那我去掉for循环,只用while(i<5)循环可以闪五次吗
作者: 摇头玩    时间: 2021-5-21 11:40
kxcuser 发表于 2021-5-21 11:01
你想要跳出来那个i=0你要在while循环外面赋值,不然i=0一直在赋值,那肯定一直在里面循环出不来
  char i; ...

只用while(i<5)循环可以闪五次吗
作者: 菜鸟yc    时间: 2021-5-21 14:18
摇头玩 发表于 2021-5-21 11:40
只用while(i

改为:
  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. }
复制代码

作者: 老董    时间: 2021-5-21 20:26
这个程序运行到i=5的时候跳出了FOR 循环 但是while(i<=5)退出while循环的条件没有具足 还在while中 就又回到了for 循环 i又被置零周而复始。。。。




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