版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-西安科技大学-成绩 课程设计: 嵌入式系统应用 题目名称:利用蜂鸣器实现音乐播放功能 姓 名: 学 号: 班 级: 完成时间: 1设计的任务 设计内容:动手焊接一个51单片机设计目标:利用单片机上的蜂鸣器实现音乐播放功能2 设计的过程2.1 基本结构1.STC89C52RC在本次的试验中采用了STC89C52RC单片机,STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期,工作电压:5.5V3.3V(5V单片机)/3.8V2.0V(3V单片机),工作频率范围:040MHz,
2、相当于普通8051的080MHz,实际工作频率可达48MHz,用户应用程序空间为8K字节。 (STC89C52RC引脚图)STC89C52RC单片机的工作模式:(1) 典型功耗<0.1A,可由外部中断唤醒,中断返回后,继续执行原程序(2) 空闲模式:典型功耗2mA(3) 正常工作模式:典型功耗4Ma7mA(4) 唤醒,适用于水表、气表等电池供电系统及便携设备2.蜂鸣器及其工作原理:蜂鸣器按其结构分主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和
3、磁铁的相互作用下,周期性地振动发声。本实验采用的是电磁式蜂鸣器。蜂鸣器按其是否带有信号源又分为有源和无源两种类型。有源蜂鸣器只需要在其供电端加上额定直流电压,其内部的震荡器就可以产生固定频率的信号,驱动蜂鸣器发出声音。无源蜂鸣器可以理解成与喇叭一样,需要在其供电端上加上高低不断变化的电信号才可以驱动发出声音。本实验采用的是有源蜂鸣器。(蜂鸣器与单片机连接电路图)2.2 软件设计过程1. 蜂鸣器发声原理本实验由于采用有源蜂鸣器,只需将引脚端口P34清零,蜂鸣器即可发声;P34置位,蜂鸣器停止发声。采用置1置0的方法只能使蜂鸣器发声或停止发声,想要使蜂鸣器发出声音,必须对蜂鸣器发出声音的音频和节拍
4、进行控制。(音乐基础音调:不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。两个音之间的距离有两个“半音”,就叫“全音”。在钢琴等键盘乐器上,CD、DE、FG、GA、AB两音之间隔着一个黑键,他们之间的距离就是全音;EF、BC两音之间没有黑键相隔,它们之间的距离就是半音。通常唱成1、2、3、4、5、6、
5、7的音叫自然音,那些在它们的左上角加上号或者b号的叫变化音。叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。节拍:节拍是让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。若1拍实0.5
6、s,则1/4 拍为0.125s。至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。)1) 控制发声频率要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。利用STC89C52RC的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0从而产生不同频率。此外结束符和休止符
7、可以分别用代码00H和FFH来表示,若查表结果为0x00,则表示曲子终了;若查表结果为0xff,则产生相应的停顿效果。以标准音高A为例,A的频率是440Hz,周期T=1/440=2272us。在占空比为50%的情况下,导通时间=断开时间=半周期t=2272us/2=1136us,利用P34端口的位操作,经过不断地反相变换即可得到标准音高A的音频脉冲。端口导通时间与断开时的时间利用定时器实现。具体的方法是将单片机定时器的中断触发时间设为半周期t,这样每隔半周期端口反相,输出连续的对应音高的频率。设晶振的频率为f0,中断触发时间(半周期)为t,定时器工作在模式1时计数器的初值为THL,高8位为TH
8、L,低8位为TL。时钟周期即为1/f0,定时器每一次累加用去一个机器周期,一个机器周期包含12个时钟周期,即定时器每次加一所用时间是12/f0。定时器在模式1下计时采用16位数,最大计数为216-1(65535),再次加一(65536)溢出触发中断。根据以上分析可得如下关系:音频对应定时器初值的高8位TH=THL/(28)=(65536-t*f/12)/256;音频对应定时器初值的低8位TL=THL%(28)=(65536-t*f/12)%256;附:八度12音阶定时器初值表(只含自然音)低音音名频率Hz晶振12MHz晶振11.0592MHz中音音名频率Hz晶振12MHz晶振11.0592MH
9、z高音音名频率Hz晶振12MHz晶振11.0592MHzDo2620xF8850xF91BDo5230xFC430xFC8EDo10460xFE210xFE47Re2940xF95A0xF9DFRe5870xFCAD0xFCEDRe11750xFE560xFE76Mi3300xFA130xFA8AMi6590xFD0A0xFD43Mi13180xFE850xFEA1Fa3490xFA680xFAD8Fa6980xFD340xFD6AFa13970xFE9A0xFEC7So3920xFB040xFB68So7840xFD820xFDB3So15680xFEC10xFED9La4400xFB900
10、xFBE9La8800xFDC80xFDF3La17600xFEE40xFEF9Si4940xFC0C0xFC5BSi9880xFE060xFE2DSi19760xFF030xFF162)控制发声节拍每个音符的节拍可通过延时一定的时间来实现,在具体实现时需要有一个基本的带参延时程序,用于主函数根据不同的音符调用不同的时延。若以十六分之一音符的时长为基本延时时间,则十六分音符只需调用一次延时程序,八分音符则需调用两次延时程序,以此类推。3) 简谱及其编码*简谱知识音阶CDEFGAB唱名doremifasolasi数字1234567音符音符用数字1至7表示。这7个数字就等于大调的自然音阶。如果是C
11、大调,加上音名,就会是这样:八度如果是高一个八度,就会在数字上方加上一点。如果是低一个八度,就会数字下方加上一点。在中间的那一个八度就什么也不用加。如果要再高一个八度,就在上方垂直加上两点(如:);要再低一个八度,就在下方垂直加上两点(如:),如此类推。见下表所示:大调.小调.音长通常只有数字的是四分音符。数字下加一条横线,就可令四分音符的长度减半,即成为八分音符;两条横线可令八分音符的长度减半,即成为十六分音符,余此类推;简单来説,下加横綫数目与五綫谱的符尾数目相对应。数字后方的横线延长音符,每加一条横线延长一个四分音符的长度。正如五綫谱的附点一样,数字后方加一点会将音符长度增加一半。休止符
12、休止符用“0”来表示。比四分休止符长,就只需在每一个四分休止符再多加一个“0”,不需在后方加上横线。若整个小节均是休止状态的话,就在每个四分音符加一个“0”,就像是3拍4就写成“| 0 0 0 |”,而4拍4就写成“| 0 0 0 0 |”。无音高音符就像敲击乐的乐器那样是没有音高的,这时,简谱就需要用“X”或“x”表达。例如啦啦队拍手时,简谱上就需如此表达:4/4 > >拍手:| X X X X X | X X X X 0 X X | 小节线正如五綫谱一样,小节与小节之间以纵綫(称小节线)分隔,乐曲终止以一粗一细的直綫表示(但是一般不分粗细);重复乐段以纵綫后两点表示开始,纵綫前
13、两点表示终止。拍号拍号的表达方式为:“2/4”、“3/4”、“4/4”、“6/8”等等。拍号一般都是置于调号的后方。变调与调号表示调号有两种方法:可以直接写“C调”,“C小调”或“Key: C”,“Key: Cm”。亦可写清楚主音代表哪一个音,例如1=C,就是C大调(大调以1为主音)。6=C就是C小调(小调以6为主音)。2=D就是D多利安调(多利安调以2为主音)。五线谱有升降号,简谱同样有升降号。在简谱中,若需表达升降号,就把符号加在数字1至7的前方,让该音升高或降低。若要把升降号加在调号跟和弦CDEFGAB七个字母,就须加在它们的后方。在五綫谱中,C小调要把B-E-A三个音降低半音。所以表达
14、它的和声小调时,就会把一个还原号放在B前面。简谱就一定得写5,因为5不能下降。延音线、圆滑线与其他音乐符号简谱延音线(Tie)跟圆滑綫(slur)都是跟五线谱相同,一定得置在数字上方。表达跳音(staccato)时需要特别小心,因为很容易会跟低八度的那一点混淆,因此在表达跳音时把那一点写得粗点及低点。*简谱编码将简谱中的每个音符进行编码,每个音符用一个unsigned char字符类型表示,简谱可用一个unsigned char字符数组表示。字符的前四位表示音频,可以表示0-f共十六个音符。本实验中采用了中音区和高音区。中音do-si分别编码为17,高音do-si分别编码为8E,停顿编为0。字
15、符的后四位表示节拍,节拍以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。以0xff作为曲谱的结束标志。程序从数组中取出一个数,然后分离出高4位得到音调 ,将值赋给定时器0,得到音调;接着分离出该数的低4位,得到节拍。本实验中播放音乐使用简谱如下:将其编码成:uchar code zbjbxf=0x64,0xA3,0xC1,0xA2,0x62,0x84,0x61,0x81,0x61,0xA4,0xA1,0x91,0xA1,0x81,0x64,0xA3,0xC1,0xD2,0xD2,0xD2,0xA2,0xC4,0xA1,0xC1,0
16、xA1,0xC1,0xD2,0xD2,0xD2,0xA2,0xC4,0xC2,0x62,0xC2,0x62,0xA2,0xA2,0x84,0x94,0x94,0x92,0x81,0x91,0xA2,0xC2,0xD4,0xE4,0xA4,0xE4,0xA2,0xE2,0xA2,0xE2,0xA2,0xA2,0x84,0x94,0x94,0x92,0x81,0x91,0xA2,0xC2,0xD8;2.3 程序流图及说明(主程序流程图)程序代码:#include <reg52.h>#define uchar unsigned char#define uint unsigned ints
17、bit fm=P34;/蜂鸣器控制端口uchar timeh,timel;/用于存放定时器的高8位和低8位uchar code zbjbxf=/定义猪八戒背媳妇的简谱数组0x64,0xA3,0xC1,0xA2,0x62,0x84,0x61,0x81,0x61,0xA4,0xA1,0x91,0xA1,0x81,0x64,0xA3,0xC1,0xD2,0xD2,0xD2,0xA2,0xC4,0xA1,0xC1,0xA1,0xC1,0xD2,0xD2,0xD2,0xA2,0xC4,0xC2,0x62,0xC2,0x62,0xA2,0xA2,0x84,0x94,0x94,0x92,0x81,0x91,
18、0xA2,0xC2,0xD4,0xE4,0xA4,0xE4,0xA2,0xE2,0xA2,0xE2,0xA2,0xA2,0x84,0x94,0x94,0x92,0x81,0x91,0xA2,0xC2,0xD8;/适合12M的晶振定时器初值表,高低8位分开uchar code chuzhi= 0xff,0xff,/占位 0xFC,0x8E,/中央C调1-7 0xFC,0xED, 0xFD,0x43, 0xFD,0x6A, 0xFD,0xB3, 0xFD,0xF3, 0xFE,0x2D, 0xFE,0x47,/高八度1-7 0xFE,0x76, 0xFE,0xA1, 0xFE,0xC7, 0xFE
19、,0xD9, 0xFE,0xF9, 0xFF,0x16 ;void timer0() interrupt 1 /定时器0中断服务程序TH0=timeh;/将timeh赋给计时器的高8位TL0=timel; /将timel赋给计时器的低8位fm=fm; /定时器每次到时将蜂鸣器反相void delay(uint z)/延时165MS,即十六分音符uint y;for(z;z>0;z-) for(y=19000;y>0;y-);/大致时间void delay1(uint z)/延时1MSuint y;for(z;z>0;z-) for(y=112;y>0;y-);/大致时间
20、void main()uint temp;/存放简谱数组中的每一个音符的临时变量uchar i=0;uchar jp;/jp用于取出temp中的高8位和低8位TMOD=0x01;/设置定时器T0工作于方式1IE=0x82; /允许T0中断while(1)temp=zbjbxfi;if(temp=0xff)break;jp=temp/16; /取数的高4位,音频数值if(jp!=0)timeh=chuzhijp*2;/构造定时器初值高8位timel=chuzhijp*2+1; /构造定时器初值低8位TR0=1; /开定时器elseTR0=0; /关定时器fm=1; /关蜂鸣器delay(temp%16); /取数的低4位,节拍(音符总时延)TR0=0; /唱完一个音停5MSfm=1;delay1(5); /TR0=1; i+;TR0=0;/关定时器fm=1;/关蜂鸣器3 运行结果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家装设计方案及施工计划
- 北京车位租金合同范本
- 公司正式合同补充协议
- 制作沙发套合同协议书
- 协议子女的离婚协议书
- 可乐机设备租赁协议书
- 合同房屋买卖三方协议
- 办公场所绿化合同范本
- 农资代理合同协议范本
- 厂家批量采购合同范本
- 2023第八届全国学生学宪法讲宪法活动竞赛题库(汇总)
- GJB9001C-2017国军标标准培训讲义
- 《妇产科学课件:宫颈癌的筛查与防治》
- 服务型制造标准体系建设指南(2023年)征
- GA/T 2060-2023法庭科学毛发中甲基苯丙胺等11种毒品及代谢物检验液相色谱-质谱法
- 工程监理大纲监理方案服务方案
- C型钢检验报告
- 主体结构验收方案(示范文本)
- 八年级美术PPT课件 荷兰后印象派画家梵高作品介绍 《向日葵》《吃土豆的人》《割耳朵后的自画像》
- GB/T 3390.1-2013手动套筒扳手套筒
- 多功能注氧仪说明书课件
评论
0/150
提交评论