久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2674|回復: 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#
ID:1049317 發表于 2022-10-26 18:42 | 只看該作者
加1后繼續往下執行,不過由于大循環再次到if時會繼續加1直到不滿足小于200的條件
回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

16#
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国内精品视频免费观看 | 亚洲视频二区 | 99re6热在线精品视频播放 | 欧美日韩精品一区 | 成人毛片视频免费 | 久久一区精品 | 一区二区三区不卡视频 | 日本精品裸体写真集在线观看 | 国产免费一区二区 | 精品一区二区三区不卡 | 久草新在线| 精品欧美一区二区三区久久久 | 男人的天堂亚洲 | 在线免费黄色小视频 | 日韩一二区 | 欧美一区二区三区精品 | 久久久久久久91 | 你懂的在线视频播放 | 中文字幕精品视频 | 免费观看成人av | 亚洲精品一区二区在线 | 九九精品久久久 | 亚洲国产一区在线 | 欧美性另类 | 欧美一区二区三区在线播放 | 欧美网站一区 | 99精品欧美一区二区三区 | 黄色成人在线 | 91在线 | 亚洲精品一区二区冲田杏梨 | av性色 | 日本高清视频在线播放 | 999久久久| 免费看黄色小视频 | jizz中国日本 | 中文字幕在线观看一区二区 | 91一区二区三区在线观看 | 9porny九色视频自拍 | 黄网站涩免费蜜桃网站 | 欧美一级二级三级视频 | 精品欧美一区二区精品久久久 |