最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

当前位置: 主页 > 电子DIY > 单片机 >

单片机LED点阵流水灯的制作 附视频

时间:2014-06-08 19:07来源:未知 作者:admin 点击:

 

 

单片机流水灯

 
 

电路设计:

        图1是单片机最小系统电路;图2是驱动电路。共10路光源DS1~DS10,分别由AT89S52的P0口、P2的高两位驱动;每一路光源由14只高亮LED并联。图2中的D1、D2起到给光源部分降压的作用,这样LED可以不加限流电阻,因为VCC(5V)减去D1、D2、三极管的压降之和后可以保证LED安全地工作。

单片机流水灯

图1  AT89S52单片机最小系统

单片机流水灯

图2  驱动与光源电路

单片机最小系统板是以前做的直接拿来用了,自己做了驱动板:

单片机流水灯

为了不改动单片机最小系统板于是在驱动板上焊上排座,巧妙地实现两块板子间的电气连接:

单片机流水灯

拆开彩灯的外壳,掏空原先的电路,只留下电源部分:

单片机流水灯

将电路板固定在上面:

单片机流水灯

换个角度看,铝散热片上固定的是LM7805稳压块:#p#分页标题#e#

单片机流水灯

再将那10路光源也就是显示面板连接至驱动电路板:

单片机流水灯

软件设计:

        对于此作品,软件上除了实现流水灯的功能就没有其他技巧,但为了尽量使彩灯好看一些,不得不挖空心思想一些新花样。既便如此,一个51芯片也绰绰有余。



/***************************************************
程序名称:单片机流水灯
简要说明:P0口、P2.0、P2.1输出10路彩灯信号
编    写:JiangX.net
***************************************************/
#include<AT89X52.h>
#define uchar unsigned char
#define uint unsigned int			
sbit lie1=P0^6;
sbit lie2=P0^5;
sbit lie3=P0^4;
sbit lie4=P0^3;
sbit lie5=P0^2;
sbit lie6=P0^1;

/*****(n)ms延时子程序*****/
void delayms(uint n)
{
	while(n--)
	{
		uchar i;
		for(i=0;i<125;i++);
	}	
}

/*****开机画面*****/
void kaiji(void)
{
	P0=P2=0xff;
	delayms(2000);
	P0=P2=0x00;
	delayms(200);
	P0=P2=0xff;
	delayms(200);
	P0=P2=0x00;
	delayms(200);
	P0=P2=0xff;
	delayms(200);
	P0=P2=0x00;
	delayms(200);
	P0=P2=0xff;
	delayms(200);
	P0=P2=0x00;
	delayms(200);
	P0=P2=0xff;
	delayms(200);
	P0=P2=0x00;
	delayms(200);
	P0=P2=0xff;
	delayms(200);
	P0=P2=0x00;
	delayms(200);
}

/*****流水显示*****/
void liushui1(void)
{
	uchar temp0,i;
	temp0=0x01;
	for(i=0;i<7;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}
}

void liushui2(void)
{
	uchar temp0,i;
	temp0=0x03;
	for(i=0;i<6;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}
}

void liushui3(void)
{
	uchar temp0,i;
	temp0=0x07;
	for(i=0;i<5;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}
}

void liushui4(void)
{
	uchar temp0,i;
	temp0=0x0f;
	for(i=0;i<4;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}
}

void liushui5(void)
{
	uchar temp0,i;
	temp0=0x1f;
	for(i=0;i<3;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}
}

void liushui6(void)
{
	uchar temp0,i;
	temp0=0x3f;
	for(i=0;i<2;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}
}

void liushui7(void)
{
	uchar temp0,i;
	temp0=0x7f;
	for(i=0;i<1;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}
}

void liushui8(void)
{
	uchar temp0,i;
	temp0=0x05;
	for(i=0;i<5;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}
}

void liushui9(void)
{
	uchar temp0,i;
	temp0=0x15;
	for(i=0;i<3;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}
}

void liushui10(void)
{
	uchar temp0,i;
	temp0=0x55;
	for(i=0;i<1;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}
}

