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

QQ登錄

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

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

請(qǐng)教C語(yǔ)言if語(yǔ)句執(zhí)行邏輯問(wèn)題

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


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








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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

5#
ID:1007932 發(fā)表于 2022-10-24 22:58 | 只看該作者
一步步來(lái)
void SpeakerDiDi2(void)
{
u16 i;  //整點(diǎn)報(bào)時(shí)延時(shí)
{
          Speaker=0;//一定執(zhí)行
    if(i<200)  {i++;}//如果i<200則執(zhí)行i++;
    Speaker=1;//一定執(zhí)行
          if(i>0)    {i--;}//如果i>0則執(zhí)行i--;
}
}
這個(gè)函數(shù)應(yīng)該是有問(wèn)題的,少了循環(huán)吧,不然中間的{}沒(méi)必要,進(jìn)一次函數(shù)就定義一次i,而且只要i在0<i<200,那i++又i--,執(zhí)行完了i值不變,而且每次重復(fù)定義i,自動(dòng)賦值為0的話,那每次只有i--不執(zhí)行,是不是漏了代碼?
回復(fù)

使用道具 舉報(bào)

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

你的i是局部變量,每次進(jìn)來(lái)都會(huì)被初始化一次。你可以百度關(guān)鍵字static或者全局變量和局部變量的區(qū)別
回復(fù)

使用道具 舉報(bào)

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

他需要全局變量或者靜態(tài)變量  
回復(fù)

使用道具 舉報(bào)

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

感覺(jué)函數(shù)實(shí)現(xiàn)意思應(yīng)該和你想得到結(jié)果有出入吧。
回復(fù)

使用道具 舉報(bào)

9#
ID:1034262 發(fā)表于 2022-10-25 11:28 | 只看該作者
每運(yùn)行一次這條語(yǔ)句就+1.for或while循環(huán)才是循環(huán)加到滿(mǎn)。
回復(fù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

另外 提問(wèn)題時(shí) 先把需求說(shuō)清楚 然后再展示 自己的解決方案 這樣人家才知道你的解決方案正確與否 說(shuō)實(shí)在的 你的問(wèn)題 我看起來(lái) 就是一頭霧水 無(wú)法明白
回復(fù)

使用道具 舉報(bào)

13#
ID:1049317 發(fā)表于 2022-10-26 18:42 | 只看該作者
加1后繼續(xù)往下執(zhí)行,不過(guò)由于大循環(huán)再次到if時(shí)會(huì)繼續(xù)加1直到不滿(mǎn)足小于200的條件
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

15#
ID:61140 發(fā)表于 2022-10-27 08:39 | 只看該作者
2tafvw 發(fā)表于 2022-10-26 18:42
加1后繼續(xù)往下執(zhí)行,不過(guò)由于大循環(huán)再次到if時(shí)會(huì)繼續(xù)加1直到不滿(mǎn)足小于200的條件

感謝您的回復(fù),我可不可以認(rèn)為,其實(shí)這樣的延時(shí)并不占用單片機(jī)多少時(shí)間,
回復(fù)

使用道具 舉報(bào)

16#
ID:61140 發(fā)表于 2023-3-11 14:36 | 只看該作者
一事無(wú)成 發(fā)表于 2022-10-24 22:58
一步步來(lái)
void SpeakerDiDi2(void)
{

我是新手,不是漏了,是沒(méi)寫(xiě)好,是這樣的,您說(shuō)的沒(méi)錯(cuò),感謝您的支持!代碼重新寫(xiě)過(guò)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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