一般每一个流水灯通过1位来控制,该位为0则点亮,为1则灭。软件中可能用到:
1、操作符<<或>>,比如8位流水灯,初始全灭,然后顺序点亮
uchar x=0xFF,i
for(i=0;i<8;i++)
{
x<<=1; //左移1位,最低位补0
P1 = x; //输出,假设LED接在P1口的8个脚上
delay300ms();//延时300ms,时间可根据效果自定,这个函数需要自己编制,我就不写了
}
2、循环移位函数_crol_、_cror_等(这是8位的,还有16位和32位的,原型在C51的INTRINS.H头文件里)
比如8位流水灯,第一态:前4个亮,后四个灭,第二态右移移位,变成8321灭,7654亮,如此循环
uchar x=0x0F,i
while(1)
{
_cror_(x,1); //x循环右移1位,原最低位移到最高位,0x0F->0x87->0xC3....
P1 = x; //输出,假设LED接在P1口的8个脚上
delay300ms();//延时300ms,时间可根据效果自定,这个函数需要自己编制,我就不写了
}
以上提供两种思路和样例,具体应用灵活掌握,不难吧?
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar temp;
void delay(uchar x)
{
uchar t;
while(1x--) for(t=0;t<120;t++);
}
void main()
{
temp=0xfe;
while(1)
{
P0=temp;
temp=_crol_(temp,1);
delay(500);
}
}