单片机课程设计报告利用蜂鸣器播放音乐_第1页
单片机课程设计报告利用蜂鸣器播放音乐_第2页
单片机课程设计报告利用蜂鸣器播放音乐_第3页
单片机课程设计报告利用蜂鸣器播放音乐_第4页
单片机课程设计报告利用蜂鸣器播放音乐_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、资料.成绩课程设计:嵌入式系统应用题目名称:利用蜂鸣器实现音乐播放功能姓 名: 学 号:班 级:完成时间:1设计的任务设计内容:动手焊接一个51单片机设计目标:利用单片机上的蜂鸣器实现音乐播放功能2设计的过程21基本结构1 .STC89C52RC在本次的试验中采用了 STC89C52RC单片机,STC89C52RC单片机是 宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼 容传统8051单片机,12时钟/机器周期,工作电压:5.5V3.3V (5V单片 机)/3.8V2.0V (3V单片机),工作频率范围:040MH乙相当于普通 8051的080MHz,实际工作频率可达48

2、MHz,用户应用程序空间为8K 字节。O IEco r4 LO 9 tJO -J CrLrJ 9 tOooo O OO OlV CUddd 亠 d d GU I lxgCOZlOS4 44 *4t9LrP r=J1 CO CXI IO-J CSl ZZZCSJGJ * dd dddddd一 SSAU I舄UZ 乏Is9EIIIgB U-B2居 U Z 阊 U - .S U O .S昱mrm 口口口口口口口口口口口口口Q Cn OOt9 ltd *1Cz-,GJOPDIP-40 OleMCoLO 9 t 822 Cotg LTDO-D GJ1=HCOCo Cy-Dera CC g g COO-D

3、COo-JO.1 0.1 C-JZZZE CM(STC89C52RC 引脚图)资料.STC89C52RC单片机的工作模式:典型功耗0.1A,可由外部中断唤醒,中断返回后,继续执行原程序空闲模式:典型功耗2mA正常工作模式:典型功耗4MO7mA唤醒,适用于水表、气表等电池供电系统及便携设备2蜂鸣器及其工作原理:蜂鸣器按其结构分主要分为压电式蜂鸣器和电磁式蜂鸣器两种类 型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。 接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产 生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。 本实验采用的是电磁式蜂鸣器。蜂鸣器按

