欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2891|回復: 15
打印 上一主題 下一主題
收起左側

請教C語言if語句執行邏輯問題

  [復制鏈接]
跳轉到指定樓層
樓主
ID:61140 發表于 2022-10-24 15:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
void SpeakerDiDi2(void)
{                                             //以程序每循環一次的時間為延時,蜂鳴器鳴的時間長短可改變i變量的值來調整。
   u8 i;                                     //定義一個8位變量(這里如果單片機運行速度過快或晶振用的較大,可改為16位變量定義)
   Speaker=0;                           //這里蜂鳴器響(一定執行)
   if (i<200)     {i++;}               //如果i小于200,i++。                                                            else if (i=200)  {Speaker=1; i=0;}   //不然如果i=200,蜂鳴器關閉,變量清零。
}


想明白 if(i<200)  {i++;}這里的i++,是程序每掃完一遍加1,還是停在這里一直加到200才轉去執行下一句。
我想實現的意思是,程序運行一遍i才加1,i=200就相當于程序運行了200次,使用程序循環變量次的時間做延時,又不太影響系統其它程序運行。
本人初學菜鳥,多謝各位大神。








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

使用道具 舉報

沙發
ID:25310 發表于 2022-10-24 17:18 | 只看該作者
加一次就出去了,直到滿足條件i>=200就不循環了。
回復

使用道具 舉報

板凳
ID:624769 發表于 2022-10-24 17:32 | 只看該作者
你需要了解:
for(i=0;i<200;i++){;}  的另一種寫法:  for(;i<200;){i++;}

已經了解:
if(i<200)  {i++;}

for(;i<200;){i++;}
的區別。
回復

使用道具 舉報

地板
ID:61140 發表于 2022-10-24 18:55 | 只看該作者
pcbboy 發表于 2022-10-24 17:18
加一次就出去了,直到滿足條件i>=200就不循環了。

感謝您的回復,意思就是說程序掃到這里只加1,然后順序往下執行,下次程序再掃到這里再加1,一直加到200這里就不再循環了么(簡單說就是程序跑了200次,這里才加夠是么)
回復

使用道具 舉報

5#
ID:1007932 發表于 2022-10-24 22:58 | 只看該作者
一步步來
void SpeakerDiDi2(void)
{
u16 i;  //整點報時延時
{
          Speaker=0;//一定執行
    if(i<200)  {i++;}//如果i<200則執行i++;
    Speaker=1;//一定執行
          if(i>0)    {i--;}//如果i>0則執行i--;
}
}
這個函數應該是有問題的,少了循環吧,不然中間的{}沒必要,進一次函數就定義一次i,而且只要i在0<i<200,那i++又i--,執行完了i值不變,而且每次重復定義i,自動賦值為0的話,那每次只有i--不執行,是不是漏了代碼?
回復

使用道具 舉報

6#
ID:592807 發表于 2022-10-25 08:42 | 只看該作者
xiaoyuxinke 發表于 2022-10-24 18:55
感謝您的回復,意思就是說程序掃到這里只加1,然后順序往下執行,下次程序再掃到這里再加1,一直加到200 ...

你的i是局部變量,每次進來都會被初始化一次。你可以百度關鍵字static或者全局變量和局部變量的區別
回復

使用道具 舉報

7#
ID:592807 發表于 2022-10-25 08:43 | 只看該作者
188610329 發表于 2022-10-24 17:32
你需要了解:
for(i=0;i

他需要全局變量或者靜態變量  
回復

使用道具 舉報

8#
ID:64888 發表于 2022-10-25 09:17 來自觸屏版 | 只看該作者
一事無成 發表于 2022-10-24 22:58
一步步來
void SpeakerDiDi2(void)
{

感覺函數實現意思應該和你想得到結果有出入吧。
回復

使用道具 舉報

9#
ID:1034262 發表于 2022-10-25 11:28 | 只看該作者
每運行一次這條語句就+1.for或while循環才是循環加到滿。
回復

使用道具 舉報

10#
ID:25310 發表于 2022-10-25 13:47 | 只看該作者
xiaoyuxinke 發表于 2022-10-24 18:55
感謝您的回復,意思就是說程序掃到這里只加1,然后順序往下執行,下次程序再掃到這里再加1,一直加到200 ...

真的看錯了,你的源程序是一直加到200才退出, 以為你這個是for(;i<200;){i++;} ,其實你這個if(i<200)  {i++;} 就是簡單的條件,小于200就一直加到200才退出。如果這是你的原意,因該要加個延時才有效果:if(i<200)  {i++;  delay();} .
回復

使用道具 舉報

11#
ID:989145 發表于 2022-10-25 16:16 | 只看該作者
for語句是循環語句,if是條件選擇語句,在這里只會執行一次就順延往下執行了(也就是i加一次1之后),不會循環掃描。
回復

使用道具 舉報

12#
ID:915005 發表于 2022-10-26 18:17 | 只看該作者
單步調試 用起來 你就能知道 程序是否按照你的意愿在走。。。

另外 提問題時 先把需求說清楚 然后再展示 自己的解決方案 這樣人家才知道你的解決方案正確與否 說實在的 你的問題 我看起來 就是一頭霧水 無法明白
回復

使用道具 舉報

13#
無效樓層,該帖已經被刪除
14#
ID:1049317 發表于 2022-10-26 18:42 | 只看該作者
加1后繼續往下執行,不過由于大循環再次到if時會繼續加1直到不滿足小于200的條件
回復

使用道具 舉報

15#
ID:875095 發表于 2022-10-26 21:58 | 只看該作者
i++ =( i = i + 1);
回復

使用道具 舉報

16#
ID:61140 發表于 2022-10-27 08:39 | 只看該作者
2tafvw 發表于 2022-10-26 18:42
加1后繼續往下執行,不過由于大循環再次到if時會繼續加1直到不滿足小于200的條件

感謝您的回復,我可不可以認為,其實這樣的延時并不占用單片機多少時間,
回復

使用道具 舉報

17#
ID:61140 發表于 2023-3-11 14:36 | 只看該作者
一事無成 發表于 2022-10-24 22:58
一步步來
void SpeakerDiDi2(void)
{

我是新手,不是漏了,是沒寫好,是這樣的,您說的沒錯,感謝您的支持!代碼重新寫過。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表