很多人都做过爱心流水灯,网上有很多相关的视频,但是具体分享怎么做的却不多。爱心流水灯对于那些比较懂单片机的人来说很容易做,但是对于单片机初学者,对于不怎么懂单片机的人来说还是有一定难度的。对于单片机初学者来说,做一个爱心流水灯是比较好的,因为电路比较简单,对编程来说有不是很复杂,只是有点繁琐。再者,还可以送人,大多数女生都挺喜欢这个的。真是一举两得!对于没接触过单片机的人来说,爱心流水灯简单易做,自己也不需要编程(我会把程序也附上),直接把现成的程序下载上去就行。做一个这样的东西送人,可以给人眼前一亮的感觉,足以体现你的诚意。我觉得比点心形蜡烛要好得多(点蜡烛谁不会呀,缺少一点“技术含量”)。
网上看到很多相关作品,发现大多数作品都喜欢把单片机放在“爱心”的中间,我觉得这样不是很美观,“爱心”区域就放爱心就行了,这样就比较“单纯”了。我觉得也显得更好看了。
这个爱心流水灯是用STC89C52单片机的24个IO口控制24个LED,实现每个LED的随意亮灭。还配有电子音乐播放功能。音乐播放是由MSP430G2553单片机控制的,电路很简单。都是用C语言编程。
第一步购买元件爱心流水灯部分:1. 6mm红色LED(可以再多买几个备用) 24个2.15cm*20cm万用板 2个3.STC89C52单片机 1片4.单片机插座DIP-40 1个5.自锁式开关1个6.30pF 电容 2个7.10uF电解电容 1个8.12M晶振(或者11.0592M晶振)1个9. 三节电池盒 一个10.按键 2个11.1K电阻 24个12.10K上拉电阻 1个13.导线若干 电子音乐部分:1.MSP430G2553 单片机 1个2.1N4001二极管 2个 (或者用ams1117-3.3V稳压芯片)3.10K电阻 1个4.喇叭 一个5.10uF电解电容
第二步准备工具 基本的电子制作工具: 1、电烙铁一个。 2、焊锡丝若干。 3、松香少许,助焊剂也可以。 4、镊子
第三步焊接 第一步,在万用板上排好要焊接的LED 正面图如下:
第二步,在背面焊接上1k限流电阻:在这里采用贴片电阻,占用地方少。焊接好好后的的样子如下:
第三步,就是把所有的正极连起来,如下:
第四步,焊接单片机最小系统。原理图如下:
正面如下:
反面如下:
第五步,将24个led的阴极连接到单片机引脚上(原理图如下)。
第六步:焊接电源,采用双电源供电,usb供电和外接干电池供电。
第七步:焊接msp430g3553(电子音乐部分)。(可选,要是不想要电子音乐,也可以不焊接这处)
至此,大部分已经焊接完成,最后再焊接两个按键和三个个跳线帽和一个音频接口。其中一个按键的作用是启动流水灯,另一个备用,三个跳线帽其中两个跳线帽可以选择控制两个绿色的led的亮灭(拔掉跳线帽就是是绿色led不发光),另外一个控制喇叭能否发声。下面贴上几幅焊接完成的图片:
为了好看,可以将电路板背面的导线遮挡住,在此处采用再加一个空板子放在下面。
第四步 程序分析
#include"reg52.h"
#include"intrins.h"
#define uint unsigned int
#define uchar unsigned char
uchar f=0;
bit ff=0;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
sbit P00=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
sbit P03=P0^3;
sbit P04=P0^4;
sbit P05=P0^5;
sbit P06=P0^6;
sbit P07=P0^7;
sbit P24=P2^4;
sbit key1=P3^2;
sbit key2=P3^3;
void delay_ms(uint ms)
void offall()//close all led
void onall()//open all led
void ss(uint a)//闪烁 a为闪烁间隔
void jgss(uint a)//间隔闪烁
void bbss(uint a)//半边交替闪烁
void sxss(uint a)//上下交替闪烁
void func1(uint a)//等时流水灯
void func1_1()//等时流水灯
void func2(uint a)//反向等时流水灯
void func2_1()//反向等时流水灯
void func3(uint a)//半双边流水 由上至下
void func3_1()//半双边流水 由上至下
void func4(uint a)//半双边流水 右下至上
void func4_1()//半双边流水 右下至上
void func5(uint a)//正向生长
void func5_11()//正向生长
void func6(uint a)//反向生长
void func6_11()//反向生长
void func5_1(uint a)//两边同时向下生长
void func5_12()//两边同时向下生长
void func6_1(uint a)//两边从下往上同时生长
void func6_12()//两边从下往上同时生长
void func7(uint a)//不亮的灯流水 顺时针
void func7_1()//不亮的灯流水 顺时针
void func8(uint a)//不亮的灯流水 逆时针
void func8_1()//不亮的灯流水 逆时针
void func9(uint a)//正向死亡
void func9_1()//正向死亡
void func10(uint a)//逆向消亡
void func10_1()//逆向消亡
void func12(uint a)//流水灯,留下每4位的第1,2,3个led亮
void func12_1()//流水灯,留下每4位的第1,2,3个led亮
void func13(uint a)//自下而上依次填满
void func13_1()//自下而上依次填满
void func14(uint a)//自上而下依次填满
void func14_1()//自上而下依次填满
void func15(uint a)//P0,P1,P2同时循环左移
void func16(uint a)//P0,P1,P2同时循环左移
void func17(uint a)//P0,P1,P2同时左移
void func18(uint a)//P0,P1,P2同时右移
void func19(uint a)//逐个熄灭
void func20(uint a)//逐个变亮
以上只给出了函数名,具体函数见附录。
在这里一共写了20多个变换花样,只要稍加排列组合,便会出现各种各样的花样。下面分析两个子函数。
void func3(uint a)//半双边流水 由上至下
{
offall();
P1=0xfe;delay_ms(a);
P1=0xfd;P0=0x7f;delay_ms(a);
P1=0xfb;P0=0xbf;delay_ms(a);
P1=0xf7;P0=0xdf;delay_ms(a);
P1=0xef;P0=0xef;delay_ms(a);
P1=0xdf;P0=0xf7;delay_ms(a);
P1=0xbf;P0=0xfb;delay_ms(a);
P1=0x7f;P0=0xfd;delay_ms(a);P1=0xff;
P2=0xfe;P0=0xfe;delay_ms(a);P0=0xff;
P2=0x7d;delay_ms(a);
P2=0xbb;delay_ms(a);
P2=0xd7;delay_ms(a);
P2=0xef;delay_ms(a);P2=0xff;
}
这个是“半双边流水 由上至下”函数,只要改变形参a的值,流水的速度便会改变,视觉效果便会不一样。
void func3_1()//半双边流水 由上至下
{
offall();
P1=0xfe;delay_ms(70);
P1=0xfd;P0=0x7f;delay_ms(70);
P1=0xfb;P0=0xbf;delay_ms(70);
P1=0xf7;P0=0xdf;delay_ms(70);
P1=0xef;P0=0xef;delay_ms(70);
P1=0xdf;P0=0xf7;delay_ms(70);
P1=0xbf;P0=0xfb;delay_ms(50);
P1=0x7f;P0=0xfd;delay_ms(50);P1=0xff;
P2=0xfe;P0=0xfe;delay_ms(50);P0=0xff;
P2=0x7d;delay_ms(50);
P2=0xbb;delay_ms(50);
P2=0xd7;delay_ms(50);
P2=0xef;delay_ms(50);P2=0xff;
}
这个同样是“半双边流水 由上至下”函数,与上面不同之处就是此处流水的速度不是均匀的,只要改变延时函数delay_ms(70);中的70,便可以实现在“流水”时速度不均匀变化。
按照以上两只思路,同一种变换样式,只要改变流水间隔,便可以实现不一样的视觉效果,故以上20多种样式只要稍微改变延时,便可以实现更多的花样。
电子音乐部分的程序是基于msp430g2553的,由于程序比较长,便不再分析。这个“爱心流水灯”加上电子音乐就是锦上添花,不加也行,两者是相对独立的。
电子音乐部分的程序见附件。
原理图.rar
(380.67 KB, 下载次数: 50)