//花樣流水燈,拉幕花樣+左移位+右移位+循環左移+循環右移
#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); //循環右移
}
}
}
|