欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DIY心形流水灯

程序员文章站 2022-07-12 23:16:26
...

创作原由:

大多电子爱好者朋友用的40Pin的51单片机做心形流水灯,需要的led量多,焊接时间长,所以本人想着用20Pin的STC11F02E做一个迷你版的心形流水灯。所需led数量少,易焊接,布线。下面给大家介绍这个小制作。有不足的地方可以提出,还望大神指点。(不喜勿喷)

DIY心形流水灯

DIY心形流水灯

从图中可以看出所需元器件:

1.STC11F02E单片机一片

2.LED灯14个,颜色随意。

3.1K电阻14个(上拉电阻,单片机IO口输出很小)

4.电位器(不要也可以,加了调节电压能调节灯亮度,但是电压过小,单片机无法正常工作)

5.USB母口(也可以用DC插座,不过不好焊)

6.自锁开关

7.USB转TTL (PL2302或者CH340)

8.洞洞板7×9cm

9.面包板(用来测试灯泡好坏,加了上拉之后电阻调整)

10.杜邦线(图中没有)

11.漆包线(后面飞线,也可以用杜邦线飞,就是太粗)

大概就这么点元器件,其他焊接工具就不需要说了吧。DIY心形流水灯


STC11F02E引脚图:

DIY心形流水灯

LED和引脚对应关系:

使用P1.0-1.7和P3.0-3.5一共14个引脚。P1.0对应上面中间的LED,其他一次逆时针焊接。也就是下面中间为P1.7。下面中间右边一个为P3.0,继续逆时针。焊接最外圈为GND,VCC在里面。

/**********************/
/******心形流水灯******/
/**********************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]={
0x01,0x02,0x04,0x08,
0x10,0x20,0x40,0x80};
uchar code table2[]={
0x01,0x02,0x04,0x08,
0x10,0x20};
uchar code table3[]={
0x80,0xc0,0xe0,0xf0,
0xf8,0xfc,0xfe,0xff};
uchar code table4[]={
0x00,0x01,0x03,0x07,
0x0f,0x1f,0x3f};
void loudou_0();		   //左右流水递增
void loudou_1();		   //左右流水
void loudou_2();		   //左右流水
void shanshuo();		   //加减速闪烁
void quanliang();		   //全量
void banshan();			   //左右半闪
void liushui_vleft();	   //逆时针加速转
void liushui_vright();	   //顺时针加速转
void liushui_left();	   //逆时针
void liushui_right();	   //顺时针
void delay(uint z)
{
	uint i,j;
	for(i=z;i>0;i--)
		for(j=110;j>0;j--);
}
void main()
{

	while(1)
	{
	loudou_0();
        loudou_1();
	loudou_2();
	loudou_0();
	banshan();
	quanliang();
	shanshuo();
	liushui_right();
	liushui_vright();
	liushui_left();
	liushui_vleft();
	}

} 
/**********************/
/*半闪*/
void banshan()
{ 
	uint x;
	for(x=0;x<=3;x++)
 {
	P1=0xff;
	P3=0x00;
	delay(1000);
	P1=0x81;
	P3=0x3f;
	delay(1000);
  }
}
/**********************/
/**********************/
/*流水左右分往下*/
void loudou_0()
{
	uint i,j,z;
	for(z=1;z<=8;z++)
	{
		i=1;
	  	for(j=6;j>=z;j--)
		{
		   P1=(table1[i])|(table3[z-1]);
		   P3=(table2[j-1])|(table4[z-1]);
		   delay(800);
		   i++;
		}
	}

}

/**********************/
/**********************/
/*流水左右分往下*/
void loudou_2()
{
	uint i,j,z;
for(z=0;z<=1;z++)
{
	i=1;
	P1=0x01;
	delay(600);
  	for(j=6;j>=1;j--)
	{
	   P1=table1[i];
	   P3=table2[j-1];
	   delay(600);
	   i++;
	}
	P3=0x00;
	P1=0x00;
	P1=0x80;
    delay(600);
}
}
/**********************/
/**********************/
/*流水左右分往下*/
void loudou_1()
{
	uint i,j,z;
for(z=0;z<=2;z++)
{
	i=1;
	P1=0xfe;
	delay(600);
  	for(j=6;j>=1;j--)
	{
	   P1=~table1[i];
	   P3=~table2[j-1];
	   delay(600);
	   i++;
	}
	P3=0xff;
	P1=0xff;
	P1=0x7f;
    delay(600);
}
}

/**********************/
/**********************/
/*流水右转*/
void liushui_right()
{
	uint i,j;
//	for(x=0;x<=1;x++)
//	{  
		for(j=6;j>=1;j--)
		{
		   P3=~table2[j-1];
		   P1=0xff;
		   delay(800);
		}
		P3=0x00;
		for(i=8;i>=1;i--)
		{
		   P1=~table1[i-1];
		   P3=0xff;
		   delay(800);
		}
		P1=0x00;
	
//	}
}
/**********************/
/**********************/
/*流水左转*/
void liushui_left()
{
	uint i,j;
//	for(x=0;x<=1;x++)
//	{
		for(i=0;i<=7;i++)
		{
		   P1=~table1[i];
		   P3=0xff;
		   delay(800);
		}
		P1=0x00;
		for(j=0;j<=5;j++)
		{
		   P3=~table2[j];
		   P1=0xff;
		   delay(800);
		}
		P3=0x00;
	
//	}
}
/**********************/
/**********************/
/*流水加速*/
void liushui_vleft()
{
	uint i,j,y;
//	for(x=0;x<=1;x++)
//	{
		y=900;
		for(i=0;i<=7;i++)
		{
		   P1=~table1[i];
		   P3=0xff;
		   delay(y);
		   y=y-100;
		}
		P1=0x00;
		for(j=0;j<=5;j++)
		{
		   P3=~table2[j];
		   P1=0xff;
		   delay(y);
		   y=y+150;
		}
		P3=0x00;	
//	}
}
/**********************/
/**********************/
/*流水加速*/
void liushui_vright()
{
	uint i,j,y;
//	for(x=0;x<=1;x++)
//	{  
		y=900;
		for(j=6;j>=1;j--)
		{
		   P3=~table2[j-1];
		   P1=0xff;
		   delay(y);
		   y=y-100;
		}
		P3=0x00;
		for(i=8;i>=1;i--)
		{
		   P1=~table1[i-1];
		   P3=0xff;
		   delay(y);
		   y=y+150;
		}
		P1=0x00;
	
//	}
}
/**********************/
void quanliang()
{
	   P1=0xff;
	   P3=0xff;
	   delay(1000);
}
/**********************/
void shanshuo()
{
	uint i,j=1000;
	uchar aa=0xff;
	for(i=20;i>0;i--)
	{
		P1=aa;
		P3=aa;
		delay(j);
		j=j-50;
		aa=~aa;
		
	}
		for(i=20;i>0;i--)
	{
		P1=aa;
		P3=aa;
		delay(j);
		j=j+50;
		aa=~aa;
		
	}
}
/**********************/

有什么问题,评论区解答。