找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7104|回复: 24
收起左侧

单片机C语言while(1)如何跳出死循环?

  [复制链接]
ID:743654 发表于 2020-6-2 23:48 | 显示全部楼层 |阅读模式
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();//显示字符串
               
        }
}
这是主函数,红绿蓝为测试颜色,最后要显示字符串,如何跳出这个死循环?

回复

使用道具 举报

ID:743654 发表于 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;
        }
}
这样修改后还是死循环,无法跳出。
回复

使用道具 举报

ID:394424 发表于 2020-6-3 07:03 | 显示全部楼层
为什么要跳出   你如果 只要执行一次 就不用while   找到一个合适的跳出条件可以用break
回复

使用道具 举报

ID:342774 发表于 2020-6-3 08:40 来自手机 | 显示全部楼层
用do while
回复

使用道具 举报

ID:744327 发表于 2020-6-3 08:51 | 显示全部楼层
使用baerk可以跳出
回复

使用道具 举报

ID:282850 发表于 2020-6-3 09:02 | 显示全部楼层
删除while(1)就行
回复

使用道具 举报

ID:767465 发表于 2020-6-3 09:09 | 显示全部楼层
if  ..(字符串)...break(中断)很好用,楼主可以百度一下if  break用法
回复

使用道具 举报

ID:65956 发表于 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();//显示字符串
               }
        }
}
以上两种都是只执行一次的方法,仅供参考
回复

使用道具 举报

ID:70069 发表于 2020-6-3 09:12 | 显示全部楼层
break;可以跳出循环,如果上面死循环不想再进入就是,下面添加一个while(1)
另一种方式,上面不要while(1),在末尾加上while(1),
回复

使用道具 举报

ID:367934 发表于 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;
    }
}
还有其他一些比较少用的方法可以跳出循环。
回复

使用道具 举报

ID:452950 发表于 2020-6-3 10:20 | 显示全部楼层
把括号里的1改成跳出的条件,当条件==0时跳出循环。
回复

使用道具 举报

ID:70069 发表于 2020-6-3 11:04 | 显示全部楼层
cheney03 发表于 2020-6-2 23:58
main()
{     
       int i=1;

你这样是没用的。main函数本身就是一个循环函数,会不停的执行。你这样的跳出后,会在进入。如果不想再进入了。在后面再加一条while(1),使程序进入另一个循环出不来就行。
回复

使用道具 举报

ID:768434 发表于 2020-6-3 14:39 | 显示全部楼层
执行break();函数可以跳出循环
回复

使用道具 举报

ID:743654 发表于 2020-6-3 17:07 | 显示全部楼层
f556 发表于 2020-6-3 09:02
删除while(1)就行

是的,只要执行一次,删除while循环就可以了。
回复

使用道具 举报

ID:743654 发表于 2020-6-3 17:13 | 显示全部楼层
aking991 发表于 2020-6-3 09:11
main()
{
        lcd_inita();//液晶初始化

谢谢,方法可行
回复

使用道具 举报

ID:765062 发表于 2020-6-8 16:26 | 显示全部楼层
陷入死循环主要是While里的判断语句时是真,所以一直都在做循坏,1改为==0
回复

使用道具 举报

ID:416289 发表于 2020-6-8 17:13 | 显示全部楼层
goto  break
回复

使用道具 举报

ID:769641 发表于 2020-6-8 17:35 | 显示全部楼层
跳出循环一般是使用C语言关键字break;
回复

使用道具 举报

ID:599619 发表于 2020-6-8 17:43 | 显示全部楼层
cheney03 发表于 2020-6-2 23:58
main()
{     
       int i=1;

用 do while()ya
回复

使用道具 举报

ID:687261 发表于 2020-6-8 21:00 | 显示全部楼层
要么使用beak,要么对判断条件进行修改
回复

使用道具 举报

ID:402946 发表于 2020-6-9 08:18 来自手机 | 显示全部楼层
哈哈,break直接结束循环或者return直接结束main函数
回复

使用道具 举报

ID:771727 发表于 2020-6-9 12:26 | 显示全部楼层
不想死循环可以不用while(1)吧
回复

使用道具 举报

ID:772467 发表于 2020-6-9 13:55 | 显示全部楼层
内部加一个break就可以了,如果需要条件可以用在条件语句中在break
回复

使用道具 举报

ID:772467 发表于 2020-6-9 13:57 | 显示全部楼层
内部用break就可以,如果需要条件可以把braek嵌套在条件内
回复

使用道具 举报

ID:707397 发表于 2020-6-9 15:29 | 显示全部楼层
cheney03 发表于 2020-6-2 23:58
main()
{     
       int i=1;

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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