標(biāo)題: 流水燈代碼哪里有誤 [打印本頁(yè)]

作者: sunwind001    時(shí)間: 2025-3-23 16:57
標(biāo)題: 流水燈代碼哪里有誤
各位大佬,普中51開(kāi)發(fā)板,led共陽(yáng)極,流水燈代碼這樣寫(xiě)為什么不對(duì),效果是全滅

聯(lián)想截圖_20250323165612.png (156.48 KB, 下載次數(shù): 0)

聯(lián)想截圖_20250323165612.png

作者: sunwind001    時(shí)間: 2025-3-23 16:59
把while(1)框架刪除,是全亮而且板子一直響
作者: sunwind001    時(shí)間: 2025-3-23 17:03
延時(shí)函數(shù)那邊已經(jīng)修改過(guò)了
作者: paladina    時(shí)間: 2025-3-24 08:59
用移位操作,你的n=n*2 會(huì)超出0XFF
while(1)
    {
        for(i = 0; i < 7; i++)
        {
            P2 = ~(0x01 << i);
            DelayXms(500);
        }
        
作者: zpwgf    時(shí)間: 2025-3-24 09:30
#include <STC89C5xRC.H>

void DelayXms(unsigned int ms) {
    unsigned int i, j;
    for (i = ms; i > 0; i--)
        for (j = 110; j > 0; j--);
}

void main() {
    unsigned char i;
    while(1) {
        for(i=0; i<8; i++) {
            P2 = 0xFF - (0x01 << i); // 逐位點(diǎn)亮
            DelayXms(500);
        }
    }
}
1.查看一下你的LED端口是否為P2等等,確認(rèn)硬件端口正確
2.參數(shù)類(lèi)型確認(rèn)
3.端口移位操作
作者: 夏至淺淺落    時(shí)間: 2025-3-24 09:30
呃。我猜你是想表達(dá)是的P2 = 0XFF << 1 ?
作者: mirvv    時(shí)間: 2025-3-24 09:40
sunwind001 發(fā)表于 2025-3-23 16:59
把while(1)框架刪除,是全亮而且板子一直響

你的unsigned char n = 1,是全局變量,不釋放內(nèi)存,你這一直循環(huán)的話,char類(lèi)型最大256,多循環(huán)幾次就char就溢出了就是這個(gè)變量n錯(cuò)了;
作者: 188610329    時(shí)間: 2025-3-24 09:46
n = 0,   n*2 依然 = 0,   n*2*2*2*2……  也依然是 0

從頭到尾 n = 0,   從頭得尾 P2 = 0xff
你希望 怎么流水燈??
作者: xiaobendan001    時(shí)間: 2025-3-24 10:05
188610329 發(fā)表于 2025-3-24 09:46
n = 0,   n*2 依然 = 0,   n*2*2*2*2……  也依然是 0

從頭到尾 n = 0,   從頭得尾 P2 = 0xff

人家N不是初始化=1了?
作者: wangxiangtan    時(shí)間: 2025-3-24 10:22
你還是很有想象力的,不過(guò)要注意N的階乘容易溢出
作者: xiaobendan001    時(shí)間: 2025-3-24 10:23
代碼原理大概沒(méi)啥問(wèn)題。但是你延時(shí)函數(shù)的參數(shù)沒(méi)有使用。就是調(diào)用的時(shí)候的500沒(méi)起作用。顏色400周期后退出,400周期很快的,就是可能一瞬間就完成了8個(gè)LED的流水,你沒(méi)看到。實(shí)際上是7個(gè),因?yàn)槟爿敵鰰r(shí)是先N*2的。這樣第一個(gè)實(shí)際上是沒(méi)有亮過(guò)的。如5樓那樣改下延時(shí)讓參數(shù)起作用試試看。
而且你聲明是全局的NTIME變量,然后在形參里面也用了NTIME,并且沒(méi)有指明類(lèi)型。這習(xí)慣不好,容易混淆。不指定類(lèi)型的參數(shù)會(huì)是什么類(lèi)型?另外這種編譯時(shí)不會(huì)有警告嗎?如果是你聲明的CHAR類(lèi)型那么你傳給他一個(gè)500是超了范圍的。
作者: zxcscm    時(shí)間: 2025-3-24 10:24
把最后的i=0改成n=1;
作者: sgq657785    時(shí)間: 2025-3-24 11:58
主要是8次循環(huán)后n沒(méi)有重新置1,后面就溢出了
作者: rundstedt    時(shí)間: 2025-3-26 13:47
第29行i=0無(wú)意義,改成n=1即可。
作者: CQ123    時(shí)間: 2025-3-26 14:12
把最后的i=0改成n=1;
作者: mirvv    時(shí)間: 2025-3-26 16:16
188610329 發(fā)表于 2025-3-24 09:46
n = 0,   n*2 依然 = 0,   n*2*2*2*2……  也依然是 0

從頭到尾 n = 0,   從頭得尾 P2 = 0xff

n = 1;啊

作者: sunwind001    時(shí)間: 2025-3-26 20:11
CQ123 發(fā)表于 2025-3-26 14:12
把最后的i=0改成n=1;

好的,這樣改就可以流水了

