|
發(fā)布時間: 2019-9-26 09:10
正文摘要:#include <reg52.h> void Delay_ms(int Cnt) { while(Cnt--) { int t=100; & ... |
|
樓主,程序有錯,這個程序如果是低電平點(diǎn)亮,你的P2口全高電平,不管怎么移都是高電平的 應(yīng)該是P2=(P2<<1|0x01) |
| 是不是你在仿真圖里面連錯了線,接線不正確導(dǎo)致的 |
| 程序好像沒問題,估計是硬件的問題 |
taotie 發(fā)表于 2019-9-26 13:12 謝謝你,一開始用的排阻,然后改成普通的電阻就行! |
wulin 發(fā)表于 2019-9-26 19:16 可能我記錯了,好久沒寫過單片機(jī)的程序了,最近才開始折騰 |
| 這個應(yīng)該可以 |
|
#include <reg52.h> #include "intrins.h" void Delay_ms(int Cnt) { while(Cnt--) { int t=100; while(--t); } } void main() { char i; while(1) { P2 = 0xfe; Delay_ms(200); for(i=8;i>0;i--) { P2=_crol_(P2,1); Delay_ms(200); } } } |
|
|
bai_yun_123 發(fā)表于 2019-9-26 16:57 左移后最低位補(bǔ)0 |
| 其實我想問0xff的二進(jìn)制不是1111 1111嘛,左移怎么都是1,為什么燈會亮? |
|
樓主這個程序是從1~8個燈逐漸全亮,如果想1個燈流水改為如下 #include <reg52.h> void Delay_ms(int Cnt) { while(Cnt--) { int t=100; while(--t); } } void main() { while(1) { if(P2==0xff) P2<<=1; else P2=(P2<<1)|0x01; Delay_ms(200); } } |
Proteus 8 仿真可以循環(huán)點(diǎn)亮流水燈led,程序沒問題 ~~。懷疑led的限流電阻沒對!
|
| 開發(fā)板能實現(xiàn),一般仿真是沒有問題的,除非仿真電路與開發(fā)板電路不一致,所以這樣的問題應(yīng)該一同把仿真圖貼出,如果是延時時間的問題,可以把 Delay_ms(200);修改為 Delay_ms(1000);試試 |
| 你說的不是很清楚,如果是用proteus仿真的話,你的延時函數(shù)就有問題 |
稍微修改一下代碼
|
| 開發(fā)板可以的話就是仿真軟件的問題了 |
| 你這個是IO的輸入輸出搞反了吧,全0才是輸出 |
Powered by 單片機(jī)教程網(wǎng)