本人菜鳥,各位大神幫忙找一下問題,我自己找了兩天沒有發現問題點。
題目:8個發光管間隔200ms由上至下,再由下至上,再重復一次,然后全部熄滅再以300ms間隔全部閃爍5次。重復此程序。
問題,我的代碼只會點亮第一個led,然后就一直亮著不動。
單片機是89C51,晶振頻率11.0592MHz
代碼如下,編譯無報錯。
[/code]#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar aa;
void delay(uint a);
void main()
{
uchar i,j,k;
while(1)
{
for(i=0;i<3;i++)
{
aa=0xfe;
for(j=0;j<7;j++)
{
P1=aa;
delay(200);
aa=_crol_(aa,1);
}
aa=0x7f;
for(k=0;k<8;k++)
{
P1=aa;
delay(200);
aa=_cror_(aa,1);
}
}
P1=0xff;
for(j=0;j<10;j++)
{
P1=~P1;
delay(300);
}
}
}
void delay(uint a)
{
uint x,y;
for(x=a;a>0;x--)
for(y=110;y>0;y--);
}
uj5u.com熱心網友回復:
把delay改了以后就可以。改之前的delay
void delay(uint a)
{
uint x,y;
for(x=a;a>0;x--)
for(y=110;y>0;y--);
改之后
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
我感覺這兩個是一樣的,為什么之前的程式不對呢?
uj5u.com熱心網友回復:
for(x=a;a>0;x--)uj5u.com熱心網友回復:
樓上說的對,for(x=a;a>0;x--) ,改為 for(x=a;x>0;x--),條件判斷錯了轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/34639.html
標籤:單片機/工控
