《音乐发生器的设计与实现(共18页)》由会员分享,可在线阅读,更多相关《音乐发生器的设计与实现(共18页)(18页珍藏版)》请在金锄头文库上搜索。
1、精选优质文档-倾情为你奉上实验课程名称:监测控制系统应用 实验五实验项目名称:音乐发生器的设计与实现 实验成绩: 实验者: 专业班级: 电信130 班 同组者: 111 实验日期: 周四34节课 一实验内容掌握单片机片内定时器应用设计技巧,会确定定时器的时间常数,能够进行定时器的初始化编程。掌握利用微处理器设计音乐发生器的方法二探究内容1.利用定时器产生特定的频率信号,设计一个音乐发生器,可以循环播放音乐,候选乐曲3首。2.用按键选择播放哪一首音乐。有音乐播放的启停键。3.用8个LED灯随节拍闪烁(选做)4扩展内容(选做),用7个按键分别产生音阶1、2、3、4、5、6、7,按一下键,即产生一个
2、节拍的相应音符,也就是设计电子琴。3 实验设计:1.设计要求具体任务:(1)设计一个音乐发生器,候选音乐有三种,K1可启动停止音乐,K2用于选择音乐段;(2)用proteous仿真电路,保证设计的正确性;(3) 基于开发板完成实物制作。2. 探究内容:(1)如何利用音阶计算定时器的时间常数?(2)音乐声音的洪亮稳定如何保证?(3)节拍如何实现?3、 实验设计:1.设计音乐发生器的基本任务的基本任务:(1)研究产生音阶1、2、3、4、5、6、7的方法,计算7个音阶对应的时间常数(2)设计产生单首乐曲循环的软件,调试后下载到开发板(3) 设计产生3首乐曲的音乐发生器,用按键选择循环的单曲,调试后下
3、载到开发板,运行。2.相关知识介绍 2.3 音阶对应频率计数初值的计算单片机的振荡频率为fosc12MHz ,通过定时器T0溢出后对P3.0口取反产生方波,故定时器溢出时间为1/2f 。由: , 则定时初值为:以音阶“1”为例:f523 Hz,则T1/f 定时初值:用同一方法可求出其它音阶所对应的频率定时初值,将其制表放在程序中,通过查表向定时器T0装入所要求的定时初值,即可产生某一音阶所对应的频率的方波信号。C调的音阶及其频率、在单片机中的定时初值对应如下: 四原理图1.音乐播放器原理图因为开发板上面的蜂鸣器为无源蜂鸣器,所以设计时要适应开发板的情况进行设计。K1、K2按键用来进行上一曲和下
4、一曲的选择,K3为暂停/开始按键,P2.0接蜂鸣器,P1口接LED灯,用LED灯显示节拍。2.电子琴原理图上面七个键按下分别发出哆嘞咪发嗦啦嘻的音,第八个按键选择音调的高低。最下面的按键用来控制使用和暂停。五实验结果音乐播放器仿真和实物都能正常的播放音乐,并且能够实现上一曲、下一曲的选择,并且有暂停和播放的功能,电子琴也能够正常发音,可以演奏音乐。六、结果分析及总结(1)如何利用音阶计算定时器的时间常数?单片机的振荡频率为fosc12MHz ,通过定时器T0溢出后对P3.0口取反产生方波,故定时器溢出时间为1/2f 。由: , 则定时初值为:以音阶“1”为例:f523 Hz,则T1/f 定时初
5、值:用同一方法可求出其它音阶所对应的频率定时初值,将其制表放在程序中,通过查表向定时器T0装入所要求的定时初值,即可产生某一音阶所对应的频率的方波信号。(2)节拍如何实现?取乐曲节拍的长度为0.4s ,即1拍0.4s ,由定时器T1控制延时。设置定时器T1的定时中断T50ms ,采用定时方式1。由:,则定时初值X3C0BH因此1拍0.4s8*50ms,即通过定时器T1的定时中断8次,产生8*50ms的定时,就可以满足1节拍的定时要求。以此类推,通过定时中断N次,可产生N*50ms的定时以满足1/4拍、1/2拍、1拍、2拍等不同节拍的定时要求。由此可知,节拍值只能是整数值。(3)音乐声音的洪亮稳
6、定如何保证?这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。 而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K5K的方波去驱动它。 此次设计初,由于没意识到蜂鸣器驱动分为有源驱动和无源驱动,在使用网上的乐谱和相应的函数设计音乐播放器时,不能正确产生音乐,后来查资料才发现有无源和有源之分,有源和无源蜂鸣器的发声原理不同,故其乐谱会有所不同。 乐谱可以放在一个乐谱表中,通过查表来实现音乐的播放,要想循环播放一首歌,可以加一句查询语句,因为一条语句的执行时间非常短,对乐曲的演奏没有影响,在判断乐曲播放完后,继续回到乐曲开始,便可实现循环
7、播放。附录:音乐播放器程序#include /*- 硬件端口定义-*/sbit SPK=P20; /定义音乐输出端口sbit key1=P32; /定义按键 用于 暂停sbit key2=P33; /定义按键 用于 切换unsigned char W=0,T;/用于选择音乐unsigned char Timer0_H,Timer0_L,Time;void delay5ms(void) /误差 0us unsigned char a,b; for(b=185;b0;b-) for(a=12;a0;a-);void delay500ms(void) /误差 0us unsigned char a,
8、b,c; for(c=205;c0;c-) for(b=116;b0;b-) for(a=9;a0;a-);/世上只有妈妈好 数据表音谱,高中低音,音长code unsigned char MUSIC102= 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,2,2
9、,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0 ;/送别 数据表音谱,高中低音,音长code unsigned char MUSIC1174=5,2,2,3,2,1,5,2,1,1,3,4, 6,2,2,1,3,2,5,2,4,5,2,2,1,2,1,2,2,1,3,2,2,2,2,1,1,2,1, 2,2,8,5,2,2,3,2,1,5,2,1,1,3,3,7,2,1, 6,2,2,1,3,2,5,2,4, 5,2,2, 2,2,1, 3,2,1,4,2,3, 7,1,1, 1,2,8, 6,2,2,1,3,2,1,3,4, 7,2,2,6,2,1,7,2,1,
10、1,3,4,6,2,1,7,2,1,1,3,1,6,2,1,6,2,1, 5,2,1, 3,2,1,1,2,1, 2,2,8, 5,2,2,3,2,1,5,2,1, 1,3,3,7,2,1,6,2,2,1,3,2,5,2,4, 5,2,2,2,2,1,3,2,1,4,2,3,7,1,1, 1,2,8 ;/新年好 数据表音谱,高中低音,音长code unsigned char MUSIC290=1,2,1,1,2,1,1,2,2,5,1,2,3,2,1,3,2,1,3,2,2,1,2,2,1,2,1,3,2,1,5,2,2,5,2,2,4,2,1,3,2,1,2,2,4, 2,2,1,3,2,1
11、,4,2,2,4,2,2, 3,2,1,2,2,1,3,2,2,1,2,2, 1,2,1,3,2,1,2,2,2,5,1,2, 7,1,1,2,2,1,1,2,4 ;/童年 数据表音谱,高中低音,音长code unsigned char MUSIC3423=5,1,1,5,1,1,3,1,1,5,1,2,3,1,1,5,1,2, 6,1,1,6,1,1,1,2,1,6,1,2,6,1,1,1,2,2, 2,2,1,2,2,1,3,2,1,2,2,2,5,1,1,6,1,1,5,1,1, 1,2,1,1,2,1,5,1,1,1,2,1,1,2,1,1,2,2,1,2,1, 1,2,1,5,1,2
12、,1,2,1,6,1,1,5,1,1,3,1,1, 2,1,1, 1,1,2,3,1,1,5,1,1,5,1,2,5,1,1,3,1,1, 6,1,1, 6,1,1,1,2,1,6,1,1,6,1,1,6,1,1,6,1,1,5,1,1, 1,2,2,1,2,1,1,2,1,1,2,1,6,1,1,1,2,1,6,1,1, 5,1,2,0,2,1,3,1,1,6,1,1,1,2,1,6,1,1,5,1,1, 3,1,1,2,1,1,3,1,1,5,1,1,5,1,2,5,1,1,3,1,1, 6,1,1,6,1,1,1,2,1,6,1,1,6,1,1,6,1,1,6,1,1,5,1,1, 1,2,2,1,2,1,1,2,1,1,2,1,6,1,1,6,1,1,1,2,1, 2,2,2,0,2,1,5,1,1,2,2,1,5,2,1,2,2,2, 5,2,1,5,2,2,5,2,1,5,2,1,5,2,1,3,2,1,2,2,1, 1,2,1,1,2,2,6