单片机流水灯的问题

while(1)
{
led1=0;

for (a=1000;a>0;a--)
for (b=100;b>0;b--);
led1=1;
for (a=1000;a>0;a--)
for (b=100;b>0;b--);
}
为什么会一直循环 书上说值永远为真,所以一直循环
但输出的值是怎么看的 变量那么多 a,b ,LED 。

第1个回答  2014-01-21
我们把这段程序拆开来看
while()

led1

for(a;a;a)
for(b;b;b)

三个部分
首先 while(1)
表达式的值是1 所以永远是逻辑真 而且也没有break跳出循环
所以永远循环 是死循环

led1 一般是某个IO口
不断的输出高电平
延时 再输出低电平 延时
这样不断的重复

两个for循环只是延时
51单片机的时钟频率 一般是用12MHZ左右的晶振
所以
for (a=1000;a>0;a--) for (b=100;b>0;b--);
能延时1秒不到一点本回答被提问者和网友采纳
第2个回答  2014-01-21
学过C语言吧?while(1)括号里面一直为1,也就是真(不是零就是真),{}里面的程序就会一直循环,for语句是用来延时的。led1应该是被定义到了某个管脚,led1=0表示灭,led1=1表示亮。for语句用来延时,这样你就可以看到led灯闪灭了
第3个回答  2014-01-21
for语句只是延时语句,
led1应该是定义接在某个接口上
第4个回答  2014-01-21
for (a=1000;a>0;a--) for (b=100;b>0;b--);
以上这段代码是延时作用,单片机每进行一次运行需要消耗一个时钟周期的时间,假如你的单片机的时钟周期是T,那么上面这段代码就要消耗A=1000*100T的时间,即延时了A 毫秒的时间。
所以这里的a、b都是临时变量,只在for里面才赋值运算的。可以不管。
而控制LED的亮灭就是led1这个变量了,这个变量应该是与单片机的某个控制LeD的端口相对应的,比如P1^0是控制LED的,用led1代替,那么led1是1或0就可以控制亮灭了。

至于为什么会一直循环,那是看while(){}这个函数,括号就写上1,就代表一直是“真”,所以就一直循环了。
相似回答