4、其是否带有信号源又分为有源和无源两种类型。有源蜂鸣 器只需要在其供电端加上额定直流电压,其内部的震荡器就可以产生固 定频率的信号,驱动蜂鸣器发出声音。无源蜂鸣器可以理解成与喇叭一P34R15IKVCC (TXDJ2FMQ样,需要在其供电端上加上高低不断变化的电信号才可以驱动发岀声音。本实验采用的是有源蜂鸣器。(蜂鸣器与单片机连接电路图)2.2软件设计过程1.蜂鸣器发声原理本实验由于采用有源蜂鸣器,只需将引脚端口 P3A4清零,蜂鸣 器即可发声;P3A4S位,蜂鸣器停止发声。采用責1責O的方法只 能使蜂鸣器发声或停止发声,想要使蜂鸣器发出声音,必须对蜂鸣 器发出声音的音频和节拍进行控制。(音乐基

5、础音调:不同音高的乐音是用C、DS ES FS G、A、B来表示,这7个字母 就是音乐的音名,它们一般依次唱成DO、RES Ml、FA、SO、LA、SL 即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西” 的读音,这是唱曲时乐音的发音,所以叫“音调”,即TOneO把C、D、 ES FS G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半 音”。两个音之间的距离有两个“半音”,就叫“全音”。在钢琴等键盘乐 器上,C-D. D-ES F-G. G-AS A-B两音之间隔着一个黑键,他 们之间的距离就是全音;E-FS B-C两音之间没有黑键相隔,它们之间的距离就是半音。通

6、常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上#号或者b号的叫变化音。#叫升记号,表示把 音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半 音。例如高音DO的频率(1046Hz)刚好是中音DO的频率(523HZ) 的一倍,中音DO的频率(523HZ)刚好是低音DO频率(266 HZ)的 一倍;同样的,高音RE的频率(1175HZ)刚好是中音RE的频率(587HZ) 的一倍,中音RE的频率(587HZ)刚好是低音RE频率(294 HZ)的一 倍。节拍:节拍是让音乐具有旋律(固定的律动),而且可以调节各个音的快满 度。“节拍”,即Beat,简单说就是打拍子,就像

7、我们听音乐不自主的随 之拍手或跺脚。若1拍实0.5s,则1/4拍为0.125so至于1拍多少s, 并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下, 有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短 即时值,一般用拍数表示。休止符表示暂停发音。)D控制发声频率要产生音频脉冲,只要算岀某一音频的周期(1/频率),然后将此周 期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当 计时到后就将输岀脉冲的I/O反相,然后重复计时此半周期时间再对I/O 反相,就可在I/O脚上得到此频率的脉冲。利用STC89C52RC的内部 定时器使其工作在计数器模式MODEI下,改

8、变计数值THO及TLo从而 产生不同频率。此外结束符和休止符可以分别用代码OOH和FFH来表示,若查表结果为OXo0,则表示曲子终了;若查表结果为Oxff,则产生相应 的停顿效果。以标准音高A为例,A的频率是440H乙周期T二1/440二2272us 在占空比为50%的情况下,导通时间二断开时间二半周期 t二2272us2二1136us,利用P34端口的位操作,经过不断地反相变换 即可得到标准音高A的音频脉冲。端口导通时间与断开时的时间利用定 时器实现。具体的方法是将单片机定时器的中断触发时间设为半周期t, 这样每隔半周期端口反相,输出连续的对应音高的频率。设晶振的频率为f,中断触发时间(半周

9、期)为t,定时器工作在模 式1时计数器的初值为THL,高8位为THL,低8位为TL。时钟周期即 为1/fO,定时器每一次累加用去一个机器周期,一个机器周期包含12 个时钟周期,即定时器每次加一所用时间是12f0o定时器在模式1下 计时采用16位数,最大计数为216-1 (65535),再次加一(65536) 溢出触发中断。根据以上分析可得如下关系:音频对应定时器初值的高8位TH=THL/(28)=(65536-t*f12)256;音频对应定时器初值的低8位TL=THL%(28)=(65536-t*fl 2)%256;附:八度12音阶定时器初值表(只含自然音)低音音频率HZ晶振晶振中音音频率HZ

10、晶振晶振高音音频率HZ晶振晶振名12MHZ11.059名12MHZ11.059名12MHZ11.0592MHz2MHz2MHzDO2620 xF8850 xF91BDO5230 xFC40 xFC8DO10460 xFE210 xFE473ERe2940 xF950 xF9DFRe587OXFCAOXFCERe11750 xFE560 xFE76ADDMi330OXFAl0 xFA8Mi659OXFDO0 xFD4Mi13180 xFE85OXFEA3AA31Fa3490 xFA6OXFADFa6980 xFD30 xFD6Fa13970 xFE9OXFEC884AA7SO392OXFBO40

11、 xFB68SO7840 xFD8OXFDBSO1568OXFECOXFED2319La4400 xFB90OXFBE9La880OXFDCQOXFDF3La1760OXFEE4OXFEF9Si494OXFCO0 xFC5Si988OOXFEO60 xFE2Si1976OX 阡 03OXFFl6CBD2)控制发声节拍每个音符的节拍可通过延时一定的时间来实现,在具体实现时需要 有一个基本的带参延时程序,用于主函数根据不同的音符调用不同的时 延。若以十六分之一音符的时长为基本延时时间,则十六分音符只需调 用一次延时程序,八分音符则需调用两次延时程序,以此类推。3)简谱及其编码*简谱知识音阶CDEF

12、GAB唱名doremifaSOIaSi数字1234567音符音符用数字1至7表示。这7个数字就等于大调的自然音阶。如果是C大调,加上音名,就会是这样:八度如果是高一个八度,就会在数字上方加上一点。如果是低一个八度,就会数字下方加上一点。在中间的那一个八度就什么也不用加。如果要再高一个八度,就在上方垂直加上两点(如:5);要再低一个八度,就在5下方垂直加上两点(如:),如此类推。见下表所示:大调 12. 234 5671 234567j 234567i -H小调 H 2345671234567i23456 56音长通常只有数字的是四分音符。数字下加一条横线,就可令四分音符的长度减半,即成为八分音

