首页 蜂鸣器播放音乐课程设计

蜂鸣器播放音乐课程设计

举报
开通vip

蜂鸣器播放音乐课程设计蜂鸣器播放音乐课程设计 《单片机原理及应用》课程设计 基于蜂鸣器播放音乐的课程设计 设计题目: 音乐播放器 姓 名: 徐 鹰 (29) 任课教师: 袁 鹏 专业班级: 电子信息工程(1)班 学 院: 青岛工学院 基于蜂鸣器播放音乐的课程设计 引言 这学期我们学习了单片机原理及接口技术这一门实用而又生动的课程,初次接触到它就被它丰富的内容所吸引。 单片机自20世纪70年代问世以来,已得到了十分广泛的应用。随着单片机 的集成度越来越高以及单片机系统的广泛应用,对软件编程的要求也越来越高,要求编程人...

蜂鸣器播放音乐课程设计
蜂鸣器播放音乐课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 《单片机原理及应用》课程设计 基于蜂鸣器播放音乐的课程设计 设计 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目: 音乐播放器 姓 名: 徐 鹰 (29) 任课教师: 袁 鹏 专业班级: 电子信息工程(1)班 学 院: 青岛工学院 基于蜂鸣器播放音乐的课程设计 引言 这学期我们学习了单片机原理及接口技术这一门实用而又生动的课程,初次接触到它就被它丰富的内容所吸引。 单片机自20世纪70年代问世以来,已得到了十分广泛的应用。随着单片机 的集成度越来越高以及单片机系统的广泛应用,对软件编程的要求也越来越高,要求编程人员在短时间内编写出执行效率高、运行可靠的程序代码。单片机具有一些突出的有点:体积小、重量轻、耗电少、电源单一、功能强、价格低、运行速度较快、抗干扰能力强、可行性高,所以在如今的绝大数的领域中都能够看到单片机的身影。 本次设计是基于AT89C51芯片的电路为基础,外加上三极管的放大、放音设备蜂鸣器,以此来实现音乐硬件控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其播放出优美的音乐。 关键字:单片机 蜂鸣器 AT89C51芯片 音乐 目 录 第一章 绪论.................................................................. 4 1.1课程设计目的 ........................................................... 4 1.2课程设计任务 ........................................................... 4 1.3课程设计的意义 ......................................................... 4 设计原理 .............................................................. 5 第二章 2.1 设计原理 ............................................................... 5 2.1.1 基本原理简述 ....................................................... 5 第三章 ATMEL 89C51 简介 ...................................................... 7 ATMEL 89C51简介 ....................................................... 7 3.1 3.1.1 AT89C51单片机 ..................................................... 7 3.1.2 单片机CPU结构 ..................................................... 8 3.1.3 AT89C51用户系统 ................................................... 8 3.1.4 引脚介绍 ........................................................... 9 3.1.5 蜂鸣器原理 ......................................................... 9 第四章 软件编程计..................................................................................................................10 4.1 编程思路..............................................................10 4.2 编程 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 的设计................................................................................................................11 第五章 设结 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf ..............................................................12 第六章 程序代码...................................................................................................................13 第一章 绪论 1.1课程设计目的 应用单片机,基于蜂鸣器播放音乐,利用它的原理组成一个简单的音乐盒。 1.2课程设计任务 1)以单片机为核心部件组成一个简单音乐播放器; 2)利用单片机的定时器产生乐谱的各种频率方波,信号经过放大后由蜂鸣 器发出声音; 1.3课程设计的意义 利用开发板及组成的器件,在软件及硬件上进一步了解单片机的原理,深入了解了单片机C51语言的实际应用,能更深地理解课堂上所学的内容,巩固C语言程序编写,亲身体会作为一名设计人员所需要具备的各种能力,学会理论知识联系实际,提高我们发现问题,分析问题,解决问题和实践动手的能力。 第二章 设计原理 2.1 设计原理 2.1.1 基本原理简述 声音是通过振动产生的。单片机对某一引脚以一定的频率循环置1置0,该引脚便产生一定频率的方波,方波通过放大,作用于一定的物理实件(蜂鸣器),就产生了一定频率的声音。若改变输出方波的频率,产生的声音随之改变。通过控制输出方波的时间长短,声音的长短也可以得到控制,因此,根据乐谱,以类似的音节及同样的节拍,单片机就可以产生电子音乐。音乐的播放选择可以通过按键的输入得以实现。 为简便起见,以一定的频率方波产生的音在其每个周期内高低幅值得时间各占一半因此,输出引脚在每个方波周期内要动作两次:一次升高,一次降低。即输出引脚的频率是原音频率的两倍。 方波的产生由定时器控制。定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。必须考虑到中断响应时间的影响,尤其在高音部分,若忽略中断响应时间,会使音频频率比标准值低几十Hz,相当于1/4音程,很容易听出来,对低音部分影响不大。一般中断响应时间为3,6个机器周期,经过反复试验取5个机器周期作为校正最为恰当,表1中所给的定时初值就是考虑中断响应后的定时常数。另外,为避免T1中断可能引起杂音,应将定时器T0中断设为高优先级。这样编写出来的程序播放的音与标准音叉进行差频校音,非常准确和谐。 2.1.2 关于音乐的原理知识 [1] 在音乐中使用的各个固定频率的音叫音级。常用符号C、D、E、F、G、A、 1122B、c、d、e、……a、b、c、d……表示,它们对应于钢琴上的白键。两音之间音高的距离叫音程。在上述音级中,E与F、B与C之间音高的距离仅为其它相邻音级之间距离的一半,称它们之间的音程为半音音程,而称其它相邻各音之间的距离为全音音程。在这些全音音程之间又加入新的半音音级,用符号,C、,D、,F、,G、,A、,c、,d、,f、……表示,对应于钢琴上的黑键。音持续时间 的长短即时值,一般用拍数表示。休止符表示暂停发音。下面分别是各音符及对应频率(表2.1)与节拍表(表2.2) 表2.1 各音符及对应频率 音符 低DO 低#DO 低RE 低#RE 低MI 低EA 简谱码 DO_L DO#_L RE_L RE#_L MI_L FA_L 频率 262HZ 277HZ 294HZ 311HZ 330HZ 349HZ 音符 低#FA 低SO 低#SO 低LA 低#LA 低SI 简谱码 FA#_L SO_L SO#_L LA_L LA#_L SI_L 频率 370HZ 393HZ 415HZ 440HZ 466HZ 494HZ 音符 中DO 中#DO 中RE 中#RE 中MI 中EA 简谱码 DO DO# RE RE# MI FA 频率 523HZ 554HZ 587HZ 622HZ 659HZ 698HZ 音符 中#FA 中SO 中#SO 中LA 中#LA 中SI 简谱码 FA# SO SO# LA LA# SI 频率 740HZ 785HZ 831HZ 880HZ 932HZ 988HZ 音符 高DO 高#DO 高RE 高#RE 高MI 高EA 简谱码 DO_H DO#_H RE_H RE#_H MI_H FA_H 频率 1047HZ 1109HZ 1174HZ 1245HZ 1318HZ 1397HZ 音符 高#FA 高SO 高#SO 高LA 高#LA 高SI 简谱码 FA#_H SO_H SO#_H LA_H LA#_H SI_H 频率 1480HZ 1568HZ 1661HZ 1760HZ 1865HZ 1976HZ 每个音符分为简谱码和节拍码。简谱码为D0-L到SI-H,节拍码为1到16。对应的节拍表如表2.2所示。 对应的拍子: 2/2。。。。。。。。。。。以二分音符为一拍,每小节有两拍(二分音符代表一拍) 2/4。。。。。。。。。。。以四分音符为一拍,每小节有两拍(四分音符代表一拍) 3/4。。。。。。。。。。。以四分音符为一拍,每小节有三拍(四分音符代表一拍) 4/4。。。。。。。。。。。以四分音符为一拍,每小节有四拍(四分音符代表一拍) 表2.2 节拍表 拍数 字符 拍数 字符 1/8 00H 2 08H 1/4 01H 5/2 09H 1/2 02H 3 0AH 3/4 03H 7/2 0BH 1 04H 4 0CH 5/4 05H 5 0DH 3/2 06H 6 0EH 7/4 07H 8 0FH 第三章 ATMEL 89C51概况 3.1 ATMEL 89C51简介 3.1.1 AT89C51单片机 AT89C51是美国ATMEL公司推出的系列单片机,将多种功能的8位CPU与FPEROM(快闪可编程/擦除只读存储器)结合在一个芯片上,是一种低功耗、高性能的CMOS控制器,为很多嵌入式控制应用提供了非常灵活而又价格适宜的方案,其性能价格比远高于同类芯片。它与MCS-51指令系统兼容,片内FPEROM允许对程序存储器在线重复编程,也可用常规的EPROM编程器编程,可循环写入/擦除1000次。89C51内含4KB的FPEROM,一般的EEPROM的字节擦除时间和写入时间基本上均为10ms,对于任一个实时控制系统来说,这样长的时间是不可能在线修改程序的。 3.1.2 单片机CPU结构(如图3.1) 图3.1单片机CPU结构 3.1.3 AT89C51用户系统 , CPU为Atmel公司生产的89C51/89C52/89C55等。出厂所配晶振频率为 11.0592MH,每个机器周期为1.085us,用户更换晶振以提高速度; , 存贮器为64K,前4K/8K20K在CPU内部,其它程序在EPR0M27512中; , 数据存贮器为32K(62256),地址为8000—FFFFH; , ?/O扩展8155,片内RAM地址?200O-20FFH ; , 8155命令口地址为?2100H ; , A口地址?21O1H B口地址:2102H C口地址:2103H ; , T低八位?2104H T高八位?2105H ; , 多路模拟开关的使用? IN0?P1=0F8H IN4:P1=0FCH IN1?P1=0F9H IN5:P1=OFDH IN2?P1=0FAH IN5:P1=0FEH IN3?P1=0FBH IN7:P1=0FFH -507FH ; , 不掉电数据存贮器为?500EH , 控制板?160x1O9(mm) 供电?+5V300mA +12V100mA -12V100mA ; 擦除只读存储器, AT89C51是一种低功耗、高性能的片内含有4KB快闪可编程/ (FPEROM-Flash Programmable and Eraseable Read Only Memory)的8位 CMOS微控制器,使用高密度、非易失存储技术制造,并且与80C51引脚和指 令系统完全兼容; , 主要性能: 与MCS-51 微控制器产品系列兼容; 片内有4KB可在线重复编程的快闪擦写存储器 。 3.1.4 引脚分布如图(3.2) 图3.2 89C51引脚图 3.1.5 蜂鸣器原理如图(3.3) 图3.3 蜂鸣器原理图 第四章 软件编程设计 4.1 编程思路 想要产生音频信号,只要算出某一音频的周期(频率的倒数),将此周期除以2即为半周期的时间,利用定时器计时此半周期时间,计时到后取反输出,重复此过程即得到此频率的声音信号。此信号从P3.0脚输出。 定时器T0工作在定时方式1,改变TH0及TL0,产生不同的音频频率。必须考虑到中断响应时间的影响,尤其在高音部分,若忽略中断响应时间,会使音频频率比标准值低几十Hz,相当于1/4音程,很容易听出来,对低音部分影响不大。一般中断响应时间为3,6个机器周期,经过反复试验取5个机器周期作为校正最为恰当,表2.1中所给的定时初值就是考虑中断响应后的定时常数。另外,为避免T1中断可能引起杂音,应将定时器T0中断设为高优先级。这样编写出来的程序播放的音与标准音叉进行差频校音,非常准确和谐。本设计中单片机晶振频率为11.0592MHz。 每个音符使用两个字节。低位字节(偶地址)代表音级,00H表示不发音(休止符),01H,30H依次表示的音级为c、,c、d、,d、e、f、……a3、,a3、b3 ,详见表2.1。高位字节(奇地址)代表音符的时值(拍数),00H,0FH依次表示拍数为1/8拍(0.10s),8拍(6.40s),见表2.2。乐曲的结束标志是两个字节:0FFH,0FFH。 设计延时程序125ms,来控制节拍,并在延时中判断是否有停止键按下,以便随时停止音乐。改变延时程序的延迟时间,即可实现歌曲的快慢演奏。 主程序的任务是按顺序读取数据表中的字节,根据情况调用音级子程序和演唱子程序,启动定时器T0;通过延时控制节拍,并循环回音级子程序,等待演唱完毕。 要编写的乐谱按要求以音符字节数据表的形式存放在程序中,改变乐曲就是通过改变该数据表的内容来实现的。 主程序的任务是按顺序读取数据表中的字节,根据情况调用音级子程序和音长子程序,启动定时器T0;根据定时器T1应中断的次数,启动定时器T1。数据表读完后,根据所设置的循环演奏次数决定是否结束程序。音级子程序的任务是取出字节中的音级部分,分析TH0和TL0中应送入何值,送给33H,34H。演唱子程序的任务是取出对应频率值,并乘以2,启动T0,实现发音。之后执行延时程序,体现节拍,依此循环,直到音乐结束。 当乐曲较长时(超过254个字节),数据表指针溢出,应及时修改基址寄存器DPTR内容,即数据表的表头指针。 4.2 综合调试 在开发板上进行调试,先是进行单个模块调试,在开发板上进行播放歌曲的调试,使其能单曲循环播放,当有开关键按下时,就停止播放歌曲,再按下时,又重新播放歌曲。最终实现当有控制键按下时,能够演奏对应的歌曲,再按播放下一首,当停止键按下时,停止播放歌曲。 第五章 心得体会 此次课程设计培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。 回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近俩星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。 通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。 第六章 程序代码 #include #define uchar unsigned char #define yx 4/5 /* 定义普通音符演奏的长度分率 */ #define plen 2 /* 定义晶振的时钟周期(us) */ #define uchar unsigned char #define uint unsigned int sbit speaker=P3^5; /* ------------------下面是曲谱 ------------------------------ */ uchar code sound[100]= {25,2,23,3,25,3,31,1,26,2,31,3,26,3,25,1,25,2,21,3,22,3,23,2,22,3,21,3,22,0, 25,2,23,3,25,3,31,102,27,3,26,2,31,2,25,1,25,2,22,3,23,3,24,102,17,3, 21,0}; uchar tc0,tc1,sc0,sc1; /* 音长和音符两个计数器初值暂存 */ void play(sound,dh,sj,speed,point1,point2) uchar code sound[]; /* 接受乐曲数组的地址 */ uchar speed,sj,dh; /* 速度、八度、调号 */ uint point1,point2; /* 乐曲开始、结束指针 */ { uint code fftab[12]={262,277,294,311,330,349,369,392,415,440,466,494}; /* 频率表*/ uchar code stab[7]={0,2,4,5,7,9,11}; /* 1~7 在频率表中的位置 */ uchar code ltab[7]={1,2,4,8,16,32,64}; uchar tl,ts,sl,sm,sh,slen,xg,ii,fd; uint point,hz,tc,sc,len,len0,len1,len2,len4,i,ftab[12]; speaker=1; for(i=0;i<12;i++) /* 根据调号及升降八度来计算音符频率 */ { ii=i+dh; if(ii>11) { ii=ii-12; ftab[i]=fftab[ii]*2; } else ftab[i]=fftab[ii]; if(sj==1) ftab[i]>>=2; if(sj==3) ftab[i]<<=2; } point=point1; ts=sound[point]; tl=sound[point+1]; /* 读出第一个音符和它时时值 */ tc=65535-10000/plen; /* 算出10ms 的初装值 */ tc0=tc%256; /* 计算TL1 应装入的初值 */ tc1=tc/256; /* 计算TH1 应装入的初值 */ len0=12000/speed; /* 算出1 分音符的长度(几个10ms) */ len4=len0/4; /* 算出4 分音符的长度 */ len4=len4-len4*yx; /* 普通音最长间隔标准 */ TMOD=0x11; TH1=tc1; TL1=tc0; ET0=1; EA=1; TR0=0; TR1=1; while(point<=point2) { sl=ts%10; /* 计算出音符 */ sh=ts/100; /* 计算出是否升半 */ sm=ts/10%10; /* 计算出高低音 */ hz=ftab[stab[sl-1]+sh]; /* 查出对应音符的频率 */ if(sl!=0) { if (sm==1) hz>>=2; /* 若是低音 */ if (sm==3) hz<<=2; /* 若是高音 */ sc=(50000/hz)*10/plen; /* 计算脉冲个数 */ sc=65536-sc; /* 计算计数器初值 */ sc0=sc%256; /* 算出TL0 应装初值 */ sc1=sc/256; /* 算出TH0 应装初值 */ TH0=sc1; /* 装入初值 */ TL0=sc0+12; /* 加12 是对中断延时的补偿 */ } slen=ltab[tl%10]; /* 算出是几分音符 */ ) */ xg=tl/10%10; /* 算出音符类型(0 普通1 连音2 顿音fd=tl/100; len=len0/slen; /* 算出连音音符演奏的长度(多少个10ms)*/ if (fd==1) len=len+len/2; if(xg!=1) if(xg==0) /* 算出普通音符的演奏长度 */ if (slen<=4) len1=len-len4; else len1=len*yx; else len1=len/2; /* 算出顿音的演奏长度 */ else len1=len; if(sl==0) len1=0; len2=len-len1; /* 算出不发音的长度 */ if (sl!=0) { TR0=1; for(i=len1;i>0;i--) /* 发规定长度的音 */ { while(TF1==0); TH1=tc1; TL1=tc0; TF1=0; } } if(len2!=0) { TR0=0; speaker=1; for(i=len2;i>0;i--) /* 音符间的间隔 */ { while(TF1==0); TH1=tc1; TL1=tc0; TF1=0; } } point+=2; /* 音符指针下移 */ ts=sound[point]; tl=sound[point+1]; /* 读出下一个音符和它时时值 */ } } void yin() interrupt 1 /* 音符发生程序(中断服务程序)*/ { speaker=~speaker; TH0=sc1; TL0=sc0; } //============================================== main() { while(1) { play(sound,0,2,60,0,57); play(sound,0,1,60,0,57); play(sound,0,3,60,0,57); play(sound,0,2,40,0,57); play(sound,5,2,60,0,57); play(sound,0,2,80,0,57); } }
本文档为【蜂鸣器播放音乐课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_614050
暂无简介~
格式:doc
大小:86KB
软件:Word
页数:16
分类:互联网
上传时间:2018-01-12
浏览量:122