1、流水燈功能
所謂流水燈就是8個發光二極管(LED)輪流點亮,周而複始,實作多花樣流水燈效果,如:8個發光二極管循環點亮(第①号燈亮、第②号燈亮……第⑧号燈亮,第①号燈亮、第②号燈亮……第⑧号燈亮,……,每次隻亮一個燈);8個LED從左到右循環依次點亮(第①号燈亮、第①②号燈亮……第①②③④⑤⑥⑦⑧号燈亮),間隔1s,直到8個燈全亮後,蜂鳴器響一下,然後都熄滅,再又從左到右循環依次點亮,如此循環;同時要做出多種效果
2、PROTEUS中設計的電路圖
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL4VleNVTUE5UeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL2gzNzADNygTM2ADOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
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;}
}