找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2480|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

關(guān)于C語(yǔ)言for循環(huán)的使用問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:403593 發(fā)表于 2020-9-24 20:26 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這兩天閑著沒(méi)事干,改裝電車(chē)的后尾燈,電路搭好了,寫(xiě)了一段程序,主要想要達(dá)到的目的就是:正常行駛的時(shí)候較低亮度,剎車(chē)時(shí)先閃爍幾次,然后高亮。放開(kāi)剎車(chē)以后恢復(fù)低亮度。程序中使用了for循環(huán),但是發(fā)現(xiàn)達(dá)不到想要的效果,上電直接狂閃不止,剎不剎車(chē)沒(méi)反應(yīng)。改為while以后能用了,達(dá)到了想要的效果。難道只是半年多不寫(xiě)就特么的手生了?現(xiàn)把主程序放上來(lái),懇請(qǐng)各位大佬給指點(diǎn)迷津,先謝過(guò)了!

這是有問(wèn)題的C語(yǔ)言程序:


                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;
                }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:283908 發(fā)表于 2020-9-24 21:22 | 只看該作者
如果Break里有 i 的話(huà)。有這種現(xiàn)象。

所以最好把源碼發(fā)全。否則一段源碼,很難判斷正確的。
回復(fù)

使用道具 舉報(bào)

板凳
ID:532915 發(fā)表于 2020-9-24 21:38 | 只看該作者
我和樓上的想法有點(diǎn)不同,你看他兩個(gè)程序,

for    程序用的 i 是局部變量

while 程序用的 i 是全局變量
回復(fù)

使用道具 舉報(bào)

地板
ID:136485 發(fā)表于 2020-9-25 09:37 | 只看該作者
知道為什么你的一直閃嗎,因?yàn)槟愕膇一直在賦值等于0,沒(méi)有跳出FOR循環(huán),把你的i用全局變量,你可以這樣寫(xiě)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就行呢,因?yàn)槟愕膇一直在加,大于6肯定跳出,F(xiàn)OR一直在死循環(huán),因?yàn)橹灰恢眀reak等于1,那就會(huì)一直閃,原因是i=0這條語(yǔ)句,你可以在跳出的時(shí)候把i清0
回復(fù)

使用道具 舉報(bào)

5#
ID:716656 發(fā)表于 2020-9-25 10:10 | 只看該作者
我理解第一個(gè)程序,for前 i 清零。如果有大循環(huán),就回一直進(jìn)for。第二個(gè)程序while這塊i沒(méi)有清零,不會(huì)在進(jìn)入這幾個(gè)周期
回復(fù)

使用道具 舉報(bào)

6#
ID:380037 發(fā)表于 2020-9-25 11:01 | 只看該作者
這個(gè)還真是i設(shè)置為局部和全局變量的問(wèn)題;第一個(gè)程序i采用局部變量,聲明i后賦值為0進(jìn)入for循環(huán)跳出后,i舍棄,程序二次循環(huán)就又重新聲明i后賦值為0再次進(jìn)入for循環(huán),如此重復(fù)的閃;第二個(gè)程序i設(shè)為全局變量后,第一次進(jìn)入while循環(huán)跳出后,i=6;程序二次進(jìn)入后,i值為6,不會(huì)再次進(jìn)入while循環(huán),因此燈就不會(huì)閃,只有等剎車(chē)開(kāi)關(guān)放開(kāi)后,i清零后,才能再次進(jìn)入
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表