




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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首乐曲的音乐发生器,用按键选择循环的单曲,调试后下载到开发板,运行。2.相关
3、知识介绍 2.3 音阶对应频率计数初值的计算单片机的振荡频率为fosc12MHz ,通过定时器T0溢出后对P3.0口取反产生方波,故定时器溢出时间为1/2f 。由: , 则定时初值为:以音阶“1”为例:f523 Hz,则T1/f 定时初值:用同一方法可求出其它音阶所对应的频率定时初值,将其制表放在程序中,通过查表向定时器T0装入所要求的定时初值,即可产生某一音阶所对应的频率的方波信号。C调的音阶及其频率、在单片机中的定时初值对应如下: 四原理图1.音乐播放器原理图因为开发板上面的蜂鸣器为无源蜂鸣器,所以设计时要适应开发板的情况进行设计。K1、K2按键用来进行上一曲和下一曲的选择,K3为暂停/开
4、始按键,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,b,c; for(c=20
8、5;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,1, 1,2,1, 6,
9、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, 1,3,4,6,2,1,7
10、,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,4,2,2,4,2,2,
11、 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,1,2,1,6,1,1,
12、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
13、,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,1,1,6,1,1,1,2,1,6,1,1,1,2,1, 2,2,1, 2,2,1,2,2,1,2,2,1,2,2,1,1,2,1,3,2,1,2,2,1, 2,2,8,3,2,1,3,2,2,3,2,1,3,2,2,2,2,2, 1,2,1,1,2,2,1,2,1,2,2,1,1,2,1,6,1,1,5,1,1, 5,1,1,5,1,2,5,1,1,6
14、,1,1,5,1,1,2,2,1,3,2,1, 1,2,8, 1,2,1,5,1,2,1,2,1,6,1,1,5,1,1,3,1,1, 2,1,1, 1,2,6,0,2,2 ;/ 音阶频率表 高八位code unsigned char FREQH=0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, ; /1,2,3,4,5,6,7,8,i / 音阶频率表 低八位c
15、ode unsigned char FREQL=0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, ;/1,2,3,4,5,6,7,8,i/*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS
16、 -*/void DelayUs2x(unsigned char t) while(-t);/*- mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编-*/void DelayMs(unsigned char t) while(t-) /大致延时1mSDelayUs2x(245);DelayUs2x(245); /*- 节拍延时函数 各调1/4节拍时间: 调4/4 125ms 调2/4 250ms 调3/4 187ms-*/void delay(unsigned
17、char t) unsigned char i;for(i=0;it;i+) DelayMs(250); TR0=0;/*- 定时器0中断-*/void TIM0_ISR() interrupt 1TR0=0; SPK=!SPK;TH0=Timer0_H;TL0=Timer0_L;TR0=1;/*- 歌曲处理函数-*/void Song()TH0=Timer0_H;/赋值定时器时间,决定频率TL0=Timer0_L;TR0=1; /打开定时器delay(Time); /延时所需要的节拍 /*- 主函数-*/void led(unsigned char a);void main(void)uns
18、igned int i;unsigned char k;TMOD|=0x01; /置定时器0工作方式1EA=1; /打开全局中断ET0=1; /打开 定时器0 中断EX0=1;/打开 外部中断0 中断IT0=1;/设置为下降沿中断EX1=1;/打开 外部中断1 中断IT1=1;/设置为下降沿中断PX1=1;/设置 外部中断1 为高优先级while(1) /i=0;if(W=0) T=W; for(i=0;i100;i=i+3) /音乐数组长度 ,唱完从头再来led(MUSICi); k=MUSICi+7*MUSICi+1-1;/去音符振荡频率所需数据 Timer0_H=FREQHk; Time
19、r0_L=FREQLk; Time=MUSICi+2; /节拍时长 / i=i+3; Song();if(T!=W)break; if(W=1) T=W; for(i=0;i174;i=i+3) /音乐数组长度 ,唱完从头再来led(MUSIC1i); k=MUSIC1i+7*MUSIC1i+1-1;/去音符振荡频率所需数据 Timer0_H=FREQHk; Timer0_L=FREQLk; Time=MUSIC1i+2; /节拍时长 / i=i+3; Song();if(T!=W)break; if(W=2) T=W; for(i=0;i90;i=i+3) /音乐数组长度 ,唱完从头再来le
20、d(MUSIC2i); k=MUSIC2i+7*MUSIC2i+1-1;/去音符振荡频率所需数据 Timer0_H=FREQHk; Timer0_L=FREQLk; Time=MUSIC2i+2; /节拍时长 / i=i+3; Song();if(T!=W)break; if(W=3) T=W; for(i=0;i423;i=i+3) /音乐数组长度 ,唱完从头再来led(MUSIC3i); k=MUSIC3i+7*MUSIC3i+1-1;/去音符振荡频率所需数据 Timer0_H=FREQHk; Timer0_L=FREQLk; Time=MUSIC3i+2; /节拍时长 / i=i+3;
21、Song();if(T!=W)break; / 频谱函数void led(unsigned char a)switch(a)case 0:P1=0xff;break;case 1:P1=0x7f;break;case 2:P1=0x7e;break;case 3:P1=0x7c;break;case 4:P1=0x78;break;case 5:P1=0x70;break;case 6:P1=0x60;break;case 7:P1=0x40;break;case 8:P1=0x00;break;/外部中断0 中断服务程序用于暂停void zhongduan0() interrupt 0 de
22、lay5ms();/按键去抖if(!key1)while(!key1);/松手检测while(key1&T=W);/检测按键是否按下delay5ms();/按键去抖while(key1&T=W);/检测按键是否按下while(!key1&T=W);/松手检测/外部中断1 中断服务程序void zhongduan1() interrupt 2 delay5ms();/按键去抖if(!key2)if(W=3)W=0;elseW+;while(!key2);/松手检测delay500ms();电子琴程序#include #include #define uchar unsigned char#def
23、ine uint unsigned int/*子函数声明*/void Run();void PlayKey();void KeyScan();void KeyScan1();/*手动弹奏按键定义*/sbit Beep=P10;sbit key1=P20;sbit key2=P21;sbit key3=P22;sbit key4=P23;sbit key5=P24;sbit key6=P25;sbit key7=P26;sbit key8=P27;/*播放模式下按键定义*/sbit s3=P35;/暂停/播放键uchar Th0,Tl0;uchar key=0;/按键代号uchar yinfu,
24、jiepai,i,j,m;uchar gaodi=0;uchar flag=0;/暂停、开始uchar num;/全局变量uchar s1num;/暂停/播放键按下的次数/歌曲音符/*uchar code MusicCode=0xfc,0x0b,0xfc,0x43,0xfc,0xab,0xfd,0x08,0xfd,0x33,0xfd,0x81,0xfd,0xc7,0xfe,0x05,0xfe,0x21,0xfb,0x8f,0xfb,0x03;*/uchar code MusicCode=0xfc,0x44,0xfc,0xac,0xfd,0x09,0xfd,0x34,0xfd,0x82,0xfd
25、,0xc8,0xfe,0x06,0xfb,0x04,0xfb,0x90,0xfc,0x0c,0xfe,0x22,0xf9,0x5b,0xfa,0x15;/按键音符uchar code KeyCode=0xf8,0x8b,0xf9,0x5b,0xfa,0x14,0xfa,0x66,0xfb,0x03,0xfb,0x8f,0xfc,0x0b,/*低音*/0xfc,0x43,0xfc,0xab,0xfd,0x08,0xfd,0x33,0xfd,0x81,0xfd,0xc7,0xfe,0x05,/*中音*/0xfe,0x21,0xfe,0x55,0xfe,0x84,0xfe,0x99,0xfe,0xc
26、0,0xfe,0xe3,0xff,0x02/*高音*/;/*使能中断*/void interrupt0() interrupt 0 /外部终端0flag=flag;/*曲目选择外部中断*/void interrupt1() interrupt 2/外部终端1flag1=1;/*延时子程序*/void delay_1ms(uint i) uint k,x; for(x=0;xi;x+) for(k=0;k2) gaodi=0; else if(key1=0) delay_1ms(5); if(key1=0) while(!key1); key=1; else if(key2=0) delay_1ms(5); if(key2=0) while(!key2); key=2; else if(key3=0) delay_1ms(5); if(key3=0) while(!key3); key=3; else if(key4=0) delay_1ms(5);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 稀土金属提炼过程中的行业规范与标准制定工作进展考核试卷
- 纸容器行业技术创新与专利布局考核试卷
- 肉类加工企业的市场动态跟踪与趋势预测考核试卷
- 线上销售与渠道管理考核试卷
- 电梯平衡补偿装置工作原理考核试卷
- 江苏省南京市燕子矶中学2024-2025学年高考生物试题一轮复习模拟试题含解析
- 珠海三中高二下学期期中考试理科物理试题
- 南京财经大学红山学院《港台文学专题》2023-2024学年第一学期期末试卷
- 梧州学院《企业案例分析》2023-2024学年第二学期期末试卷
- 上海市浦东新区南片联合体达标名校2024-2025学年初三第一次模拟考试适应性测试英语试题含答案
- 保险市场调查与分析实训三任务一2.3.1任务一运用Excel整理市场调查问卷数据
- zxv10iptv v3.05.01多媒体解决方案系统描述
- DB13 5325-2021 生活垃圾焚烧大气污染控制标准
- 鼓乐铿锵课件 (2)
- 土木工程施工课程设计完整版
- 流动资金自动测算表(内自带计算公式)
- 派力肯安全防护箱
- 教案 - 种子生活力测定
- SSM-IBM特色销售方法论
- 诗歌鉴赏——如何读懂诗歌ppt课件
- 蓄水池施工专项方案
评论
0/150
提交评论