1、流水灯功能
所谓流水灯就是8个发光二极管(LED)轮流点亮,周而复始,实现多花样流水灯效果,如:8个发光二极管循环点亮(第①号灯亮、第②号灯亮……第⑧号灯亮,第①号灯亮、第②号灯亮……第⑧号灯亮,……,每次只亮一个灯);8个LED从左到右循环依次点亮(第①号灯亮、第①②号灯亮……第①②③④⑤⑥⑦⑧号灯亮),间隔1s,直到8个灯全亮后,蜂鸣器响一下,然后都熄灭,再又从左到右循环依次点亮,如此循环;同时要做出多种效果
2、PROTEUS中设计的电路图
3、源代码
#include <reg51.h>
#define u8 unsigned char
#define u16 unsigned int
sbit button=P2^0;
u8 k=0;
sbit FM = P2^3;
void delay_ms(int x)
{
int i,j;
for(i=0;i<=x;i++)
for(j=0;j<=110;j++);
}
//从左向右
void light1()
{
unsigned char temp,i;
temp=0xff;
for(i=0;i<9;i++)
{ delay_ms(500);
P0=temp;
delay_ms(500);
temp=temp<<1;
}
TR0=1;
delay_ms(1000);
P0=0xff;
}
//从右向左
void light2()
{
unsigned char temp,i;
temp=0xff;
for(i=0;i<9;i++)
{
delay_ms(500);
P0=temp;
delay_ms(500);
temp=temp>>1;
}
TR0=1;
delay_ms(1000);
P0=0xff;
}
//两个灯一起亮
void light3()
{
unsigned char temp,i;
temp=0xff;
for(i=0;i<5;i++)
{
delay_ms(500);
P0=temp;
delay_ms(500);
temp=temp<<2;
}
TR0=1;
delay_ms(1000);
P0=0xff;
}
//两边向中间
void light4()
{
unsigned char i;
unsigned char *Temp[4];
Temp[0] = 0x7e;
Temp[1] = 0x3c;
Temp[2] = 0x18;
Temp[3] = 0x00;
for(i=0;i<4;i++)
{
delay_ms(500);
P0=Temp[i];
delay_ms(500);
}
TR0=1;
delay_ms(1000);
P0=0xff;
}
void main()
{
FM=1;
TL0 = (8192-1250)%32;
TH0 = (8192-1250)/32;
TMOD = 0X00;
EA=1;//总中断允许
ET0 = 1;
while(1){
light1();
light2();
light3();
light4();
}
}
void time0() interrupt 1
{
TL0 = (8192-1000)%32;
TH0 = (8192-1000)/32;
FM = ~FM;
k++;
if(k==50) {FM=1;k=0;TR0=0;}
}
4、流水灯效果
效果视频展示
问题咨询及项目源码请加群:
QQ群
名称:IT项目交流群
群号:245022761