作者: sunwind001    時(shí)間: 2025-3-26 20:13
xiaobendan001 發(fā)表于 2025-3-24 10:23
代碼原理大概沒(méi)啥問(wèn)題。但是你延時(shí)函數(shù)的參數(shù)沒(méi)有使用。就是調(diào)用的時(shí)候的500沒(méi)起作用。顏色400周期后退出, ...

我沒(méi)考慮到char的范圍,現(xiàn)在改一改,延時(shí)函數(shù)那邊我已經(jīng)改過(guò)了,把30行和29行換一個(gè)位置就都能流了,感謝
作者: sunwind001    時(shí)間: 2025-3-26 20:18
mirvv 發(fā)表于 2025-3-24 09:40
你的unsigned char n = 1,是全局變量,不釋放內(nèi)存,你這一直循環(huán)的話,char類(lèi)型最大256,多循環(huán)幾次就cha ...

請(qǐng)問(wèn)這應(yīng)該怎么釋放內(nèi)存
作者: sunwind001    時(shí)間: 2025-3-26 20:20
xiaobendan001 發(fā)表于 2025-3-24 10:23
代碼原理大概沒(méi)啥問(wèn)題。但是你延時(shí)函數(shù)的參數(shù)沒(méi)有使用。就是調(diào)用的時(shí)候的500沒(méi)起作用。顏色400周期后退出, ...

沒(méi)有警告,我是想在最開(kāi)頭聲明nTime,延時(shí)函數(shù)直接用我聲明的nTime,這樣不可以嗎
作者: keemee    時(shí)間: 2025-3-27 01:43
mirvv 發(fā)表于 2025-3-24 09:40
你的unsigned char n = 1,是全局變量,不釋放內(nèi)存,你這一直循環(huán)的話,char類(lèi)型最大256,多循環(huán)幾次就cha ...

一次定義全局變量,多次使用并不會(huì)無(wú)限增加內(nèi)存占用
作者: keemee    時(shí)間: 2025-3-27 01:46
延時(shí)函數(shù)內(nèi)部沒(méi)有使用傳進(jìn)來(lái)的參數(shù),變成了很短的定時(shí)函數(shù)
作者: keemee    時(shí)間: 2025-3-27 01:49
paladina 發(fā)表于 2025-3-24 08:59
用移位操作,你的n=n*2 會(huì)超出0XFF
while(1)
    {

溢出了影響流水燈依次亮,也能亂亮
作者: keemee    時(shí)間: 2025-3-27 01:51
普中的板子,不太懂,不知有沒(méi)有LED流水燈的總開(kāi)關(guān),或者控制芯片
作者: keemee    時(shí)間: 2025-3-27 01:53
188610329 發(fā)表于 2025-3-24 09:46
n = 0,   n*2 依然 = 0,   n*2*2*2*2……  也依然是 0

從頭到尾 n = 0,   從頭得尾 P2 = 0xff

他前面定義時(shí)n=1呀
作者: keemee    時(shí)間: 2025-3-27 01:56
sgq657785 發(fā)表于 2025-3-24 11:58
主要是8次循環(huán)后n沒(méi)有重新置1,后面就溢出了

溢出并不影響亮燈,亂亮而已,關(guān)鍵問(wèn)題不對(duì)
作者: keemee    時(shí)間: 2025-3-27 02:01
data是錯(cuò)的
作者: xiaobendan001    時(shí)間: 2025-3-27 10:33
sunwind001 發(fā)表于 2025-3-26 20:20
沒(méi)有警告,我是想在最開(kāi)頭聲明nTime,延時(shí)函數(shù)直接用我聲明的nTime,這樣不可以嗎

還是要看看書(shū)的,當(dāng)然也可以自己試試看,全局的變量和參數(shù)是不是一個(gè),以及各自的作用范圍
作者: xiaobendan001    時(shí)間: 2025-3-27 10:36
keemee 發(fā)表于 2025-3-27 01:49
溢出了影響流水燈依次亮,也能亂亮

有沒(méi)有可能*2就是被編譯為左移了,事實(shí)上8次后就永遠(yuǎn)都是0了。就是全都滅的狀態(tài)了。樓主并沒(méi)有說(shuō)這個(gè)流水燈只流一次還是一直流。
作者: xiaobendan001    時(shí)間: 2025-3-27 10:36
keemee 發(fā)表于 2025-3-27 01:56
溢出并不影響亮燈,亂亮而已,關(guān)鍵問(wèn)題不對(duì)

為何是亂亮?
作者: 2929299    時(shí)間: 2025-3-27 11:43
為何是亂亮?
作者: rundstedt    時(shí)間: 2025-3-27 17:18
keemee 發(fā)表于 2025-3-27 02:01
data是錯(cuò)的

默認(rèn)就是data,加不加效果一樣,并不是錯(cuò)的。
作者: woliuyuexun    時(shí)間: 2025-3-28 08:22
你還是弄個(gè)豆包AI編程吧,要快很多
作者: az51hei    時(shí)間: 2025-3-30 11:42
12樓說(shuō)得好,在第23行的for開(kāi)始中已經(jīng)重新給i賦值為0了,所以第29行的i=0是多余的,且n應(yīng)該重新賦值才能讓for循環(huán)中語(yǔ)句正常工作,所以把第29行改為n=1就可以實(shí)現(xiàn)流水燈了。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1