|
电路设计: 图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) |
























