功能:
0.本系统采用STC89C52作为单片机
1.彩灯由8个LED组成,喷泉由5V小水泵模拟
2.音乐信号通过ADC0832采集到单片机,单片机通过信号幅度的大小来调节喷泉和彩灯的工作,从而实现音乐喷泉彩灯节奏协同
4.采用DC002作为电源接口可直接输入5V给整个系统供电
原理图:
PCB :
主程序:
#include <reg52.h>
#include "main.h"
#include "tlc0832.h"
unsigned char dat;
unsigned char h1;
void main()
{
while(1)
{
Fountain();
}
}
void Delay(unsigned char z)
{
unsigned char y;
for (; z > 0; z--)
for (y = 5; y > 0; y--)
;
}
void Fountain(void)
{
dat = ReadADC(AIN0_GND); //检测AD值,音量越大值越小
dat = (dat>128)?128:dat; //去掉大于128的数据
dat = 128 - dat; //处理AD值,以使音量越大,dat值越大
h1 = 128 - dat; //处理h1值
WATERPUMP = 1; //关闭水泵
Delay(h1);
if(h1>40) LED0=1; else LED0=0; //ad值对比 点亮相应的灯
if(h1>50) LED1=1; else LED1=0; //ad值对比 点亮相应的灯
if(h1>60) LED2=1; else LED2=0; //ad值对比 点亮相应的灯
if(h1>70) LED3=1; else LED3=0; //ad值对比 点亮相应的灯
if(h1>80) LED4=1; else LED4=0; //ad值对比 点亮相应的灯
if(h1>90) LED5=1; else LED5=0; //ad值对比 点亮相应的灯
if(h1>100) LED6=1; else LED6=0; //ad值对比 点亮相应的灯
if(h1>110) LED7=1; else LED7=0; //ad值对比 点亮相应的灯
WATERPUMP = 0; //开启水泵
Delay(dat+10); //加10是为了使喷泉达到喷发临界值
}
ADC代码:
#include "tlc0832.h"
unsigned char ReadADC(unsigned char channel)
{
unsigned char i=0,value=0,value1=0;
bit SGL;
bit ODD;
switch (channel)
{
case AIN0_AIN1: SGL = 0; ODD = 0; break;
case AIN1_AIN0: SGL = 0; ODD = 1; break;
case AIN0_GND: SGL = 1; ODD = 0; break;
case AIN1_GND: SGL = 1; ODD = 1; break;
}
TLC0832_CLK = 0;
TLC0832_DQ = 1;
TLC0832_CS = 0; //开始
TLC0832_CLK = 1; //第一个上升沿
TLC0832_CLK = 0;
TLC0832_DQ = SGL;
TLC0832_CLK = 1; //第二个上升沿
TLC0832_CLK = 0;
TLC0832_DQ = ODD;
TLC0832_CLK = 1; //第三个上升沿
TLC0832_CLK = 0; //第三个下降沿
TLC0832_DQ = 1;
for (i = 0; i < 8; i++)
{
TLC0832_CLK = 1;
TLC0832_CLK = 0; //开始从第四个下降沿接收数据
value <<= 1;
if (TLC0832_DQ)
value++;
}
for (i = 0; i < 8; i++)
{ //接收校验数据
value1 >>= 1;
if (TLC0832_DQ)
value1 += 0x80;
TLC0832_CLK = 1;
TLC0832_CLK = 0;
}
TLC0832_CS = 1;
TLC0832_CLK = 1;
if (value == value1) //与校验数据比较,正确就返回数据,否则返回0
return value;
else
return 0;
}
仿真演示视频:
https://www.bilibili.com/video/BV1oU4y117Sp/
实物演示视频:
https://www.bilibili.com/video/BV1rN4y1P7mw/