|
| 樓主不光是不懂不同類型都有多大范圍,函數(shù)調(diào)用也完全理解錯(cuò)誤。想把延遲增加3倍,把Delay里面的參數(shù)增加3倍就可以了,而不要去瞎改已經(jīng)寫好的Delay函數(shù)。 |
| i定義的uchar型,程序執(zhí)行LED=~LED后,就一直在delay中,調(diào)不出來(lái)了 |
| unchar最大值255,要改為int類型,這是一個(gè)延時(shí)函數(shù),參數(shù)要選對(duì)! |
| 我也曾經(jīng)遇到過同樣的問題,不能大于255。 |
| i 被定義為unchar, 變化范圍在0-255, i<150 ,i增加到151后就退出循環(huán)了. i<500, i增加到255后就不能再增加了條件式一直滿足,所以就是死循環(huán). i 定義改為unsigned int ,就又能愉快的玩耍了. |
188610329 發(fā)表于 2021-11-3 16:54 寫法屬實(shí)有問題,如果這個(gè)delayms是一個(gè)延時(shí)固定毫秒級(jí)函數(shù)的話,調(diào)用處應(yīng)該是改寫傳入?yún)?shù)(括號(hào)里的數(shù)值),而不是改這個(gè)for循環(huán),如果多處調(diào)用delayms函數(shù),按樓主的改法,到處都得改了,費(fèi)時(shí)費(fèi)力了,僅僅是測(cè)試的話,無(wú)所謂 |
188610329 發(fā)表于 2021-11-6 22:34 論壇很多提問的都是這樣,有時(shí)候真的懶得回復(fù)。這個(gè)帖子很早就看到了,一直沒有回復(fù)的興趣。 |
QWE4562012 發(fā)表于 2021-11-6 17:22 說明你雖然上論壇求助, 也只是問問而以。 連答復(fù)都懶得看…… 在5樓已經(jīng)跟你說過為什么是120這個(gè)數(shù)字了,你居然還問…… |
QWE4562012 發(fā)表于 2021-11-6 17:22 你改成60跑一下就知道了。 |
| 這個(gè)變量i用的<120,為什么是120這個(gè)數(shù)字? |
| 這個(gè)變量i用的<120,為什么是120這個(gè)數(shù)字? |
| unsigned char最大數(shù)值255,改成500后會(huì)一直循環(huán),將unsigned char改為unsigned int,就可以了,這是C語(yǔ)言里數(shù)據(jù)類型,建議看一下 |
| 跟我一樣,一開始看不懂拿程序來(lái)改數(shù)值看效果 |
| i的值為255最大,超過之后,數(shù)值無(wú)法確定 |
| 你的那個(gè)定義的變量i是無(wú)符號(hào)字符型,賦給i的值超出這個(gè)這個(gè)變量的取值范圍了。要在0~255之間進(jìn)行選擇 |
| 謝謝網(wǎng)友熱線支持 對(duì)C不會(huì) |
| 溢出了,改成unsigned int i 就行了。那個(gè)i意思就是讓CPU在for循環(huán)里面轉(zhuǎn)圈圈,i就是記了多少圈,超過了范圍就出去了。依次來(lái)達(dá)到延時(shí)目的 |
| 既然是仿真,那么在P1.0接示波器看看一個(gè)波形的時(shí)間是多少。 |
|
因?yàn)椋琲++ 到255之后又變回0,所以, 你的 i 永遠(yuǎn)小于500,因此,for(i=0;i<500;i++) 可以近似的看成 while(1); 進(jìn)了循環(huán)之后不會(huì)出來(lái)。程序就卡死在那里了。 最后,這個(gè)帶參delayms 應(yīng)該是計(jì)算過的,看上去是12T的單片機(jī) 配合前面的while 延時(shí)1ms 就需要 for 120 次。所以就算你要改也不應(yīng)該改 i 這里,而應(yīng)該改 Delayms() 括號(hào)里的數(shù)字才對(duì)。 |
| 建議,學(xué)習(xí)一下各種類型得定義,以及范圍 |
| unsigned char范圍0~255 |
| 因?yàn)槟愕膇最大255 |
Powered by 單片機(jī)教程網(wǎng)