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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

關于C語言if語句的執行分析

查看數: 5013 | 評論數: 25 | 收藏 1
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2021-3-16 18:54

正文摘要:

大家好,有個語句執行順序想不通,如圖,t是按鍵按下累計,當按鍵按到4時,也就是t為4時讓LED4依次自動亮到LED8,但是發現有時不是從LED4開始亮的,按到4后有時亮LED6開始、有時LED7開始、有時LED8開始。這是為什么 ...

回復

ID:777834 發表于 2021-3-17 13:08
不一一回復啦,謝謝大家啦,從大家的回復中知道答案啦
ID:777834 發表于 2021-3-17 13:07
名字不是重點 發表于 2021-3-17 09:37
超過3個的并列IF,請使用Switch

嗯,有時Switch比if不好用
ID:777834 發表于 2021-3-17 13:06
15830266185 發表于 2021-3-17 08:58
做程序還是要嚴謹些,   機器是不會出錯的,這是做開發的根基。這樣的程序架構本身就不合理,要知道延時300 ...

是的,謝謝回復,以后會注意的,會寫規范點,這里寫出來僅交流用,
ID:777834 發表于 2021-3-17 13:01
aking991 發表于 2021-3-17 08:11
你應該用
if(){
}

嗯,正規點還是這樣寫的,謝謝回復
ID:777834 發表于 2021-3-17 13:00
liugao888 發表于 2021-3-17 00:03
if(t==4)不能做成多個,需要把多個整合成一個。按鍵為中斷進入,時間為隨機。如果進入時間剛好停留在多個 ...

嗯,應該是這樣。謝謝回復
ID:777834 發表于 2021-3-17 12:59
liugao888 發表于 2021-3-16 23:50
程序if (t==4)不應該使用4個,需要整合到一個里面。如果你的按鍵中斷進入時間剛好在第一個if (t==4)之前那 ...

