音乐播放器.docx
- 文档编号:10976718
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:29
- 大小:164.02KB
音乐播放器.docx
《音乐播放器.docx》由会员分享,可在线阅读,更多相关《音乐播放器.docx(29页珍藏版)》请在冰豆网上搜索。
音乐播放器
课程设计任务书
学生姓名:
专业班级:
指导教师:
陈德军工作单位:
信息工程学院
题目:
初始条件:
本设计主要使用AT89S52系列单片机的音乐盒来完成,用两个独立的开关来分别控制歌曲的切换和停止功能。
要求完成的主要任务:
(包括课程设计工作量及技术要求,以及说明书撰写等具体要求)
1、课程设计工作量:
1周。
2、技术要求:
1)利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲。
2)能够连续播放数首歌曲,同时可以完成歌曲间的切换和播放歌曲的暂停的功能。
3)在程序运行后,通过改变按动按键一的次数来选择播放的曲目,通过按动按键二来实现歌曲的暂停。
4)确定设计方案,完成实验所需的实验电路的设计,编写实验所需代码,完成实验仿真,搭建实物电路并调试。
3、查阅至少5篇参考文献。
按《武汉理工大学课程设计工作规范》要求撰写设计报告书。
全文用A4纸打印,图纸应符合绘图规范。
时间安排:
1、年月日,布置课设具体实施计划与课程设计报告格式的要求说明。
2、年月日至年月日,方案选择和电路设计。
3、年月日至年月日,电路调试和设计说明书撰写。
4、年月日,上交课程设计成果及报告,同时进行答辩。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
摘要I
AbstractII
1.设计方案简述2
1.1音乐播放器原理总述2
1.2总体设计框图2
2.音乐播放器原理3
2.1实验电路原理3
2.1.1AT89s52简介3
2.1.2时钟振荡电路5
2.1.3复位电路6
2.1.4音频输出电路6
2.1.5开关控制电路7
2.1.6芯片拓展电路7
2.1.7硬件电路图及功能8
2.2音调、节拍以及编码的确定方法9
3.部分代码代码注释及解读10
3.1音乐符号串解释函数10
3.2奏乐函数12
3.3关于加入拓展电路的解释12
4.仿真与调试13
4.1仿真13
4.2调试14
4.2.1调试流程14
4.2.2调试过程中遇到的问题及解决方案14
5.实物图及操作步骤15
5.1音乐播放器实物图15
5.2实物操作步骤15
6.收获、建议及体会16
7.参考文献17
附录源程序及注释18
音乐播放器的设计与实现
摘要
本设计是以AT89S52单片机原理和控制电路来设计音乐播放器的硬件电路了,并通过C52单片机语言进行程序设计。
通过控制单片机内部的定时器来产生不同频率的方波,驱动喇叭发出不同音调的音乐。
用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中来驱动喇叭演奏出悦耳动听的音乐。
当按键按下时,单片机根据指令输出相应的歌曲。
该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和音乐爱好者提供了很好的借鉴。
这次设计中我不但对以前的知识进行巩固,而且学会了更多的新知识,提高思维、强化动手能力,能够更好地适应和走上工作岗位,为以后的就业打下一定的基础。
关键词:
AT89S52单片机定时器方波按键
Abstract
ThisdesignisbasedonAT89S52singlechipmicrocomputerprincipleandcontrolcircuittodesignthehardwarecircuitofthemusicplayers,andprogramminglanguagethroughC52.Bycontrollingthesinglechipmicrocomputerinternaltimertoproducedifferentfrequencysquarewave,drivethehornmakedifferenttonesofmusic.Theusercanchooseaccordingtooneselfbefondofmusic,andconvertitintomachinecodeinthemicrocontrollermemoryplaysweetmusictodrivethehorn.Whenthebuttonpress,singlechipmicrocomputeroutputcorrespondingsongsaccordingtotheinstructions.Thehardwareandsoftwaresystemhasgoodversatility,highpracticalusevalue,forthemajorityofthesinglechipmicrocomputerandmusicloversprovidesagoodreference.Thisdesignnotonlytoconsolidatethepreviousknowledge,Ialsolearnedmorenewknowledge,improveandstrengthentheabilityofthinking,betterabletoadaptandtowork,tolayacertainfoundationforfutureemployment.
Keywords:
AT89S52singlechipmicrocomputertimerSquarewavekeys
绪论
目前,单片机正朝着高性能和多品种方向发展,从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
单片机渗透到我们生活的各个领域,导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统以及程控玩具、电子宠物等等,这些都离不开单片机。
随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。
小小的音乐播放器可以给人们带来美好的回忆,提高人们的精神文化享受。
传统音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。
本文设计的音乐播放器是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,外观效果多彩,使用方便,并具有一定的商业价值。
当然,现今是存在比我的系统更加完美的设计,如果可能,仅希望提供另外一种设计思路,也许会有某些火花的碰撞。
1.设计方案简述
1.1音乐播放器原理总述
通过单片机的定时器产生一定长度的方波,方波脉冲驱动扬声器发声。
要产生音频脉冲,只需算出某一音频的周期(1/音频),然后取半周期的时间定时。
利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲。
以此来产生音乐播放过程中所需的不同音阶。
启动计数器T0,使其工作于16位方式的工作方式一。
当开关K1按下时,判断键值,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。
通过单片机P3.2口连接开关K1进行控制,实现歌曲播放顺序的切换,根据开关按下次数的不同来选择所播放的曲目。
通过单片机P3.2口连接开关K2进行控制,暂停播放功能;扬声器由单片机的P1.7口控制,实现歌曲播放。
1.2总体设计框图
图1.1音乐播放器原理框图
2.音乐播放器原理
2.1实验电路原理
2.1.1AT89s52简介
由于芯片较为复杂,所以此处仅对我们所使用的部分予以说明。
P0口:
P0口是一个双向I/O口,常被作为低8位地址/数据分时复用。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,每一位都能作为可编程的I/O口线。
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。
外接存储器和I/O接口时,P2口作为拓展系统的地址总线,输出高8位地址字节,与P0口一起组成16位地址总线。
P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。
P3口亦作为AT89S52特殊功能(第二功能)使用时, P3.0RXD(串行输入口);P3.1TXD(串行输出口);P3.2INTO(外中断0); P3.3INT1(外中断1);P3.4TO(定时/计数器0);P3.5T1(定时/计数器1); P3.6WR(外部数据存储器写选通);P3.7RD(外部数据存储器读选通)。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
EA/VPP:
外部访问允许,EA为低电平时(接地),允许访问外部程序存储器,如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。
XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:
振荡器反相放大器的输出端。
中断寄存器和断源:
AT89S52有6个中断源,各中断允许位在IE寄存器中,两个外部中断(INT0和INT1),三个定时中断(定时器0、1、2)和一个串行中断。
中断允许控制寄存器位功能如表5所示,止所有中断。
中断允许控制位EA=1,允许中断;中断允许控制位EA=0,禁止中断。
表5中断允许控制寄存器位功能
符号
位地址
功能
EA
IE.7
中断总允许控制位。
EA=0,中断禁止;EA=1,各中断由各自的控制位设定
IE.6
预留
ET2
IE.5
定时器2中断允许控制位
ES
IE.4
串行口中断允许控制位
ET1
IE.3
定时器1中断允许控制位
EX1
IE.2
外部中断1允许控制位
ET0
IE.1
定时器0中断允许控制位
EX0
IE.0
外部中断0允许控制位
AT89S52引脚图如图2.1所示:
图2.1AT89S52引脚图
2.1.2时钟振荡电路
AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。
外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
本设计中电容使用30PF
10PF。
实验电路图如图2.2.也可以采用外部时钟,此时,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
外部振荡电路图如图2.3:
图2.2单片机内部振荡电路
图2.3单片机外部振荡电路
2.1.3复位电路
复位引脚RST通过一个施密特触发器与复位电路相连,施密特触发器用来抑制噪声,在每个机器周期的S5P2:
施密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
本实验采用的上电自动复位电路如图2.4所示:
图2.4复位电路
2.1.4音频输出电路
本设计采用电磁式蜂鸣器:
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。
振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
整个输出部分由一个200Ω电阻、一个PNP三极管和一个蜂鸣器/喇叭组成。
一个NPN三极管起到放大信号的作用,最后由蜂鸣器/喇叭表现出信号。
用P1.7口控制蜂鸣器。
输出显示电路如图2.5所示:
图2.5音频输出电路
2.1.5开关控制电路
键盘开关利用了机械触点的合、断作用。
键的闭合与否,反映在输出电压上就呈现高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,通过电平高低状态的检测,便可确认按键按下与否。
本次设计中,一P3.2和P3.5作为K1,K2两个控制开关,分别控制歌曲的切换和暂停。
开关控制电路如图2.6所示:
图2.6开关控制电路
2.1.6芯片拓展电路
本设计中使用62256进行拓展,62256是32K的低功耗静态RAM存储器。
74ls373是常用的地址锁存器芯片,它实质是一个是带三态缓冲输出的8D触发器,在单片机系统中为了扩展外部存储器,通常需要一块74ls373芯片。
用P0扩展外部ram。
P0不具有内部上拉电阻。
在作为I/O使用时,需要外部上拉电阻,此处我们加上了200Ω电阻。
拓展电路如图2.7所示。
图2.7拓展电路
2.1.7硬件电路图及功能
总体硬件电路实现功能如下,如图2.8所示
1)电路中用P3.2,P3.5分别作为控制按键K1,K2。
2)P0.0~P0.7通过地址锁存器与外部拓展芯片连接。
3)P1.7控制蜂鸣器。
4)复位引脚RST通过一个施密特触发器与复位电路相连。
5)电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。
图2.8总体硬件电路
2.2音调、节拍以及编码的确定方法
不同音高的乐音是用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个等份,每一个等份叫一个“半音”。
两个音之间的距离有两个“半音”,就叫“全音”。
前面加逗号','表示这是低音。
前面加上点号'`'表示这是高音,后面加'#',表示这个音符升半个音阶,后面加'.',表示这个音符要再加长自身一半的延时,后面加一个或多个'-',每个表示延时一拍,后面加一个或多个'_',表示这个音符要缩短自身一半的时长,最多支持2个'_'。
要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
乐谱以一个我们自己定义的乐谱形式写好,作为一个预定义的字符串。
再通过乐谱解释函数解释为“音符频率的序号”和“音符播放的时间”两个数组,在音乐播放函数中,就将音符频率的序号数组对应的频率送入定时器预置数中,再延时对应音符播放的时间。
这样音乐就播放出来了。
表2.1为调各音符频率与简谱对照表
音阶
1
2
3
4
5
6
7
8
9
10
11
12
Do
Do﹟
Re
Re﹟
Mi
Fa
Fa﹟
So
So﹟
La
La﹟
Si
低音
频率
220
223
247
262
277
294
311
330
349
370
392
415
简谱
1
1#
2
2#
3
4
4#
5
5#
6
6#
7
中音
频率
440
466
494
523
554
587
622
659
698
740
784
831
简谱
1
1#
2
2#
3
4
4#
5
5#
6
6#
7
高音
频率
880
932
988
1046
1109
1175
1244
1318
1397
1480
1568
1661
简谱
`1
`1#
`2
`2#
`3
`4
`4#
`5
`5#
`6
`6#
`7
表2.1音符频率简谱对照
3.部分代码代码注释及解读
3.1音乐符号串解释函数
这里最复杂是乐谱解释函数,是逐个字符解释的。
基本上是以下过程:
遇到拍子分隔符和空格跳过,判断是否高低音,读音符,调整为高低音音符,读音符后的升半个音符的“#”,读延长音“-”“.”,读缩短一半音长的“_”,字符串结束符“0x00”。
//入口:
要解释的音乐符号串,输出的音调串,输出的时长串
changedata(uchar*song,uchar*diao,uchar*jie)
{
uchari,i1,j;
chargaodi;//高低+/-12音阶
ucharbanyin;//有没有半个升音阶
ucharyinchang;//音长
ucharcodejie7[8]={0,12,14,16,17,19,21,23};//C调的7个值
*diao=*song;
for(i=0,i1=0;;)
{
gaodi=0;//高低=0
banyin=0;//半音=0
yinchang=4;//音长1拍
if((*(song+i)=='|')||(*(song+i)==''))i++;
//拍子间隔和一个空格过滤
switch(*(song+i))
{
case',':
gaodi=-12;i++;//低音
break;
case'`':
gaodi=12;i++;//高音
break;
}
if(*(song+i)==0)//遇到0结束
{
*(diao+i1)=0;//加入结束标志0
*(jie+i1)=0;
return;
}
j=*(song+i)-0x30;i++;//取出基准音
j=jie7[j]+gaodi;//加上高低音
yinc:
switch(*(song+i))
{
case'#':
//有半音j加一个音阶
i++;j++;
gotoyinc;
case'-':
//有一个音节加长
yinchang+=4;
i++;
gotoyinc;
case'_':
//有一个音节缩短
yinchang/=2;
i++;
gotoyinc;
case'.':
//有一个加半拍
yinchang=yinchang+yinchang/2;
i++;
gotoyinc;
}
*(diao+i1)=j;//记录音符
*(jie+i1)=yinchang;//记录音长
i1++;
}
}
3.2奏乐函数
基本上就是从数组中取出音符和时长,送入定时器预置数,再延时即可。
在每个音符播放前后,用TR0控制是否输出音乐,每个音符之间也有短暂静音,以使音乐更为清晰。
//入口:
要演奏的音乐符号串
voidplay(uchar*songdata)
{
uchari,c,j=0;
uintn;
ucharxdatadiaodata[112];//音调缓冲
ucharxdatajiedata[112];//音长缓冲
changedata(songdata,diaodata,jiedata);//解释音乐符号串
TR0=1;
for(i=0;diaodata[i]!
=0;i++)//逐个符号演奏
{
tl0_f=freq[diaodata[i]*2];//取出对应的定时值送给T0
th0_f=freq[diaodata[i]*2+1];
for(c=0;c for(n=0;n<32000;n++); TR0=0; for(n=0;n<500;n++);//音符间延时 TR0=1; } TR0=0; } 3.3关于加入拓展电路的解释 在本程序中,播放音乐函数中,我们使用了32K的低功耗静态RAM存储器62256,这是因为乐谱的数据需要比较多的内存,data和idata空间已经放不下了的原因。 由于在此之前我们已经对芯片进行了拓展,所以我们仿真不会有任何问题。 但是如果你把这个程序烧写到一片没有XRAM的芯片中,就会出现无法运行的现象。 在使用没有XRAM的51芯片时,如果使用了XRAM,则要在总线上外加一个内存芯片,比如62256之类。 4.仿真与调试 4.1仿真 (1)按照设计的硬件电路在PROTUSE上画好电路图。 (2)电路检查无误后,双击AT89S52,打开编辑元件对话框,将ProgramFile项修改为想要打开的程序项,把调试好的程序HEX文件加载到单片机上,如下图4.1所示。 图4.1程序装载 (3)点击运行按钮后,按下K1键,开始播放第一首歌曲。 (4)再次按下K1,切入到下一首歌曲,以此类推,不停地按下K1则可以不断切换到下一首歌曲中。 当按下的次数大于6时,从第一首开始重新播放。 (5)按下K2键即终止当前播放,此时必须按下K1才可以继续播放歌曲。 4.2调试 4.2.1调试流程 (1)按照设计的硬件电路在单片机上连好电路。 (2)在keil软件中编译程序。 (3)把伟福编译生成的无错误后缀名为.HEX的文件加载到AT89C51单片机中,实现与硬件电路的连接。 (4)在单片机通过按动按键实现歌曲切换及暂停等不同的功能实现。 4.2.2调试过程中遇到的问题及解决方案 (1)有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发行是因为程序中有的指令书写得不规范导致的。 在今后的的编程中我们应该更加注重编程语句书写的规范性。 (2)编程时要注意,在程序开始时,要写入各定时器中断的入口地址。 (3)编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。 (4)程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。 (5)在实验电路设计过程中,由于没有考虑到乐谱的数据需要比较多的内存,data和idata空间已经放不下了,我们对电路进行了直接,导致系统无法正常工作。 后期通过查阅资料和询问同学等方式,我们在AT89S52的P0口通过一个锁存器接入芯片RAM存储器62256进行拓展,使得芯片正常工作。 (6)由于时间关系,在此次设计中我们直接使用了单片机开发试验仪,没有进行电路的焊接,在节省了工作量的同时也避免了误差的出现。 同时,我也希望在后期时间允许的情况下自己可以焊接出这个完整的电路,提高自己动手能力的同时也加深对整个电路的了解。 5.实物图及操作步骤 5.1音乐播放器实物图 图5.1实物图 5.2实物操作步骤 (1)在keil软件中完成程序的编译。 (2)把伟福编译生成的无错误后缀名为.HEX的文件加载到AT89C51单片机中,实现与硬件电路的连接。 (3)打开单片机后,通过按动K1键来实现歌曲间的切换,按动K2键来实现歌曲的暂停;当按下K1键的次数大于6时,自动切回第一首歌开始播放。 6.收获、建议及体会 通过这次单片机课设,我深刻的体验到了将理论转化为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音乐 播放
![提示](https://static.bdocx.com/images/bang_tan.gif)