找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1840|回复: 5
收起左侧

关于C语言for循环的使用问题

[复制链接]
ID:403593 发表于 2020-9-24 20:26 | 显示全部楼层 |阅读模式
这两天闲着没事干,改装电车的后尾灯,电路搭好了,写了一段程序,主要想要达到的目的就是:正常行驶的时候较低亮度,刹车时先闪烁几次,然后高亮。放开刹车以后恢复低亮度。程序中使用了for循环,但是发现达不到想要的效果,上电直接狂闪不止,刹不刹车没反应。改为while以后能用了,达到了想要的效果。难道只是半年多不写就特么的手生了?现把主程序放上来,恳请各位大佬给指点迷津,先谢过了!

这是有问题的C语言程序:


                if(!Break)pwm=20;
                        else
                        {
                                u8 i;
                                for(i=0;i<6;i++)
                                {
                                        pwm=100;
                                        delay_ms(50);
                                        pwm=0;
                                        delay_ms(50);
                                }
                                  pwm=100;
                        }



这是能用的:

                if(!Break)
                {
                        pwm=20;
                        i=0;
                }
                else
                {
                        while(i<6)
                        {
                                pwm=100;
                                delay_ms(50);
                                pwm=0;
                                delay_ms(50);
        
                                i++;
                        }
                        pwm=100;
                }

回复

使用道具 举报

ID:283908 发表于 2020-9-24 21:22 | 显示全部楼层
如果Break里有 i 的话。有这种现象。

所以最好把源码发全。否则一段源码,很难判断正确的。
回复

使用道具 举报

ID:532915 发表于 2020-9-24 21:38 | 显示全部楼层
我和楼上的想法有点不同,你看他两个程序,

for    程序用的 i 是局部变量

while 程序用的 i 是全局变量
回复

使用道具 举报

ID:136485 发表于 2020-9-25 09:37 | 显示全部楼层
知道为什么你的一直闪吗,因为你的i一直在赋值等于0,没有跳出FOR循环,把你的i用全局变量,你可以这样写u8 i;


if(!Break)pwm=20;
else
  {
    //u8 i;
    for(;i<6;i++)
     {
      pwm=100;
      delay_ms(50);
      pwm=0;
      delay_ms(50);
      }
      pwm=100;
   }
为什么你用while就行呢,因为你的i一直在加,大于6肯定跳出,FOR一直在死循环,因为只要一直break等于1,那就会一直闪,原因是i=0这条语句,你可以在跳出的时候把i清0
回复

使用道具 举报

ID:716656 发表于 2020-9-25 10:10 | 显示全部楼层
我理解第一个程序,for前 i 清零。如果有大循环,就回一直进for。第二个程序while这块i没有清零,不会在进入这几个周期
回复

使用道具 举报

ID:380037 发表于 2020-9-25 11:01 | 显示全部楼层
这个还真是i设置为局部和全局变量的问题;第一个程序i采用局部变量,声明i后赋值为0进入for循环跳出后,i舍弃,程序二次循环就又重新声明i后赋值为0再次进入for循环,如此重复的闪;第二个程序i设为全局变量后,第一次进入while循环跳出后,i=6;程序二次进入后,i值为6,不会再次进入while循环,因此灯就不会闪,只有等刹车开关放开后,i清零后,才能再次进入
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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