- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程设计作品音乐喷泉
课程设计作品:音乐喷泉
郭晓杨 张超 王彭彭
一 课程设计目的
1实现通过音乐的大小来控制喷泉喷水的高低和彩灯的散烁。
2 通过对本课程的设计加深对AVR单片机的认识、了解以及掌握。
3 加深对硬件电路的了解以及掌握,掌握对模数转换部分以及对中断部分的应用。
4 培养自己的动手能力,锻炼自己发现问题、分析问题、解决问题的能力。
5 培养团队意识,锻炼分工合作以及协调能力。
二 作品用途以及功能
本作品可以实现:①喷泉的水柱随着音乐的高低起伏变化,就是说音乐高则水柱高,音乐低则水柱低,随着音乐的不同,喷水的高低会不同;②彩灯随着音乐一起散烁。
三 硬件设计思想以及原理图
1基本原理 当Mp3播放音乐时,声音大的时候其耳机输出的功率大,此时其输出的电压也就大,正是利用这一点,我们利用Mega16将电压这一模拟信号转化为了数字信号,数字信号经过单片机处理后送L298功率驱动,然后信号一部分送直流电机,达到控制电机的目的,与此同时一部分送彩灯部分。
基本示意图如下图所示:
电机驱动模块机原理图
我们使用的电机是汽车的风窗洗涤器,其额定是电压是十二伏。L298 的驱动电机的原理图如下图所示(注:Vs和VDD接十二伏电源,PWM接PORTD7,)
3所用到的硬件开列如下:AVR开发板 L298芯片一片 散热片 汽车洗涤器一个 4148二极管4个
LED8个 12伏电源线 JTAG ICE仿真器 MP3 耳机线 音响 导线若干
4实物照片如下
四 软件部分
详细程序如下
//ICC-AVR application builder : 2008-5-25 11:44:06
// Target : M16
// Crystal: 4.0000Mhz
#include iom16v.h
#include macros.h
volatile char speed;
volatile int adc_data;
volatile char time_1s_ok;
#pragma interrupt_handler timer0_comp_isr:20
void timer0_comp_isr(void)
{
adc_data=ADCH*4;
time_1s_ok=1;
}
//#pragma interrupt_handler adc_isr:15
//void adc_isr(void)
//{adc_data=ADCH*4;
//ADCSRA|=0X10;
//}
void delay100us(char x)
{char i;
for(i=147;x!=0;x--)
while(--i);
}
void delays(char m)
{
for(;m!=0;m--)
delay100us(250);
}
void main(void)
{
DDRD=0X98;
PORTD=0X10;
DDRA=0X00;
PORTA=0X00;
DDRB=0XFF;
PORTB=0XFF;
//
TCNT2=0X01;
TCCR2|=(1WGM21)|(1WGM20)|(1COM21)|(1CS22);
TIMSK|=0X03;
OCR2=0x66;
ADMUX=0 //DC7单端输入
ACSR=0x80;
SFIOR=0x1F;
SFIOR|=0x60; // 选择T/C0比较匹配中断为ADC触发源
ADCSRA=0xAD; // ADC允许、自动触发转换、ADC转换中断允许、ADCclk=125Kz
TCCR0=0x0b; // 内部时钟,64分频(4M/64=62.5KHz),CTC模式
TCNT0=0x00;
OCR0 = 0x7C;//(124),(124+1)/62.5=2ms
TIMSK=0x02;
SEI(); // 允许T/C0比较中断
while (1)
{ if(time_1s_ok)
{if(adc_data=300)
{PORTB=0
speed=0xff;
OCR2=speed;
delays(1);
}
if((adc_data=250)(adc_data300))
{PORTB=0
speed=0xff;
OCR2=speed;
de
文档评论(0)