#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 ()
{
if(P2.0==1)
{
P1=ox7f;
while (1)
{
delay(500);
P1=cror(P1,1)
}
}
if(P2.0==0)
{
P1=oxfe;
while (1)
{
delay(500);
P1=crol(P1,1)
}
}
}
当 P2.0 口为高电平时(P2.0==1),程序会设置 P1 口为 ox7f,并在一个无限循环中每隔 500ms 将 P1 口的最高位循环移位,实现从左往右流动的效果。
当 P2.0 口为低电平时(P2.0==0),程序会设置 P1 口为 oxfe,并在一个无限循环中每隔 500ms 将 P1 口的最低位循环移位,实现从右往左流动的效果。
在这个程序中, delay() 函数是一个延时函数,用于控制流水灯的间隔。cror() 和 _crol()_是两个移位函数,cror是循环右移,crol是循环左移。
注意,这段代码使用了一些编译器专用的函数和宏定义,如 reg51.h,intrins.h,cror(), crol()。