//花样流水灯,拉幕花样+左移位+右移位+循环左移+循环右移
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar y,aa;
void delay(uint i) //延时子函数
{
uint m;
uchar n;
for(m=i;m>0;m--)
for(n=110;n>0;n--);
}
void main()
{
while(1)
{
uchar k;
for(k=0;k<2;k++)
{
P1=0xff;
delay(1000); //拉幕花样
P1=0x7e;
delay(1000);
P1=0x3c;
delay(1000);
P1=0x18;
delay(1000);
P1=0x00;
delay(1000);
P1=0x00;
delay(1000);
P1=0x18;
delay(1000);
P1=0x3c;
delay(1000);
P1=0x7e;
delay(1000);
P1=0xff;
delay(1000);
P1=0; //灯闪烁1次
delay(1000);
P1=0xff;
delay(1000);
}
y=8; // y=8时,不需要里面的for循环就可以,流水灯为1次,改变y的值可以改变亮灯的位数。
while(y--) //这里如果不加while语句,灯会乱跳几下后,就去执行后面的程序了
{ //如果需要多次流水灯,就需要for循环语句,改变K的值就可以改变次数
uchar k;
for(k=0;k<2;k++) //流水循环次数
{
P1 = P1 << 1; //按位左移
delay(1000); //延时
if(P1 == 0) //如果P1等于零,
{ /*则跳到下一步,P1全送高电平*/
P1 = 0xff;
delay(1000);
}
}
}
y=8;
while(y--)
{
uchar k;
for(k=0;k<2;k++) //流水循环次数
{
P1 = P1 >> 1; //按位右移
delay(1000); //延时
if(P1 == 0) //如果P1等于零,
{ /*则跳到下一步,P1全送高电平*/
P1 = 0xff;
delay(1000);
}
}
}
aa=0xfe;
y=8;
while(y--)
{
P1 = aa;
delay(1000);
aa=_crol_(aa,1); //循环左移
}
aa=0x7f;
y=8;
while(y--)
{
P1 = aa;
delay(1000);
aa=_cror_(aa,1); //循环右移
}
}
}
|