基于51单片机的流水灯
流水灯亮法:
1.从左到右依次亮起一个灯
2.从右到左依次亮起一个灯
3.从左到右依次点亮LED灯(前面不熄灭)
4.从右到左依次熄灭LED灯
5.全亮全灭4次循环
6.4个LED闪烁
7.从左到右隔一个灯依次亮起
代码有些繁琐,希望有大佬帮忙简化简化
#include "reg52.h"
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
#define led P2 //定义LED灯所在的位置
void delay(u16 i) //延时函数
{
while(i--);
}
void main()
{
u8 i=0;
while(1)
{
led=0xfe;
delay(20000);
for(i=0;i<7;i++) //从左到右依次亮起一个灯
{
led=_crol_(led,1);
delay(20000);
}
for(i=0;i<7;i++) //从右到左依次亮起一个灯
{
led=_cror_(led,1);
delay(20000);
}
//从左到右依次点亮LED灯 从右到左依次熄灭LED灯
led=0xff;
delay(20000);
led=0xfe;
delay(20000);
led=0xfc;
delay(20000);
led=0xf8;
delay(20000);
led=0xf0;
delay(20000);
led=0xe0;
delay(20000);
led=0xc0;
delay(20000);
led=0x80;
delay(20000);
led=0x00;
delay(20000);
led=0x80;
delay(20000);
led=0xc0;
delay(20000);
led=0xe0;
delay(20000);
led=0xf0;
delay(20000);
led=0xf8;
delay(20000);
led=0xfc;
delay(20000);
led=0xfe;
delay(20000);
led=0xff;
delay(20000);
//全亮全灭4次循环
led=0x00;
delay(20000);
led=0xff;
delay(20000);
led=0x00;
delay(20000);
led=0xff;
delay(20000);
led=0x00;
delay(20000);
led=0xff;
delay(20000);
led=0x00;
delay(20000);
led=0xff;
delay(20000);
//4个LED闪烁
led=0xf0;
delay(20000);
led=0x0f;
delay(20000);
led=0xf0;
delay(20000);
led=0x0f;
delay(20000);
led=0xf0;
delay(20000);
led=0x0f;
delay(20000);
led=0xf0;
delay(20000);
led=0x0f;
delay(20000);
//从左到右隔一个灯依次亮起
led=0xfe;
for(i=0;i<7;i++)
{
led=_crol_(led,2);
delay(20000);
}
}
}
本人萌新一枚,刚接触单片机不久,写这篇文章是希望给和我一样正在学习单片机的同学一点点参考和启发,也希望有大佬来指点指点,谢谢!