13、符;两条横线可令八分音符的长度减半,即 成为十六分音符,余此类推;简单来説,下加横綫数目与五綫谱的符尾 数目相对应。数字后方的横线延长音符,每加一条横线延长一个四分音 符的长度。正如五綫谱的附点一样,数字后方加一点会将音符长度增加 一半。休止符休止符用“o”来表示。比四分休止符长,就只需在每一个四分休止 符再多加一个“o”,不需在后方加上横线。若整个小节均是休止状态的 话,就在每个四分音符加一个“0”,就像是3拍4就写成ttI 000 In , 而4拍4就写成| 0000 |” O无音高音符就像敲击乐的乐器那样是没有音高的,这时,简谱就需要用“X”或“X”表达。例如啦啦队拍手时,简谱上就需如此

14、表达:4/4I扌白手:I X X XXX I XXXXOXX I II小节线正如五綫谱一样,小节与小节之间以纵綫(称小节线)分隔,乐曲终止 以一粗一细的直綫表示(但是一般不分粗细);重复乐段以纵綫后两点表 示开始,纵綫前两点表示终止。拍号拍号的表达方式为:“2/4”、“3/4”、“4/4”、“6/8”等等。 拍号一般都是責于调号的后方。变调与调号表示调号有两种方法:可以直接写“C调”,“C小调”或“Key:C”,“Key: Cm” 0亦可写清楚主音代表哪一个音,例如I=C,就是 C大调(大调以1为主音)。6二C就是C小调(小调以6为主音)。2=D 就是D多利安调(多利安调以2为主音)。五线谱有

15、升降号,简谱同样 有升降号。在简谱中,若需表达升降号,就把符号加在数字1至7的前 方,让该音升高或降低。若要把升降号加在调号跟和弦CDEFGAB七个 字母,就须加在它们的后方。在五綫谱中,C小调要把B-E-A三个音降 低半音。所以表达它的和声小调时,就会把一个还原号放在Bb前面。 简谱就一定得写# 5,因为5不能下降。延音线、圆滑线与其他音乐符号简谱延音线(Tie)跟圆滑綫(SlUr)都是跟五线谱相同,一定得責在数字上方。表达跳音(StaCCatO)时需要特别小心,因为很容易会跟低 八度的那一点混淆,因此在表达跳音时把那一点写得粗点及低点。*简谱编码将简谱中的每个音符进行编码,每个音符用一个U

16、nSigned Char字符类型 表示,简谱可用一个unsigned Char字符数组表示。字符的前四位表示音频, 可以表示0-f共十六个音符。本实验中采用了中音区和高音区。中音CIO-Si分别 编码为17,高音do-si分别编码为8E,停顿编为0。字符的后四位表示节拍, 节拍以十六分音符为单位(在本程序中为165ms), 一拍即四分音符等于4个十 六分音符,编为4,其它的播放时间以此类推。以OXff作为曲谱的结束标志。程 序从数组中取岀一个数,然后分离出高4位得到音调,将值赋给定时器0,得 到音调;接着分离出该数的低4位,得到节拍。本实验中播放音乐使用简谱如下:瘙八戒酱媳36 3 J * a

17、in S 1023 6 M3 ,5 6:6 i:6I3 5竺竺 a.6R3 5jS6、:3宓2 2|腔Ig 3 IB HIl将其编码成:UChar COde ZbjbXf= 0 x64QXA3,OxC 1 z0 xA2z0 x62z0 x84z0 x61,0 x81,0 x61 z0 xA4z0 xA 1 z0 x91ZOXA1 z0 x81 z0 x64z0 xA3z0 xC 1 r0 xD2z0 xD2z0 xD2z0 xA2z0 xC4z0 xA 1QXC1ZOXA1ZOXC1 z0 xD2 z0 xD2z0 xD2z0 xA2z0 xC4z0 xC2z0 x62z0 xC2z0 x62

