‘壹’ 我想要一段单片机控制音乐喷泉的C语言程序,很急!~谁能帮帮我,谢谢~
#include<reg51.h>
#include "SoundPlay.h"
uchar code table[]="sound_signal:";
uchar code table1[]="sound_pace:";
uchar code table2[]="0123456789 ";
uchar data count=0;
sbit motor=P2^1;
sbit rs=P2^2;
sbit e=P2^3;
void init_com()
{
TMOD=0x01;
TH0=0xff;
TL0=0xff;
EA=1;
ET0=1;
}
void timer0(void) interrupt 1 using 3
{
counter=counter+1;//节拍次数计数
TH0=0xd8; //定义单位节拍的延时大小 10ms定时
TL0=0xef;
}
void delay(uchar n)
{
uchar i;
while(n--)
for(i=0;i<125;i++); //延时1毫秒
}
void sound_delay(uchar n)
{
uchar i;
while(n--)
{
for(i=0;i<2;i++);
}
}
/*******LCD显示*******/
void ling(uchar zl) //写指令
{
rs=0;
e=0;
P0=zl;
delay(5);
e=1;
delay(5);
e=0;
}
void shuju(uchar sj) //写数据
{
rs=1;
e=0;
P0=sj;
delay(5);
e=1;
delay(5);
e=0;
}
void lcdinit() //初始化
{
delay(15);
ling(0x01);
ling(0x38);
delay(5);
ling(0x38);
delay(5);
ling(0x38);
delay(5);
ling(0x0c);
delay(5);
ling(0x06);
delay(5);
ling(0x01);
delay(5);
}
//*****************液晶初始化*********
void main()
{
uint i,a;
uchar sound_signal;//定义音符大小
uchar sound_pace;//定义节拍大小
init_com();
lcdinit();
ling(0x80);
for (i=0;i<13;i++)
shuju(table[i]);
ling(0x80+0x40);
for (i=0;i<11;i++)
shuju(table1[i]);
//array[i]=0x00 代表歌曲演唱完毕
//array[i]=0xff 代表是休止符
while(1)
{
i=0;
/***************************************///////////
while(array[i]!=0x00)
{
//如果是休止符,延时100ms,并终止本次循环,进入下一个循环
if(array[i]==0xff)
{
TR0=0;
i++;
delay(100);
continue;
}
//从表中取得 音符大小
sound_signal=array[i];
i=i+1;
//从表中取得 节拍大小
sound_pace=array[i];
a= sound_pace;
P1=a|(a>>4);
//彩灯的根据节拍闪烁
ling(0x80+13);
if(sound_signal/100==0)
shuju(table2[10]);
else shuju(table2[ sound_signal/100]);
shuju(table2[sound_signal%100/10]);
shuju(table2[sound_signal%10]);
ling(0x80+0x40+11);
if(sound_signal/100==0)
shuju(table2[10]);
else shuju(table2[sound_pace/100]);
shuju(table2[sound_pace%100/10]);
shuju(table2[sound_pace%10]);
motor=0;
delay(40);
TR0=1;
//当节拍数未达到时候,继续循环,产生该音调的声音
while(counter<=sound_pace)
{
motor=1;
sound=~sound;
sound_delay(sound_signal);
}
i++;
counter=0;//节拍计数器置0,进入下一个音调
}
/*************************************************/
delay(10); //歌曲演唱完毕后,延时一段时间
}
}
//*******soundplay.h**********歌曲
#ifndef __SOUNDPLAY_H_REVISION_FIRST__
#define __SOUNDPLAY_H_REVISION_FIRST__
#define uchar unsigned char
#define uint unsigned int
sbit sound=P2^0;
uint counter=0;
uchar code array[]=
{
0x18, 0x30, 0x1C, 0x10,
0x20, 0x40, 0x1C, 0x10,
0x18, 0x10, 0x20, 0x10,
0x1C, 0x10, 0x18, 0x40,
0x1C, 0x20, 0x20, 0x20,
0x1C, 0x20, 0x18, 0x20,
0x20, 0x80, 0xFF, 0x20,
0x30, 0x1C, 0x10, 0x18,
0x20, 0x15, 0x20, 0x1C,
0x20, 0x20, 0x20, 0x26,
0x40, 0x20, 0x20, 0x2B,
0x20, 0x26, 0x20, 0x20,
0x20, 0x30, 0x80, 0xFF,
0x20, 0x20, 0x1C, 0x10,
0x18, 0x10, 0x20, 0x20,
0x26, 0x20, 0x2B, 0x20,
0x30, 0x20, 0x2B, 0x40,
0x20, 0x20, 0x1C, 0x10,
0x18, 0x10, 0x20, 0x20,
0x26, 0x20, 0x2B, 0x20,
0x30, 0x20, 0x2B, 0x40,
0x20, 0x30, 0x1C, 0x10,
0x18, 0x20, 0x15, 0x20,
0x1C, 0x20, 0x20, 0x20,
0x26, 0x40, 0x20, 0x20,
0x2B, 0x20, 0x26, 0x20,
0x20, 0x20, 0x30, 0x80,
0x20, 0x30, 0x1C, 0x10,
0x20, 0x10, 0x1C, 0x10,
0x20, 0x20, 0x26, 0x20,
0x2B, 0x20, 0x30, 0x20,
0x2B, 0x40, 0x20, 0x15,
0x1F, 0x05, 0x20, 0x10,
0x1C, 0x10, 0x20, 0x20,
0x26, 0x20, 0x2B, 0x20,
0x30, 0x20, 0x2B, 0x40,
0x20, 0x30, 0x1C, 0x10,
0x18, 0x20, 0x15, 0x20,
0x1C, 0x20, 0x20, 0x20,
0x26, 0x40, 0x20, 0x20,
0x2B, 0x20, 0x26, 0x20,
0x20, 0x20, 0x30, 0x30,
0x20, 0x30, 0x1C, 0x10,
0x18, 0x40, 0x1C, 0x20,
0x20, 0x20, 0x26, 0x40,
0x13, 0x60, 0x18, 0x20,
0x15, 0x40, 0x13, 0x40,
0x18, 0x80, 0x00
};
‘贰’ 小型音乐喷泉的设计可以用哪种单片机为什么
什么单片机都行,用简单的C51单片机吧,因为单片机主要的功能是控制处理,即你用可以感觉音乐相关的传感器和单片机相接,但声音变化传感器产生信号给单片机,单片机根据信号再控制彩灯和喷泉。
‘叁’ 单片机实现音乐喷泉的过程中如何对音频进行分频处理
用AD芯片对音频采样,采样速度至少40KHZ,然后做FFT,精度你随便,估计有个256点就可以了。一来你是51,跑不快,二来音乐喷泉水柱不多,从低频到高频大概体现7、8个频点就够了。FFT程序网上找,一把一把的。
‘肆’ 请问用单片机做音乐喷泉的小模型需要哪些材料呢
首先需要个喷泉模型聚乙烯熟料透明的。然后准备个三原色LED灯(最好贴片的),加个蓝牙模块,准备个蓝牙音箱,根据设备数量选择合适引脚单片机。
装载,用块万能板将灯,蓝牙模块,单片机什么的都焊上去。然后将喷泉模型用塑料胶固定在灯上。
连上PC开始调试,先写灯模块,再写蓝牙模块,将音频转成2进账写入代码。
这样基本上可以循环放一首歌了。
‘伍’ 51单片机的音乐喷泉的编码
功能实现通过ADC0832芯片对音频信号的采集,转换为数字信号给单片机,然后PWM脉冲宽度调制控制水泵水柱对的高低
//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的
// 1 1 0 通道
// 1 1 1 通道
unsigned char ad0832read(bit SGL,bit ODD)
{undefined
unsigned char i=0,value=0,value1=0;
SCL=0;
DO=1;
CS=0;//开始
SCL=1;//第一个上升沿
SCL=0;
DO=SGL;
SCL=1; //第二个上升沿
SCL=0;
DO=ODD;
SCL=1; //第三个上升沿
SCL=0; //第三个下降沿
DO=1;
for(i=0;i<8;i++)
{undefined
SCL=1;
SCL=0; //开始从第四个下降沿接收数据
value<<=1;
if(DO)
value++;
}
for(i=0;i<8;i++)
{//接收校验数据
value1>>=1;
if(DO)
value1+=0x80;
SCL=1;
SCL=0;
}
CS=1;
DO=1;
SCL=1;
if(value==value1)//与校验数据比较,正确就返回数据,否则返回0
return value;
return 0;
}
void penquan() //PWM调压
{undefined
date=ad0832read(1,0); //读取ad值
h1=(255-date);//转换
out=0; //水泵清零
delay(h1);
if(h1>70) led1=1; else led1=0; //ad值对比 点亮相应的灯
if(h1>80) led2=1; else led2=0; //ad值对比 点亮相应的灯
if(h1>90) led3=1; else led3=0; //ad值对比 点亮相应的灯
if(h1>100) led4=1; else led4=0; //ad值对比 点亮相应的灯
if(h1>110) led5=1; else led5=0; //ad值对比 点亮相应的灯
if(h1>115) led6=1; else led6=0; //ad值对比 点亮相应的灯
if(h1>120) led7=1; else led7=0; //ad值对比 点亮相应的灯
if(h1>130) led8=1; else led8=0; //ad值对比 点亮相应的灯
out=1; //关闭水泵
delay(date); //延时时间
}
void main()//主函数
{undefined
while(1)
{undefined
penquan(); //给定个延时次数
}
}
(转载于CSDN)
‘陆’ 用Pic32单片机做音乐喷泉,都要哪些模块,怎么实现,C语言的程序怎么编写,求指导~~~
1.ADC 模块,隔一段时间检查一次,得到一个ADC值,根据得到的值驱动不同的LED,可将所有ADC值划分为7个区间。
2.根据ADC值驱动水泵。。
呵呵,感觉你说的挺细的了。我说的都是你的话复述。。
我也用PIC32开发过产品,可以多沟通。
‘柒’ 音乐喷泉的原理是什么
音乐喷泉的工作原理是,根据播放的音乐来控制水柱,达到与音乐同步的效果,而水柱是由水泵来控制的,而水泵是由三相异步电动机组成的,三相异步电动机的转速如果通入工频电源,转速是不变化的,变频器是专门针对电机调速的装置。由变频器控制电机的转速,使水柱发生变化。
改变频率就改变了电机的转速,也就改变了水泵的压力,音乐的不同频率经单片机处理送到变频电机的控制端,使电机转速随音乐的音调,节奏,和强弱变化,水芹数泵的压力随之变化,喷岀的水就有了高低变化。
最高喷泉
2007年8月1日19时58分,在通化市浑江江面上,100米高的水柱喷涌而起,蔚为大观。据了解,这是东北三省喷涌最高的音乐喷泉,同时也是通化浑江沿江景观带建设工程的嫌含首组成部分之一。在当晚工程的竣工仪式上,为其剪彩的不是主要领导,而是市民代表。
据介绍,这是东北三老乎省目前喷涌最高的音乐喷泉,总投资高达2000多万元。同时它也作为通化浑江沿江景观带建设工程的内容之一,成为通化市一道新的风景线。
以上内容参考:网络-音乐喷泉
‘捌’ st89c52单片机音乐喷泉的程序求大神解读
单片机的程序是要根据它的电路来写的,你起码也要把你的原理图给出来,才能写程序。
‘玖’ 想自己做小型的音乐喷泉,怎样画电路图
想做一个小型的音乐喷泉,需要和陪用到电磁阀。用单片机的ADC采样音乐信号,根携蚂据辩棚埋音乐信号电压高低,可以准确控制电磁阀开闭,实现音乐喷泉效果。用c语言完全可以编程实现,当然汇编语言也可以。
‘拾’ 如何用单片机设计音乐喷泉电路图
单片机就想做音乐喷泉?20年前估计这么做,用PLC做控制,现在还用单片机?莫非真是毕业设计?
现在的音乐喷泉控制系统相当复杂,功能和复杂度能赶上一个电厂的整套控制系统了,大点的音乐喷泉有几千个控制点。