謝謝回復,我的理解跟你一樣,發帖跟大家交流下
ID:777834 發表于 2021-3-17 12:57
a4732710 發表于 2021-3-16 23:59
你這樣改while中第5行if((t==4)&&(LED3==0)就會順序執行
或者改按鍵處理方法if……自己想肯定按順序執行了

謝謝回復
ID:777834 發表于 2021-3-17 12:57
liugao888 發表于 2021-3-16 23:50
程序if (t==4)不應該使用4個,需要整合到一個里面。如果你的按鍵中斷進入時間剛好在第一個if (t==4)之前那 ...

謝謝回復,這樣寫是為了驗證自己的想法,正規點不會這樣寫的
ID:777834 發表于 2021-3-17 12:54
a4732710 發表于 2021-3-16 23:45
while(1)順序執行非?斓。你的t=4不知道什么時候出現。比如while順序執行到第二或者第三個t==4后才出現t= ...

我的理解像你一樣,但是程序不是從上邊執行下來的嗎?
ID:777834 發表于 2021-3-17 12:52
547886405 發表于 2021-3-16 23:40
按鍵狀態應該是通過中斷獲取的吧。中斷發生的時候,程序可能正在執行5個t==4語句中的任意一個,這個是隨機 ...

按鍵我用掃描做的程序或延時做的程序,LED也都會跑飛
ID:777834 發表于 2021-3-17 12:50
wulin 發表于 2021-3-16 22:44
假設變量t由外部中斷遞增,且周期遠大于delays_2ms(300),那么LED1、2、3隨t遞增分別點亮,當t=4時,LED4~8 ...

謝謝回復,t在沒有按鍵控制為0時,不能自行清0吧,就算清0也按順序運行完吧,還是不能理解
ID:889178 發表于 2021-3-17 09:48
路過,看了下雖然看不懂,但是幫你頂。
ID:824490 發表于 2021-3-17 09:37
超過3個的并列IF,請使用Switch
ID:798631 發表于 2021-3-17 08:58
做程序還是要嚴謹些,   機器是不會出錯的,這是做開發的根基。這樣的程序架構本身就不合理,要知道延時300對于單片機來說是很長的時間足夠單片機做很多事情了。在此期間你處理了t值就會出現你所說的現象
ID:65956 發表于 2021-3-17 08:11
你應該用
if(){
}
else if(){
}
else{
}
應用這樣的判斷順序就不會出現你說的樣子了,祝你順利
ID:151846 發表于 2021-3-17 07:43
要想每次都從LED4亮起,需要從第5行改起i((t==4)&&(LED3==0))
第6行if((t==4)&&(LED4==0))第7行if((t==4)&&(LED5==0))依此類推
也可以改按鍵處理程序
ID:68800 發表于 2021-3-17 00:03
if(t==4)不能做成多個,需要把多個整合成一個。按鍵為中斷進入,時間為隨機。如果進入時間剛好停留在多個if(t==4)前后就會出現跳過前面的if(t==4)過程。
ID:151846 發表于 2021-3-16 23:59
本帖最后由 a4732710 于 2021-3-17 00:05 編輯

你這樣改while中第5行if((t==4)&&(LED3==0)就會順序執行
或者改按鍵處理方法if……自己想肯定按順序執行了
ID:68800 發表于 2021-3-16 23:50
程序if (t==4)不應該使用4個,需要整合到一個里面。如果你的按鍵中斷進入時間剛好在第一個if (t==4)之前那么程序會按照你的設計正常進入,而如果中斷進入時間在你的第二個或者第三個第四個中間那么就會出現隨機狀態。
ID:151846 發表于 2021-3-16 23:45
while(1)順序執行非?斓摹D愕膖=4不知道什么時候出現。比如while順序執行到第二或者第三個t==4后才出現t=4。那它肯定在那個if(t==4)執行
ID:892852 發表于 2021-3-16 23:40
按鍵狀態應該是通過中斷獲取的吧。中斷發生的時候,程序可能正在執行5個t==4語句中的任意一個,這個是隨機的,取決于中斷的時間。如果按鍵采用掃描的方式,應該可以規避這個問題。
ID:213173 發表于 2021-3-16 22:44
假設變量t由外部中斷遞增,且周期遠大于delays_2ms(300),那么LED1、2、3隨t遞增分別點亮,當t=4時,LED4~8逐一點亮至全滅。如果t遞增周期小于LED4~8逐一點亮過程,t沒有機會清0,程序跑飛,亮燈隨機停留在LED4~7。要等到t溢出歸0,進入下次循環。單片機玩的就是邏輯與時間,樓主這段代碼的邏輯與時間都存在問題。

ID:151846 發表于 2021-3-16 21:41
程序是按順序執行的
ID:151846 發表于 2021-3-16 21:39
按鍵處理問題
ID:366464 發表于 2021-3-16 21:00
是不是需加延時?

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲导航深夜福利涩涩屋 | 激情婷婷 | 国产成人在线一区二区 | 成人小视频在线观看 | 国产亚洲精品久久久久久牛牛 | 精品国产乱码久久久久久闺蜜 | 亚洲人成一区二区三区性色 | 99视频在线播放 | 久久综合一区二区三区 | 天天爽一爽 | 成人一区二区三区 | 日本高清不卡视频 | 精品免费国产一区二区三区四区 | www.蜜桃av | 亚洲精品久久久久久久久久吃药 | 国产成人免费视频网站高清观看视频 | 久久青 | 亚洲成人一区 | 天天色影视综合 | www312aⅴ欧美在线看 | 亚洲视频一区在线观看 | 国产精品久久久久久久久久 | 欧美在线视频二区 | 午夜精品久久久久久久久久久久 | 蜜桃av人人夜夜澡人人爽 | 高清欧美性猛交 | 波霸ol一区二区 | 免费不卡一区 | 久久精品无码一区二区三区 | 国产精品视频一区二区三区不卡 | 欧美日韩中文字幕 | 国产真实精品久久二三区 | 欧美色综合一区二区三区 | 久久一热| 国产精品一区二区久久精品爱微奶 | av一区二区在线观看 | 欧美一区二区在线观看 | 亚洲综合在线播放 | 成人婷婷| 欧美在线激情 | 欧美色综合一区二区三区 |