18、z0 xA2z0 xA2z0 x84z0 x94z0 x94z0 x 92,0 x81,0 x91,0 xA2,0 xC2,0 xD4,0 xE4,0 xA4,0 xE4,0 xA2,0 xE2,0 xA2,0 xE2,0 xA2, OXA2,0 x84QX94,0 x94QX92,0 x81,0 x91,0 xA2,0 xC2,0 xD8;2.3程序流图及说明大循环从简谱数纟冃中取出吉符陆始临时变呈根IE音频蜀值在初值数 细中M収I初値的扶闭1H;釜;护数佰i井彳后延迟5开始temp, i, jp初财化定时器、temp=zbjbxf i取言频数偵YN判0退出jp=temp/16 Z判断简谱足

19、否到达终点、Y1TMOD=OXoIIE=OX82JP=Otimeh=chuzhijp*2延迟后买闭 timel=ChUZhi jp*2+l;每佶符、Vi累加TRO=I2013年1月6日TRO=Ofm=l程序代码:delay (temp%16)TRO=Ofm=ldelay (5)i+中断服 务程序(主程序流程图)#include #define UChar UnSigneCl Char#Ciefine Uint UnSigned intSbit fm=P34;/蜂鸣器控制端口UChar timeh,timel;/用于存放定时器的高8位和低8位UChar COde ZbjbXf=定义猪八戒背媳妇的

20、简谱数组 0 x64z0 xA3ZOXCIZ0 xA2z0 x62z0 x84z0 x61 z0 x81 z0 x6b0 xA4z0 xAl, 0 x91 ZOXAbOx81 z0 x64z0 xA3z0 xC 1 z0 xD2z0 xD2z0 xD2z0 xA2z0 xC4zOXA1 ,OxC 1ZOXA1ZOXC1 z0 xD2z0 xD2z0 xD2z0 xA2z0 xC4z0 xC2z0 x62z0 xC2z0 x62z0 xA2z0 xA2z0 x84z0 x94z0 x94z0 x92z0 x8b0 x91 z0 xA2r0 xC2z0 xD4z0 xE4z0 xA4z0 xE4z

21、0 xA2z0 xE2z0 xA2z0 xE2z0 xA2zOXA2,0 x84,0 x94QX94,0 x92QX81,0 x91,0 xA2QxC2QxD8;适合12M的晶振定时器初值表,高低8位分开UChar COde ChUZhi=OxftOxff,/ 占位OXFCZOX8E,/中央 C 调 1-7OXFCZOXEDZOXFDZOX43,OXFDZOx6AzOXFDZOXB3,OXFDZOxF3zOXFEZOx2Dz0 xFE,0 x47/高八度 1-7OXFEZOx76rOXFEZOXAbOXFEZOXC7,OXFEZOxD9zOXFEzOXF9,OXFFZOx 16;VOid ti

22、mer() interrupt 1定时器O中断服务程序THOMimeh;将timeh赋给计时器的高8位TLOMimeI; 将timel赋给计时器的低8位fm二fm; 定时器每次到时将蜂鸣器反相VOid dely(uit Z) 延时165MS,即十六分音符 Uint y;for(z;z0;z-)for(y=l 9000;y0;y-);/大致时间VOid delay! (Uint Z) 延时】MS Uint y;for(乙 z 0;z-)for(y=l 12;y0;y-);/大致时间VOid mai()Uint temp; /存放简谱数组中的每一个音符的临时变量UChar 匸 0;UChQr jp

23、; /jp用于取岀temp中的高8位和低8位TMOD=OXOI;设責定时器TO工作于方式1IE=OX82; 允许To中断WhiIe(I)temp=zbjbxf i;if(temp=Oxff)break;jp=temp16; /取数的高4位,音频数值if(jp!=O)timeh=chuzhijp*2;/构造定时器初值高8位 timel=chuzhijp*2+l; 构造定时器初值低8位 TRO=I; 开定时器elseTRO=O; 关定时器fm=l;关蜂鸣器delay(temp%16); 取数的低4位,节拍(音符总时延)TRO=O; 唱完一个音停5MSfm=l;delayl (5);/TRO=I;i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论