永发信息网

C51流水灯编程

答案:3  悬赏:10  手机版
解决时间 2021-04-23 05:47
  • 提问者网友:心牵心
  • 2021-04-22 05:43

能把程序中的两个while的作用都运行起来吗,我只能运行第一个,第二个不行。怎么改能把两个的作用都发挥出来,效果是8个灯从外向内逐一点亮

#include<reg51.h>
#include<math.h>
#include<stdio.h>

delay()
{ long i;
for(i=1;i<40000;i++);
}

main()
{ unsigned char output=0x80;
while(1)
{
while(1)
{ P1=output;
delay();
output>>=1;
output&=0xf0;
if(output==0xf0)output=0x80;
}
while(1)
{ P1=output;
delay();
output<<=1;
output&=0x0f;
if(output==0x0f)output=0x01;
}
}
}

最佳答案
  • 五星知识达人网友:撞了怀
  • 2021-04-22 06:14

呵呵,你那样写第一个while跳不出,误以为是两段代码同时工作吧?帮你改了你那个程序,但是那样的话效果不是同时往中间亮,而是一边先亮到中间,再是另一边亮到中间


while(1)
{


loop:


while(1)
{ P1=output;
delay();
output>>=1;
output&=0xf0;
if(output==0xf0){


output=0x01;


break;
}


}
while(1)
{ P1=output;
delay();
output<<=1;
output&=0x0f;
if(output==0x0f)


{


output=0x80;


goto loop;
}


}
}


以上代码冗余度高,建议直接输出更简便


while(1) //从两边往中间
{
P1=0x81; //点亮小灯
delay(); //延时
P1=0x42;
delay();
P1=0x24; //点亮小灯
delay();
P1=0x18;
delay();
}

全部回答
  • 1楼网友:英雄的欲望
  • 2021-04-22 08:47
倒数第三行“if(output==0x0f)output=0x01;" 为什么是output=0x01的?可能output=0x07都可以吧!
  • 2楼网友:鸠书
  • 2021-04-22 07:19
在第一个while最后用goto跳到第二个while的开头,第二个while最后再用个goto跳到第一个while开头。甚至while都不用写了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