/*****闪烁1*****/
void shanshuo1(void)
{
	uchar i;
	for(i=0;i<5;i++)
	{
		P2=0xff;
		P0=0x80;
		delayms(200);
		P0=0x7f;
		P2=0x00;
		delayms(200);
	}
	delayms(500);
	P0=P2=0x00;
	delayms(200);
}

/*****跑马显示*****/
void paoma(uchar sudu)
{
	uchar i,j;
	uchar temp1=0x01;
	uchar temp2=0x40;
	for(i=0;i<6;i++)
	{
		P0=temp1;
		delayms(sudu);
		temp1=temp1*2;	
	}
	for(j=0;j<6;j++)
	{
		P0=temp2;
		delayms(sudu);
		temp2=temp2/2;
	}
}

/*****闪烁2*****/
void shanshuo2(void)
{
	uchar i;
	for(i=0;i<7;i++)
	{
		P2=0xff;
		P0=0x80;
		delayms(200);
		P2=0x00;
		P0=0x00;
		delayms(200);
	}
	delayms(500);
}

/*****堆积显示子程序*****/
void duiji1(void)
{
	uchar temp0=0x01,i;
	for(i=0;i<7;i++)
	{
		P0=temp0;
		delayms(200);
		temp0=temp0*2;
	}	
}

void duiji2(void)
{
	uchar temp0=0x01,i;
	for(i=0;i<6;i++)
	{
		P0=temp0;
		lie1=1;
		delayms(200);
		temp0=temp0*2;
	}	
}

void duiji3(void)
{
	uchar temp0=0x01,i;
	for(i=0;i<5;i++)
	{
		P0=temp0;
		lie1=1;
		lie2=1;
		delayms(200);
		temp0=temp0*2;
	}	
}

void duiji4(void)
{
	uchar temp0=0x01,i;
	for(i=0;i<4;i++)
	{
		P0=temp0;
		lie1=1;
		lie2=1;
		lie3=1;
		delayms(200);
		temp0=temp0*2;
	}	
}

void duiji5(void)
{
	uchar temp0=0x01,i;
	for(i=0;i<3;i++)
	{
		P0=temp0;
		lie1=1;
		lie2=1;
		lie3=1;
		lie4=1;
		delayms(200);
		temp0=temp0*2;
	}	
}

void duiji6(void)
{
	uchar temp0=0x01,i;
	for(i=0;i<2;i++)
	{
		P0=temp0;
		lie1=1;
		lie2=1;
		lie3=1;
		lie4=1;
		lie5=1;
		delayms(200);
		temp0=temp0*2;
	}	
}

void duiji7(void)
{
	uchar temp0=0x01,i;
	for(i=0;i<1;i++)
	{
		P0=temp0;
		lie1=1;
		lie2=1;
		lie3=1;
		lie4=1;
		lie5=1;
		lie6=1;
		delayms(200);
		temp0=temp0*2;
	}	
}

/*****闪烁3*****/
void shanshuo3(void)
{
	uchar i;
	for(i=0;i<7;i++)
	{
		P0=0x55;
		delayms(200);
		P0=0x7f;
		delayms(200);
	}
	delayms(500);
}

/*****主程序*****/
void main(void)
{
	P0=P2=0x00;
	while(1)
	{
		kaiji();
		liushui1();
		liushui2();
		liushui3();
		liushui4();
		liushui5();
		liushui6();
		liushui7();
		delayms(500);
		shanshuo1();	  
		paoma(200);
		paoma(150);
		paoma(100);
		paoma(80);
		paoma(50);
		paoma(40);
		paoma(40);
		paoma(30);
		paoma(30);
		paoma(30);
		paoma(30);
		paoma(20);
		paoma(20);
		paoma(20);
		paoma(20);
		paoma(20);
		paoma(20);
		P0=0x41;
		delayms(1000);
		shanshuo2();
		duiji1();
		duiji2();
		duiji3();
		duiji4();
		duiji5();
		duiji6();
		duiji7();
		delayms(500);
		liushui8();
		liushui8();
		liushui8();
		liushui9();
		liushui9();
		liushui9();
		liushui10();
		liushui10();
		liushui10();
		shanshuo3();
	}
}#p#分页标题#e#
(责任编辑:admin)
织梦二维码生成器
顶一下
(3)
60%
踩一下
(2)
40%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容