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

电路设计:
图1是单片机最小系统电路;图2是驱动电路。共10路光源DS1~DS10,分别由AT89S52的P0口、P2的高两位驱动;每一路光源由14只高亮LED并联。图2中的D1、D2起到给光源部分降压的作用,这样LED可以不加限流电阻,因为VCC(5V)减去D1、D2、三极管的压降之和后可以保证LED安全地工作。
图1 AT89S52单片机最小系统
图2 驱动与光源电路
单片机最小系统板是以前做的直接拿来用了,自己做了驱动板:
为了不改动单片机最小系统板于是在驱动板上焊上排座,巧妙地实现两块板子间的电气连接:
拆开彩灯的外壳,掏空原先的电路,只留下电源部分:
将电路板固定在上面:
换个角度看,铝散热片上固定的是LM7805稳压块:
再将那10路光源也就是显示面板连接至驱动电路板:
软件设计:
对于此作品,软件上除了实现流水灯的功能就没有其他技巧,但为了尽量使彩灯好看一些,不得不挖空心思想一些新花样。既便如此,一个51芯片也绰绰有余。
/***************************************************程序名称:单片机流水灯简要说明:P0口、P2.0、P2.1输出10路彩灯信号编 写:JiangX.net***************************************************/#includeAT89X52.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;i125;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;i7;i++) { P0=temp0; delayms(200); temp0=temp0*2; }}void liushui2(void){ uchar temp0,i; temp0=0x03; for(i=0;i6;i++) { P0=temp0; delayms(200); temp0=temp0*2; }}void liushui3(void){ uchar temp0,i; temp0=0x07; for(i=0;i5;i++) { P0=temp0; delayms(200); temp0=temp0*2; }}void liushui4(void){ uchar temp0,i; temp0=0x0f; for(i=0;i4;i++) { P0=temp0; delayms(200); temp0=temp0*2; }}void liushui5(void){ uchar temp0,i; temp0=0x1f; for(i=0;i3;i++) { P0=temp0; delayms(200); temp0=temp0*2; }}void liushui6(void){ uchar temp0,i; temp0=0x3f; for(i=0;i2;i++) { P0=temp0; delayms(200); temp0=temp0*2; }}void liushui7(void){ uchar temp0,i; temp0=0x7f; for(i=0;i1;i++) { P0=temp0; delayms(200); temp0=temp0*2; }}void liushui8(void){ uchar temp0,i; temp0=0x05; for(i=0;i5;i++) { P0=temp0; delayms(200); temp0=temp0*2; }}void liushui9(void){ uchar temp0,i; temp0=0x15; for(i=0;i3;i++) { P0=temp0; delayms(200); temp0=temp0*2; }}void liushui10(void){ uchar temp0,i; temp0=0x55; for(i=0;i1;i++) { P0=temp0; delayms(200); temp0=temp0*2; }}/*****闪烁1*****/void shanshuo1(void){ uchar i; for(i=0;i5;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;i6;i++) { P0=temp1; delayms(sudu); temp1=temp1*2; } for(j=0;j6;j++) { P0=temp2; delayms(sudu); temp2=temp2/2; }}/*****闪烁2*****/void shanshuo2(void){ uchar i; for(i=0;i7;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;i7;i++) { P0=temp0; delayms(200); temp0=temp0*2; } }void duiji2(void){ uchar temp0=0x01,i; for(i=0;i6;i++) { P0=temp0; lie1=1; delayms(200); temp0=temp0*2; } }void duiji3(void){ uchar temp0=0x01,i; for(i=0;i5;i++) { P0=temp0; lie1=1; lie2=1; delayms(200); temp0=temp0*2; } }void duiji4(void){ uchar temp0=0x01,i; for(i=0;i4;i++) { P0=temp0; lie1=1; lie2=1; lie3=1; delayms(200); temp0=temp0*2; } }void duiji5(void){ uchar temp0=0x01,i; for(i=0;i3;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;i2;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;i1;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;i7;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(); }}
技术资讯 技术方案 技术应用 技术新品 技术前沿 行业资讯 行业方案 行业应用 行业新品 行业前沿
评论