单片机编程流水灯呢,循环左移,还有补齐那一块看不懂啊,为毛啊?

/*
间隔300ms第一次一个管亮流动一次,
第二次两个管亮流动,依次到8个管亮,
然后重复整个过程。
*/
/*********************************************************/
#include<reg52.h> //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
a=0xfe; //赋初值
for(j=0;j<8;j++)
{
for(i=0;i<8-j;i++) //左移
{
P1=a; //点亮小灯
delay(200); //延时200毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=_crol_(a,j); //补齐,方便下面的左移一位
P1=0xff; //全部关闭
a=a<<1; //左移一位让多一个灯点亮
}
}
}

补齐那句就是将a的值移到最初状态,第一次是回到:0xfe,第二次是回到0xfc......。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-16
可用Proteus 仿真一下就知道为什么
第2个回答  2015-02-15
关注这个问题
相似回答