c51单片机流水灯编程问题.

开始仿真的时候过10s之后灯就从上往下全部点亮了,一直维持这个状态。

以下是c程序,书上面的,要求点亮一个后熄灭,然后点亮下一个发光二极管,如此循环。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint i)
{ uchar t;
while (i--);
{for (t=0;t<120;t++);
}
}
void main()
{ P1=0xfe;
while(1)
{P1=_crol_(0,1);
delay(500);
}
}

把P1=_crol_(0,1);改为:P1=_crol_(P1,1);

delay函数中while(i--)后面分号去掉。
crol_(0,1)意思是把‘0’循环左移一位,你赋值给P1,P1输出一直都是零,所有的灯自然都是一直亮的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-26
看看我的程序
#include<reg51.h>
#include<intrins.h>
unsigned char temp;
void delay(unsigned int x);
void main()
{
temp=0xfe; /*16进制的表示法,不能用:0eH这种形式了*/
while(1)
{
P1=temp;
delay(1000);
temp=_crol_(temp,1);

}
}
void delay(unsigned int x)
{
unsigned char j;
while(x--)
{
for(j=200;j>0;j--)
{
;
}
}
}
在主函数中你的P1=_crol_(0,1);是错误的,应该像我一样设置一个变量temp本回答被网友采纳
第2个回答  2012-08-26
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

void delay(uint b )
{
uint i,j;
while (b--);
for (i=110;i>0;i--)
for(j=110;j>0;j--) ;
}
uchar aa;
void main()
{
aa=0xfe;
while(1)
{
P1=aa;
delay(500);
aa=_crol_(aa,1);
}
}

参照一下吧!
第3个回答  2012-08-27
为什么不用<<
相似回答