单片机课程设计(论文)-音乐播放器.doc_第1页
单片机课程设计(论文)-音乐播放器.doc_第2页
单片机课程设计(论文)-音乐播放器.doc_第3页
单片机课程设计(论文)-音乐播放器.doc_第4页
单片机课程设计(论文)-音乐播放器.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

摘 要现当今,单片机的应用无处不在.利用单片机控制音乐播放也多不胜举,音乐芯片也相当之多,而利用单片机存储音乐,控制播放最为广泛.它有功能多价格优外部电路简单的特点,深受音乐爱好者及音乐芯片制造商的青昧,用at89c52单片机及少数外部点路控制music播放,通过扬声器进行乐曲播放。at89c52是一种带8k字节闪烁可编程可擦除只读存储器(fperomflash programmable and erasable read only memory)的低电压,高性能cmos8位微处理器。 对于单片机产生音乐,关键是控制频率的输出.我们知道,不同的声音对应不同的频率,产生有规律的频率输出就可以得到相应規律的声音.音乐中,有8个基本音符:doremifasolaxido,八个不同的音符对应著不同的頻率.只要我们对照音符输出相对应的频率,就可以产生美妙的音乐了.本文中采用了t0中断的方法产生不同频率,并用三键控制暂停和选曲。关键词:单片机 at89c52 音乐芯片i目 录摘 要i1 前言12方案设计12.1要求12.2工程方案12.3开发工具23硬件设计23.1电路原理图23.2各单元电路详细设计24 软件设计54.1数码音乐产生原理54.2 分析与设计64.3程序流程图74.4具体代码实现75 仿真分析255.1 仿真步骤255.2仿真结果分析256 课程设计总结27参考文献281 前言目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。在音乐播放方面,利用单片机储存音乐,控制播放也越来越广泛。为了更好的掌握单片机的应用,用单片机设计一个音乐播放器。这样可以有效的将理论知识与实践相结合。本文基于at89c52单片机的实时控制和数据处理的基本原理,综合运用大学所学的电子技术进行了分析,并给出了具体的实例。设计了一个以单片机为核心的音乐播放系统。其中利用数码管显示播放曲目,使用三个按键开关进行调节,分别是上一曲、下一曲以及开始暂停。经过实践证明,本系统运行稳定,具有一定的实用价值。2方案设计2.1要求(1)设计能通过扬声器播放存储于单片机中的音乐,并能通过键盘进行选曲,在数码管中显示曲目。(2)以单片机为控制核心,实现硬件电路的设计、程序设计,并在proteus平台实现仿真;课程设计论文内容正确,结构合理。2.2工程方案单 片机按键控制模块数码管显示模块音乐播放模块图1 系统实现方框图2.3开发工具(1)proteus7.1仿真软件(2)wave编译软件3硬件设计3.1电路原理图图2 音乐播放器电路图 3.2各单元电路详细设计(1)单片机简介:89c52单片机拥有8kb的片内rom和128b的片内ram。rom和ram的片外寻址范围都为64kb。单片机拥有32个并行口和1个串行口。在89c52单片机中存在5个中断源,其中有两个外部中断源、两个内部中断源和一个串行中断源。图3 at89c52单片机(2)振荡器电路:at89c52单片机单片机内部的振荡电路是一个到增益反相放大器,引线xtal1和xtal2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。单片机内部虽然有振荡电路,但要形成时钟,外部还需要附加电路。由于本设计需要高精度参考时钟,故采用石晶振荡和电容构成谐振电路,晶振频率为11.0592mhz。为了保证振荡器振荡的稳定性和起振的快速性,电容选择22pf,设计如图:图4 振荡器电路图(3)显示电路:本设计采用led数码管作为显示模块,由于该系统仅需显示一位数字,故采用七段数码管静态驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的i/o端口进行驱动。静态驱动的优点是编程简单,显示亮度高。 图5 数码管显示电路图(4)键盘接口电路:对于任何电子产品,为了实现人机对话,方便用户使用,键盘是必不可少功能配置。由于本系统对键盘要求不高,在这里我们采用独立连接式键盘,简单实用。一般情况下,所有数据输入线都被接成高电平。当键按下时,与之相连的数据输入线将被拉成低电平。并直接使用i/o中的p3口作为键盘的接口端,可省掉输出锁存器和输入缓冲器,节省成本。设计如图所示:图6 键盘接口电路图(5)发声电路:发声电路由数字扬声器、接地线组成。声音通过单片机的p2.0口输出不同电平使扬声器发声。 图7 发声电路图4 软件设计4.1数码音乐产生原理音调的高低用音阶表示,不同的音阶对应不同的频率。因此,不同频率的方波就可以产生音阶,音阶与频率的关系见表1。由于频率的倒数是周期,因此可由单片机中的定时控制方波周期,当定时器计数溢出时产生中断。将与扬声器连接的p1.7取反后就可得到方波的周期,从而达到了控制频率,即音阶的目的表1 音阶与频率的关系及方式1下定时器的初值音阶频率(hz)定时器初值音阶频率(hz)定时器初值音阶频率(hz)定时器初值1234567013114716517519622024700f85eh0f933h0f9f0h0fa49h0fae6h0fb74h,0fbf4h0100h1234567026229433034939244049400fc2fh0fc99h0fcf8h0fd22h0fd73h0fdbah0fdfah0100h1234567052358765969878488098800fe17h0fe4ch0fe7ch0fe91h0feb9h0feddh0fefdh0100h低八度音中音高八度音注:0表示简谱中的空拍当晶体振荡频率为6.144mhz,定时器工作在方式1下时,若各音阶相对应的定时器计数初值为x,则可根据下式计算x:音调的长短用节拍数表示(例如1/4拍、2/4拍、),不同节拍数的不同音符的组合形成乐谱。程序中,音的节拍可由延时子程序实现。延时子程序设定为四分之一拍,节拍值只能是它的整数倍。4.2 分析与设计程序设计是指设计、编制、调试程序的方法和过程。它是目标明确的智力活动。在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件也占有重要的地位。为了完成本次课程设计,在进行软件设计时,充分利用单片机的特点。at89c52有五个中断,其中有两个外部中断。在设计时,将外部中断0和外部中断1用于曲目的选择,具体设计如下:out bit p2.0 ;定义音频输出端口p2.0n equ 3;歌曲总数out_num equ p1;数码管显视当前所放歌曲曲数 org 0000h ajmp main org 0003h ajmp last_song ;外部中断0用于接上一曲歌按键 org 000bh ajmp f_t0 ;定时器0用于定时,作音符发生器用 org 0013hq4: ajmp next_song ;外部中断1接下一曲歌按键 org 001bh ajmp start_pause ;定时器1用计数,这里用作中断,接开始/暂停键,初值为0ffh,方式24.3程序流程图图8 系统流程图4.4具体代码实现out bit p2.0 ;定义音频输出端口,p2.0n equ 3;歌曲总数out_num equ p1;数码管显视当前所放歌曲曲数 org 0000h ajmp main org 0003h ajmp last_song ;外部中断0用于接上一曲歌按键 org 000bh ajmp f_t0 ;定时器0用于定时,作音符发生器用 org 0013hq4: ajmp next_song ;外部中断1接下一曲歌按键 org 001bh ajmp start_pause ;定时器1用计数,这里用作中断,接开始/暂停键,初值为0ffh,方式2 org 0030hmain: mov sp,#60h mov dptr,#table ;dprt指向每首歌曲的入口地址的地址。 mov r0,#30h ;r0中存入数据30h mov r5,#00h;r5中存放表table中正在执行操作的序号 mov r6,#1 ;r6存放正在设置入口信息的歌曲数set_tab: mov a,r5 ;设置每首歌曲的入口信息,存放在以30h开始的存储单元中。 movc a,a+dptr mov r0,a inc r5 inc r0 mov a,r5 movc a,a+dptr ;取出第一节拍数,将表中地址送入累加器a mov r0,a inc r5 inc r0 mov a,r5 movc a,a+dptr mov r0,a ;将累加器a的内容放入r0内的地址中 inc r0 inc r5 mov a,r5 movc a,a+dptr mov r0,a inc r0 inc r5 inc r6 ;设置完一首歌曲后,歌曲数加一 cjne r6,#n+1,set_tab ;是否设置完,没有便继续,否则进行下面的操作*对中断,计数器的相关参数进行设置* mov tmod, #61h;计数器0工作方式1,计数器1工作方式2 mov th1,#0ffh;给计数器1置初值0ffh,又由于是工作方式2,所以 mov tl1,#0ffh;计数器计数为1,相当于一外部中断。 setb et1;允许计数器1中断 setb et0 ;允许计数器具0中断 clr pt0 ;计数器0为低优先级 setb pt1;计数器1为高优先级 setb it0 ;外部中断0为跳沿触发 setb px0 ;高优先级 setb it1 ;外部中断1为跳沿触发 setb px1 ;高优先级 setb ex1 ;允许外部中断1中断 setb ex0 ;允许外部中断定0中断 setb ea ;开中断总开关 setb tr1 ;定时器1开始工作,作中断用 setb out;音频输出端口初始化 ;* ;设置结束 clr f0 ;设置f0=0,用来作暂停/播放的标置位用 mov 22h,#01h ;22h单元中存放正在播放的歌曲编号 mov dptr,#out_tab ;将正在播放的歌曲编号送数码管显视 mov a,22h movc a,a+dptr mov out_num,a mov r7,#00h ;r7中存放歌曲总信息的入口地址 start0:mov r4,#00h ;r4存放当前正在播放歌曲的第几个节拍数 mov r0,#30h ;30h开始的单元中存放歌曲的入口信息 mov a,r7 ;将歌曲的节拍表的入口地址送到dptr add a,r0 mov r0,a mov dph,r0 inc r0 mov dpl,r0 inc r0 mov a,r4 inc r4 movc a,a+dptr ;取出第一节拍数,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符 mov 26h,a;将取出的音符数+节拍数保存在26h单元中next: mov r0,#30h ;开始取出歌曲的第一个数据 mov a,r7 add a,r0 mov r0,a mov dph,r0 inc r0 mov dpl,r0 inc r0 mov a,r4 inc r4 movc a,a+dptr ;放在a中;* jz end0 ;若为0,则表示为休止符,不唱,本次音符不唱, mov r1,a ;不为0,取出节拍数 anl a,#0fh mov r2,a mov a,r1 swap a anl a,#0fh jnz sing ;音符不为0,唱 clr tr0 ;为0,不唱,关频率发生器 sjmp sing1 sing: dec a ;开始唱,进行相应的数据处理 mov r3,a rl a mov dph,r0 inc r0 mov dpl,r0 inc r0 movc a,a+dptr mov 21h,a mov th0,a mov a,r3 rl a inc a movc a,a+dptr mov 20h,a mov tl0,a setb tr0 ;开唱sing1:lcall delay ;每个音符唱多久 jb f0,for ;是否暂停, ajmp next ;没有暂停,继续for: clr tr0 ;暂停,不唱 jb f0,$ ;等待播放 ajmp next ;开始播放end0: clr tr0 ;不唱 mov a,22h ;唱完处理 cjne a,#n,ww ;是不是全部歌曲都唱完 mov 22h,#01h ;全部唱完,则从第一首开始再唱 mov r7,#00h mov out_num,#06h ;数码管显视第一首歌曲编号 ajmp wwwww: mov a,r7 ;没有全部唱完,唱下一首,歌曲的入口信息调整 add a,#4 mov r7,a inc 22h clr ea push dph push dpl mov a,22h mov dptr,#out_tab movc a,a+dptr mov out_num,a ;数码管显视相应的歌曲编号 pop dpl pop dphwww: setb ea ajmp start0 ;开始下一首的演唱f_t0: mov th0,21h ;定时器0置初值 mov tl0,20h cpl out ;频率产生 retinext_song: push acc ;下一曲中断程序处理,保护现场 push dph push dpl clr ea ;关中断 mov a,22h cjne a,#n,q ;是最后一首吗? mov r7,#00h ;是最后一首,则r7指向第一首,演唱第一首 mov 22h,#01h ajmp back q: inc 22h ;不是最后一首,唱下一首,r7内容加4,歌曲数加1 mov a,r7 add a,#4 mov r7,aback: mov r4,#00h ;数码管显视相应的歌曲编号 mov a,22h mov dptr,#out_tab movc a,a+dptr mov out_num,a;* mov b,r0 ;对下首要演唱的歌曲的几分拍进行调整,同时对r0中的内容进行保护 mov r4,#00h mov r0,#30h mov a,r7 add a,r0 mov r0,a mov dph,r0 inc r0 mov dpl,r0 inc r0 mov a,r4 inc r4 movc a,a+dptr mov 26h,a ;结果存入26h单元中 dec r4 mov r0,b ;恢复r0中的内容;* pop dpl;恢复现场 pop dph pop acc setb ea reti ;中断返回last_song: push acc ;上一曲中断程序处理开始,保护现场 push dph push dpl clr ea ;关中断 mov a,22h ;曲目数送a cjne a,#1,qq ;是否是第一首 mov 22h,#n ;是第一首歌曲 mov b,#4 ;将r7指向最后一首歌曲 mov a,#n-1 mul ab mov r7,a ajmp back2 ;处理结束qq: dec 22h mov a,r7 ;r7减4 subb a,#4 mov r7,aback2: mov r4,#00h mov a,22h mov dptr,#out_tab movc a,a+dptr mov out_num,a ;数码管显视相应歌曲的编号;* mov b,r0;对下首要演唱的歌曲的几分拍进行调整,同时对r0中的内容进行保护 mov r4,#00h mov r0,#30h mov a,r7 add a,r0 mov r0,a mov dph,r0 inc r0 mov dpl,r0 inc r0 mov a,r4 inc r4 movc a,a+dptr mov 26h,a ;结果存入26h单元中 dec r4 mov r0,b;r0中的内容恢复;* pop dpl ;恢复现场 pop dph pop acc setb ea reti ;中断返回start_pause:cpl f0 ;开始/暂停中断处理程序,将标置位取反 jb f0,return ;为1返回 setb tr0 ;为0则播放return: reti ;中断返回delay: mov 27h,26h ;音符演奏时间控制d2: mov 28h,#125d3: mov 29h,#248 djnz 29h,$ djnz 28h,d3 djnz 27h,d2 djnz r2,delay retout_tab: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,73h ;共阴数码管显视用;out_tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h,86h,8eh,0ffh ;共阳table: dw song1,table1,song2,table2,song3,table3table1:dw 64580,64684,64777,64820,64898,64968,65030 dw 63628,63835,64021,64103,64260,64400,64524song1: db 04h ;1=c 2/4 军港之夜db 32h,54h,52h,32h,54h,52h,32h,12h,12h,32h,32h,54h,52h,32h,52h,52h,32h,32h,21h,31h,24h,0e2h,0d1h,0e1h,0d2h,0c2h,14h,14hdb 0c2h,32h,32h,12h,21h,31h,24h,32h,34h,0d2h,0c2h,14h,14h,32h,52h,52h,32h,52h,54h,32h,34h,31h,21h,12h,24h,24hdb 34h,0e2h,0c2h,0d1h,0e1h,0d4h,12h,0e2h,32h,32h,0e2h,0d1h,0e1h,0d4h,0d2h,0e2h,32h,32h,0e2h,0e2h,0d1h,0e1h,0d4hdb 22h,0d1h,11h,0e2h,0d2h,0c4h,0c4h,32h,52h,52h,32h,62h,5h,61h,54h,31h,52h,31h,12h,31h,31h,32h,54h,52h,32h,52h,52h,32hdb 32h,21h,31h,24h,0e2h,0d1h,0e1h,0d2h,0c2h,34h,34h,32h,52h,52,32h,62h,51h,61h,54h,31h,52h,31h,12h,32h,12h,32h,32h,54h,52hdb 32h,52h,52h,31h,31h,32h,21h,31h,24h,0e2h,0d1h,0e1h,0d2h,0c2h,14h,14hdb 32h,52h,52h,32h,32h,21h,31h,24h,0e2h,0d1h,0e1h,0d2h,0c2h,14h,14hdb 0c2h,32h,32h,12h,21h,31h,24h,32h,34h,0d2h,0c2h,14h,14h,32h,52h,52h,32h,52h,54h,32h,34h,31h,21h,12h,24h,24hdb 34h,0e2h,0c2h,0d1h,0e1h,0d4h,12h,0e2h,32h,32h,0e2h,0d1h,0e1h,0d4h,0d2h,0e2h,32h,32h,0e2h,0e2h,0d1h,0e1h,0d4hdb 22h,0d1h,11h,0e2h,0d2h,0c4h,0c4h,32h,52h,52h,32h,62h,5h,61h,54h,31h,52h,31h,12h,31h,31h,32h,54h,52h,32h,52h,52h,32hdb 32h,21h,31h,24h,0e2h,0d1h,0e1h,0d2h,0c2h,34h,34h,32h,52h,52,32h,62h,51h,61h,54h,31h,52h,31h,12h,32h,12h,32h,32h,54h,52hdb 32h,52h,52h,31h,31h,32h,21h,31h,24h,0e2h,0d1h,0e1h,0d2h,0c2h,14h,14hdb 32h,52h,52h,32h,32h,21h,31h,24h,74h,0d2h,0c2h,14h,14h,14h,14hdb 00htable2:dw 63835,64021,64103,64260,64400,64524,64580,64684,64777 dw 64820,64898,64968,65030,65058,65110,65157,65178song2: db 02h;1=c 4/4 死了都要爱db 04h,94hdb 0e8h,0e4h,0e4h,0e8h,0e4h,0f4h,0d4h,0c4h,0b4h,84h,84h,92h,92h,94h,92h,02hdb 0a4h,0a2h,0b2h,0b4h,0c4h,84h,82h,92h,94h,0a4hdb 04h,0c2h,0c2h,0d4h,0c2h,0d2h,0d8h,0d4h,0d2h,92hdb 0e8h,0e4h,0e4h,0e8h,0e4h,0f4h,0d4h,0c4h,0b4h,84h,84h,92h,92h,94h,92h,02hdb 0a4h,0a2h,0b2h,0b4h,0c4h,0e8h,0d8hdb 0c8h,0c8h,08h,08h,78h,28h,38h,34h,24hdb 24h,64h,64h,24h,64h,72h,72h,78h,58h,54h,44h,38h,34h,14h,34h,84h,74h,74h,62h,62h,0d8h,78h,28h,38h,34h,24hdb 24h,64h,64h,24h,64h,72h,72h,72h,94h,92h,94h,0a4h,58h,58h,54h,44h ;音不准db 58h,58h,58h,58h,0a8h,0a8h,0a4h,0b4h,0a4h,84h,0a4h,94h,98h,98h,08hdb 84h,82h,82h,82h,82h,94h,0a2h,94h,92h,82h,74h,72h,74h,72h,72h,72h,72h,92h,91h,91h,94h,54h,74h,94h;*db 0a8h,0a4h,0a2h,0b2h,0c4h,0b4h,0a4h,0a4h,0a4h,92h,92h,98h,82h,72h,78h,04h,0a4h,0a2h,0b2h,0b4h,0c4h,84h,82h,92h,94h,0a4hdb 04h,0c4h,0d4h,0c4h,0c8h,04h,94hdb 0e8h,0e4h,0e4h,0e8h,0e4h,0f4h,0d4h,0c4h,0b4h,84h,84h,92h,92h,94h,92h,02db 0a4h,0a2h,0b2h,0b4h,0c4h,84h,82h,92h,94h,0a4h,04h,0c2h,0c2h,0d4h,0d8h,0d4h,0d2h,92hdb 0e8h,0e4h,0e4h,0e8h,0e4h,0f4h,0d4h,0c4h,0b4h,84h,84h,92h,92h,94h,92h,02db 0a4h,0a2h,0b2h,0b4h,0c4h,84h,82h,92h,94h,0a4h,04h,0c2h,0c2h,0d4h,0d8h,0d4h,0d2h,92h;*db 0a4h,0a2h,0b2h,0b3h,0c4h,0e8h,0d8hdb 0c8h,0c8h,0c8h,08hdb 00h table3: dw 64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,64862 song3: db 03h ;g=2/4 义勇军进行曲db 04h,04h,0c2h,14h,12h,12h,12h,11h,11h,0c2h,0d1h,0e1h,14h,14h,02h,32h,12h,21h,31h,52h,51h,51h,54hdb 32h,31h,31h,12h,11h,31h,52h,51h,31h,24h,24h,24h,64h,54h,24h,34h,52h,34h,52h,32h,21h,31h,12h,11h,21h,34h,04hdb 52h,51h,0d1h,12h,12h,32h,31h,31h,52h,51h,51h,22h,22h,22h,0d2h,0d1h,0d1h,24h,22h,0c2h,14h,12h,12h,34h,32h,32h,54h,54h,54h,54hdb 12h,11h,31h,52h,51h,51h,64h,54h,32h,31h,11h,52h,52h,52h,32h,02h,12h,02h,0c4h,14hdb 0a2h,0a1h,

温馨提示

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

评论

0/150

提交评论