熱門: 51單片機(jī) | 24小時必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時間: 2021-12-21 13:10
正文摘要:3P口24LED跑馬燈程序求助。目前P0和P1口正常,請教增加P2口程序怎么修改呢?還有通電時不要讓LED全部亮要怎么修改呢? 效果: 單片機(jī)程序: #include <REG52.H> unsigned char RunMode; //********** ... |
寫兩個數(shù)組就能搞定的事,不要寫的那么麻煩
|
請教CheckValue = P3&0x32;//按鍵接在p3.1 p3.4 p3.5這個是怎么計(jì)算得來的? 在這里不是按位與運(yùn)算,是直接取地址,0x32就是給這幾個端口賦值1。程序中直接位定義不行嗎 |
請教CheckValue = P3&0x32;//按鍵接在p3.1 p3.4 p3.5這個是怎么計(jì)算得來的? |
簡單的計(jì)數(shù)判斷輕松實(shí)現(xiàn)用不了寫那么多代碼,都是掩人耳目的伎倆。 |
網(wǎng)絡(luò)不安全 發(fā)表于 2021-12-23 12:20 應(yīng)該是你仿真有問題,不支持16位以上,所以,我一共給你寫了兩個版本,8位和32位,但是,最后是32位的不行,8位的版本就OK了。所以,問題應(yīng)該在你的仿真上,如果直接下載到單片機(jī),應(yīng)該兩個都能用。 |
xuyaqi 發(fā)表于 2021-12-23 13:42 10樓程序結(jié)構(gòu)就跟你不一樣,先看懂別人程序。 |
網(wǎng)絡(luò)不安全 發(fā)表于 2021-12-23 12:20 10樓chengxujiegoujiugengnibuyiyang |
lkc8210 發(fā)表于 2021-12-22 12:00 我這個代碼應(yīng)該有問題吧 |
網(wǎng)絡(luò)不安全 發(fā)表于 2021-12-21 16:27 我用我的代碼加上強(qiáng)制轉(zhuǎn)換數(shù)據(jù)類型就可以了不知道為什么你的代碼不行 ![]()
|
1.我這臺電腦只能上網(wǎng),不能測試了。 2.應(yīng)該是這句問題 LEDShow(0x00000001<<LEDIndex); 它實(shí)際只傳遞了24位,你要是改,大致是改函數(shù)void Mode_0(void), 3.在C51你即使用強(qiáng)制類轉(zhuǎn)換也傳不過去(不知新版的是不是可以了。) 4.建議觀察void LEDShow(unsigned long LEDStatus)中temp值是否正確,最好加上&0xFF. void Mode_0(void) { unsigned long LEDStatus; if(LEDDirection) { LEDStatus=0x00000001; LEDStatus<<=LEDIndex; LEDShow(LEDStatus); } else { LEDStatus=0x00800000; LEDStatus <<=LEDIndex; LEDShow(LEDStatus); } if(++LEDIndex == 24) { LEDIndex = 0; LEDDirection = !LEDDirection; } } |
188610329 發(fā)表于 2021-12-22 00:31 您好,我按您的方法修改后,仿真效果和第一次修改的一樣,燈跑到P2口就8只一起亮,然后返回不亮,可能其他地方也有錯吧。附件里有仿真+程序,您方便幫我試試嗎? |
網(wǎng)絡(luò)不安全 發(fā)表于 2021-12-21 20:24 void LEDShow(unsigned long LEDStatus) { unsigned char temp; temp = LEDStatus; P0 = ~temp; temp = LEDStatus >> 8; P1 = ~temp; temp = LEDStatus >> 16; P2 = ~temp; } void Mode_0(void) { if(LEDDirection) LEDShow(0x00000001<<LEDIndex); else LEDShow(0x00800000>>LEDIndex); if(++LEDIndex == 24) { LEDIndex = 0; LEDDirection = !LEDDirection; } } |
求大神幫助,不要石沉大海啦 |
您好,我按您的方法修改了,P2口LED全亮閃一下,不能往返,是不是還有地方需要修改呢?
|
試試這樣改
|
通電不讓LED全亮已解決 |
網(wǎng)絡(luò)不安全 發(fā)表于 2021-12-21 20:24 如果,上面一個有問題的話,用這個: void Mode_0(void) { unsigned char temp; if(LEDDirection) { temp = (0x01 << (LEDIndex & 0x07)); if((LEDIndex>>3) == 0) P0 = ~temp; else P0 = 0xff; if((LEDIndex>>3) == 1) P1 = ~temp; else P1 = 0xff; if((LEDIndex>>3) == 2) P2 = ~temp; else P2 = 0xff; } else { temp = (0x80 >> (LEDIndex & 0x07)); if((LEDIndex>>3) == 2) P0 = ~temp; else P0 = 0xff; if((LEDIndex>>3) == 1) P1 = ~temp; else P1 = 0xff; if((LEDIndex>>3) == 0) P2 = ~temp; else P2 = 0xff; } if(++LEDIndex == 24) { LEDIndex = 0; LEDDirection = !LEDDirection; } } |
Powered by 單片機(jī)教程網(wǎng)