标题: 单片机C语言while(1)如何跳出死循环? [打印本页]

作者: cheney03    时间: 2020-6-2 23:48
标题: 单片机C语言while(1)如何跳出死循环?
main()
{
        lcd_inita();//液晶初始化
        Delay(1, 5);//延时1.5s
        while(1)
        {        
        
               display_clo(255,0,0);//显示红色
                Delay(1 , 5);
                display_clo(0,255,0);//显示绿色
                Delay(1 , 5);
                display_clo(0,0,255);//显示蓝色
                DelayKey(2 , 5);
                clear_all();//清屏
                display_str();//显示字符串
               
        }
}
这是主函数,红绿蓝为测试颜色,最后要显示字符串,如何跳出这个死循环?


作者: cheney03    时间: 2020-6-2 23:58
main()
{     
       int i=1;
       lcd_inita();//液晶初始化
        Delay(1, 5);//延时1.5s
        while(i)
        {        
        
               display_clo(255,0,0);//显示红色
                Delay(1 , 5);
                display_clo(0,255,0);//显示绿色
                Delay(1 , 5);
                display_clo(0,0,255);//显示蓝色
                DelayKey(2 , 5);
                clear_all();//清屏
                display_str();//显示字符串
               --i;
               if(i==0)
                break;
        }
}
这样修改后还是死循环,无法跳出。
作者: Wprogrammer    时间: 2020-6-3 07:03
为什么要跳出   你如果 只要执行一次 就不用while   找到一个合适的跳出条件可以用break
作者: HNZ666    时间: 2020-6-3 08:40
用do while
作者: 烈火    时间: 2020-6-3 08:51
使用baerk可以跳出
作者: f556    时间: 2020-6-3 09:02
删除while(1)就行
作者: 怕怕怕wd    时间: 2020-6-3 09:09
if  ..(字符串)...break(中断)很好用,楼主可以百度一下if  break用法
作者: aking991    时间: 2020-6-3 09:11
main()
{
        lcd_inita();//液晶初始化
        Delay(1, 5);//延时1.5s
        display_clo(255,0,0);//显示红色
        Delay(1 , 5);
        display_clo(0,255,0);//显示绿色
        Delay(1 , 5);
        display_clo(0,0,255);//显示蓝色
        DelayKey(2 , 5);
        clear_all();//清屏
        display_str();//显示字符串
        while(1);
}

main()
{
        uchar flag1=1;        

        lcd_inita();//液晶初始化
        Delay(1, 5);//延时1.5s
        while(1)
        {        
                if(flag1 == 1)
                {        
                        flag1 = 0;
                               display_clo(255,0,0);//显示红色
                        Delay(1 , 5);
                        display_clo(0,255,0);//显示绿色
                        Delay(1 , 5);
                        display_clo(0,0,255);//显示蓝色
                        DelayKey(2 , 5);
                        clear_all();//清屏
                        display_str();//显示字符串
               }
        }
}
以上两种都是只执行一次的方法,仅供参考
作者: benclee    时间: 2020-6-3 09:12
break;可以跳出循环,如果上面死循环不想再进入就是,下面添加一个while(1)
另一种方式,上面不要while(1),在末尾加上while(1),
作者: 适得府君书    时间: 2020-6-3 09:13
其实这个不应该叫死循环。应该是主循环。你如果跳出了这个循环,那么你的程序就结束了。
跳出循环一般是使用C语言关键字break;
最好就是通过某个条件来控制什么时候跳出这个循环。
比如循环次数。大于多少次就跳出循环。
void main()
{
   unsigned char i=0;
   while(1)
  {
     i++;
    if(i>10)
    {
      break;
     }
  }
}
如果在有返回值的函数中还可以用return关键字来跳出循环;
如:
int  getdata()
{
     int n=0;
    while(1)
    {
      ........
      return n;
    }
}
还有其他一些比较少用的方法可以跳出循环。
作者: xxpp2011    时间: 2020-6-3 10:20
把括号里的1改成跳出的条件,当条件==0时跳出循环。
作者: benclee    时间: 2020-6-3 11:04
cheney03 发表于 2020-6-2 23:58
main()
{     
       int i=1;

你这样是没用的。main函数本身就是一个循环函数,会不停的执行。你这样的跳出后,会在进入。如果不想再进入了。在后面再加一条while(1),使程序进入另一个循环出不来就行。
作者: zgh1234    时间: 2020-6-3 14:39
执行break();函数可以跳出循环
作者: cheney03    时间: 2020-6-3 17:07
f556 发表于 2020-6-3 09:02
删除while(1)就行

是的,只要执行一次,删除while循环就可以了。
作者: cheney03    时间: 2020-6-3 17:13
aking991 发表于 2020-6-3 09:11
main()
{
        lcd_inita();//液晶初始化

谢谢,方法可行
作者: jdong    时间: 2020-6-8 16:26
陷入死循环主要是While里的判断语句时是真,所以一直都在做循坏,1改为==0
作者: 木偶zlh    时间: 2020-6-8 17:13
goto  break
作者: 橘猫持明    时间: 2020-6-8 17:35
跳出循环一般是使用C语言关键字break;
作者: 小明明。    时间: 2020-6-8 17:43
cheney03 发表于 2020-6-2 23:58
main()
{     
       int i=1;

用 do while()ya

作者: l834746645    时间: 2020-6-8 21:00
要么使用beak,要么对判断条件进行修改
作者: 桃子君    时间: 2020-6-9 08:18
哈哈,break直接结束循环或者return直接结束main函数
作者: llh558382727960    时间: 2020-6-9 12:26
不想死循环可以不用while(1)吧
作者: 苣茜    时间: 2020-6-9 13:55
内部加一个break就可以了,如果需要条件可以用在条件语句中在break
作者: 苣茜    时间: 2020-6-9 13:57
内部用break就可以,如果需要条件可以把braek嵌套在条件内
作者: 3208    时间: 2020-6-9 15:29
cheney03 发表于 2020-6-2 23:58
main()
{     
       int i=1;

你还--i做什么,把if删掉




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