标题:
关于C语言for循环的使用问题
[打印本页]
作者:
这一生只为你
时间:
2020-9-24 20:26
标题:
关于C语言for循环的使用问题
这两天闲着没事干,改装电车的后尾灯,电路搭好了,写了一段程序,主要想要达到的目的就是:正常行驶的时候较低亮度,刹车时先闪烁几次,然后高亮。放开刹车以后恢复低亮度。程序中使用了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;
}
作者:
神蜂
时间:
2020-9-24 21:22
如果Break里有 i 的话。有这种现象。
所以最好把源码发全。否则一段源码,很难判断正确的。
作者:
NINE
时间:
2020-9-24 21:38
我和楼上的想法有点不同,你看他两个程序,
for 程序用的 i 是局部变量
while 程序用的 i 是全局变量
作者:
kxcuser
时间:
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
作者:
压着我头发啦
时间:
2020-9-25 10:10
我理解第一个程序,for前 i 清零。如果有大循环,就回一直进for。第二个程序while这块i没有清零,不会在进入这几个周期
作者:
wlefa
时间:
2020-9-25 11:01
这个还真是i设置为局部和全局变量的问题;第一个程序i采用局部变量,声明i后赋值为0进入for循环跳出后,i舍弃,程序二次循环就又重新声明i后赋值为0再次进入for循环,如此重复的闪;第二个程序i设为全局变量后,第一次进入while循环跳出后,i=6;程序二次进入后,i值为6,不会再次进入while循环,因此灯就不会闪,只有等刹车开关放开后,i清零后,才能再次进入
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1