基于单片机音乐播放器的设计.docx
《基于单片机音乐播放器的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机音乐播放器的设计.docx(26页珍藏版)》请在冰豆网上搜索。
基于单片机音乐播放器的设计
题目:
基于单片机音乐播放器的设计
文献综述:
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲,一块芯片就成了一台计算机。
MCS-51单片机是美国INTEL公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MSC-51单片机作为代表进行理论基础学习。
基于单片机的音乐播放器可应用于mp3,MP4,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括"Do"、"Re"、"Me"--等音阶在内的各种频率声音。
将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。
基于这个思想,我设计了一款特殊的"音乐播放器",本播放器可实现播放、暂停、复位等功能。
为了体现乐曲播放过程中的动态效果,增加了1只LED,作随机闪烁以指示旋律的节奏。
由于时间及条件限制,本设计实现了一种简单的音乐播放器,其核心器件采用AT89C52单片机,本播放器具有电路简单,功能强大,易于拓展等特点。
在此基础上,可以添加按键,LED显示屏等模块,实现切换歌曲,歌曲序号的显示。
此音乐播放器实现的控制功能如下:
1.程序中存有5首歌曲;
2.按下某键后,能选择歌曲,并通过LED显示歌曲序号。
2.选题依据、主要研究内容、研究思路及方案:
通过控制定时器的定时时间来产生不同频率的方波,驱动喇叭发出不同音阶的声音,再利用延迟来控制发音时间的长短,即可控制音调中的节拍。
把乐谱中的音符和相应的节拍变换为定常数和延迟常数,作为数据表格存放在存储器中。
由程序查表得到定时常数和延迟常数,分别用以控制定时器产生方波的频率和发出该频率方波的持续时间。
当延迟时间到时,再查下一个音符的定时常数和延迟常数。
依次下去,就可以自动演奏乐曲。
3.进度及具体安排:
第1周:
查阅参考文献和相关资料。
第2周:
通过反复阅读、揣摩参考文献和相关资料,弄清楚研究对象的基本原理。
第3-4周:
完成论文初稿。
第5-11周:
递交初稿,并在指导老师的帮助下,完成论文的修改,确定终稿。
第12周:
再次检查、确认终稿符合要求后,打印、刻录光盘,递交正式论文,同时准备论文答辩。
4.指导教师意见。
指导教师:
年月日
教研室意见
教研室主任:
年月日
湖南工程职业技术学院毕业设计(论文)
音乐播放器
系(部):
信息工程系
专业:
电子自控
学号:
200803122028
学生姓名:
陈雪花
指导老师:
陈忠平讲师
2011年4月15日
摘要
随着科技的发展,市场上出现了许许多多的音乐播放器。
人们对播放器的需求也越来越广泛,要求越来越高。
本篇论文介绍了音乐播放器的一种设计方法,此设计是利用单片机产生乐曲音符,再把乐曲音符翻译成计算机音乐语言,由单片机进行信息处理,再通过喇叭放出音乐。
论文介绍了音乐播放器的硬件设计和软件设计的方法。
硬件电路主要由AT89C52单片机芯片,数码显示电路,按键电路和蜂鸣电路四个部分。
其中数码显示电路通过单片机的P0端口输出的数据控制。
软件程序部分采用语言是C语言。
关键字:
单片机,音乐播放器,LED显示,按键控制
目录
目录-2-
第1章前言-3-
1.2音乐播放器的发展-3-
第2章音乐播放器的原理简述-4-
2.1音频脉冲的产生-4-
2.2音乐节拍的产生-5-
2.3移调-6-
第3章设计方案-7-
3.1硬件电路的设计-7-
3.2音乐软件的设计-10-
第四章仿真与调试-21-
4.1HEX文件的生成-21-
4.2在原理图上仿真与调试-21-
4.3在实物上调试-21-
结论-23-
致谢-24-
参考文献-25-
第1章前言
1.1音乐播放器的意义
从音乐产生开始,音乐就成了我们生活中不可或缺的一部分。
随着时间的发展,不同的音乐播放器也应运而生。
我也对其进行了简单的研究,设计了一个简单的音乐播放器。
1.2音乐播放器的发展
几千年来,各种乐器的发声无一不是依靠琴弦,簧片,哨片引起管柱振动而作为声源的。
随着现代电子工业技术的发展,一种新的声源来制造音响的新型乐器脱颖而出,这就是目前人们熟知的电子音乐播放器。
目前市场上的音乐播放器形形色色,例如大家所熟悉的MP3,随着电子技术的不断发展,音乐播放器的音乐播放器也会进一步发展。
目前,单片机的应用渗透到我们生活的各个领域,几乎很难找到有哪个领域没有没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机网络通信和数据的传输,工业化自动控制过程的实时控制和数据处理,广泛是使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机,摄像机,全自动洗衣机的控制,以及程控玩具,电子宠物等等,这些都离不开单片机。
本课题即是在这种背景下,对基于AT89C52单片机的音乐播放器设计与实现进行了硬件及软件的设计,并给出了一全套的解决方案,实现了单片机音乐播放器对音乐的演奏。
第2章音乐播放器的原理简述
2.1音频脉冲的产生
音乐的产生主要是通过单片机的I/O口输出高低不同的脉冲信号来控制蜂鸣器发音。
要想产色很难过音频脉冲信号,需要算出某一音频的周期(1/频率),然后要将此周期除以2,即为半周期的时间。
利用单片机定时器计时这个半周期,每当计时到后就将输出的脉冲I/O口反相,这样就能在此I/O口上得到此频率的脉冲。
通常,利用P89C5X单片机的内部定时器0,工作在方式1下,改变计数初值TH0和TL0来产生不同的频率。
例如,若单片机采用12MHZ晶振频率,要产生频率为587HZ的音频脉冲时,其音频脉冲信号的周期T=1/587=1703.5775μS≈1704μS,半周期的时间为852μS,因此只要令计数器计数=852μS/1μS=852,在每次计数852次时将I/0口反相,就可得到C调中音Re。
计数脉冲值与频率的关系如下:
N=Fi÷2÷Fr
式中,N:
计数值。
Fi:
因内部计时一次为1μS,故其频率为1MHZ。
Fr:
要产生的频率。
计数值T的求法为:
T=65536-N=65536-Fi÷2÷Fr
例如,设Fi为1MHZ,求低音Do(262HZ)、中音Do(523HZ)和高音Do(1046HZ)的计数值。
解:
T=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=35536-500000÷Fr
低音Do的T=35536-500000÷262=63628
中音Do的T=35536-500000÷523=64580
高音DO的T=35536-500000÷1046=65058
综上所述,C调各音符频率与计数值T的关系如表1-1所示。
表1-1C调各音符频率与计数值T的关系
音符
频率(HZ)
简谱码(T值)
音符
频率(HZ)
简谱码(T值)
低1Do
262
63628
中#4Fa#
740
64860
低#1Do#
277
63731
中5So
784
64898
低2Re
294
63835
中#5So#
831
64934
低#2Re#
311
63928
中6La
880
64968
低3Mi
330
64021
中#6La#
932
64994
低4Fa
349
64103
中7Si
988
65030
低#4Fa#
370
64185
高1Do
1046
65058
低5So
392
64260
高#1Do#
1109
65085
低#5So#
415
64331
高2Re
1175
65110
低6La
440
64400
高#2Re#
1245
65134
低#6La#
466
64463
高3Mi
1318
65157
低7Si
494
64524
高4Fa
1397
65178
中1Do
523
64580
高#4Fa#
1480
65198
中#1Do#
554
64633
高5So
1568
65217
中2Re
587
64684
高#5So#
1661
65235
中#2Re#
622
64372
高6La
1760
65252
中3Mi
659
64777
高#6La#
1865
65268
中4Fa
698
64820
高7Si
1967
65283
2.2音乐节拍的产生
每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,表1-2为节拍与节拍的时间对照表如果1拍为0.4s,1/4拍是0.1s。
只要设定延时时间就可以求得节拍的时间。
假设1/4拍为1DELAY,那么1拍应为4DELAY,以此类推。
所以只要求得1/4拍的DELAY,其余的节拍就是它的倍数,表1-3为1/4和1/8拍的时间设定。
表1-2节拍与节拍码的对照
节拍码
节拍数
节拍码
节拍数
1
1/4拍
1
1/8拍
2
1/2拍
2
1/4拍
3
3/4拍
3
3/8拍
4
1拍
4
1/2拍
节拍码
节拍数
节拍码
节拍数
5
拍
5
5/8拍
6
拍
6
3/4拍
8
2拍
8
1拍
A
拍
A
拍
C
3拍
C
拍
F
拍
表1/4和1/8拍的时间设定
1/4拍的延时设定
1/8拍的延时设定
曲调值
DELAY(延时时间)
曲调值
DELAY(延时时间)
调4/4
125ms
调4/4
62ms
调3/4
187ms
调3/4
94ms
调2/4
250ms
调2/4
125ms
1/4拍的延时时间=187ms。
2.3移调
一般的歌曲,有3/8、2/4、3/4、4/4等节拍类型,但不管有几拍,基本上是在C调下演奏的。
如果是C,则音名C唱Do,音名D唱Re,音名E唱Mi,音名F唱Fa,音名G唱So,音名A唱La,音名B唱Si等。
但是,并不是所有歌曲都是在C调下演奏的,还有D调,E调,F调,G调等。
D调是将C调每个音符上升一个音符实现的,即C调下的音名D在D调下唱Do,C调下的音名E在D调下唱Re,C大调的音名F在D调下升半高半音符F#唱Mi,C调下的音名G在D调下唱Fa,C调下的音名A在D调下唱So,C调下的音名E在D调下唱La,C调下的音名C在D调下升高半音符C#唱Si。
这种改变唱法称为移调。
E调是在D调的基础上进行移调的,而F调是在E调的基础上进行移调的。
表1-4为各调音符与音名的关系。
表1-4各调音符与音名的关系
调
音名
Do
Re
Mi
Fa
So
La
Si
C调
C
D
E
F
G
A
B
D调
D
E
F#
G#
A
B
C
E调
E
F#
G#
A
B
C
B
F调
F
G
A
B
C
D
E
G调
G
A
B
C
D
E
F#
A调
A
B
C
D
E
F#
G#
B调
B
C
D
E
F
G
A
第3章设计方案
此音乐播放器实现的控制功能如下:
1.程序中存有5首歌曲;
2.按下某键后,能选择歌曲,并通过LED显示歌曲序号。
3.1硬件电路的设计
一个完整的音乐播放器电路,相当于一个简单的单片机系统,改系统由按键开关,单片机,晶振和复位电路,LED显示电路,扬声器,控制电路5个部分组成。
其中,单片机是集成的IC芯片,而其他的四个部分则须根据应用要求而设计。
3.1.1单片机的最小系统
单片机芯片,配以必要的外部器件,就能构成单片机的最小系统。
单片机具有较强的外部扩展,通信能力。
能方便的扩展至应用系统要求的规模。
当使用带ROM或EPROM的MCS-51系列单片机时,只要一个芯片即可构成一个单片机的最小系统。
选用80C51或8051或AT89C52作为主机,他们都具有4k片内ROM,128字节片内RAM,片外ROM的寻址范围可达64K,2个16位计数器,5个中断源,4个并行口,1个串行口。
简易自动乐曲播放器采用单片机最小系统足以满足设计要求,同时要设计单片机的复位和晶振电路。
1.单片机的复位电路
单片机的复位电路是单片机的初始化操作,其作用是使CPU各部件都处于一个确定的初始化状态,并从这个初始化状态开始工作,当AT89C52的ALE及RST引脚处于高电平状态时,单片机复位。
单片机的复位有手动复位和三点复位两种形式,RST端的高电平直接由上电瞬间产生高电平则为上电复位;若通过按钮产生高电平复位信号称为手动复位。
图中,上电的瞬间,RST端的点位与VCC相同,随着电容的充电电流的减小,+5V立即加到RST端的高电平端该高电平使单片机复位。
若运行过程中,需要程序开始从头执行,这只需按原理图中的复位按钮即可。
按下按钮,则直接把+5V的电压接到RST端从而复位,这称为手动复位。
在实际应用的系统中,;有些外围芯片也需要复位,如果这些复位端的复位电平要求与单片机要求一致,则可以与之相连。
2.单片机的晶振电路
晶振是给提供单片机工作信号脉冲的,这个脉冲是单片的工作速度,比如12M晶振,单片机的工作速度就是每秒12M,当然,单片机的工作频率是有范围的,不能太大,一般24M就上不去了,不然不稳定。
图2为单片机的晶振电路。
图1复位电路
图2晶振电路
3.键盘接口电路的设计
单片机系统中的人机对话通道是用户为了对应用系统进行干预以及了解应用系统运行状态所设置的通道,主要有键盘,显示器等通道接口。
在单片机应用系统中,为了控制系统的工种状态以及向系统中输入数据,应用系统设置键盘,用于系统复位,功能转换以及数字输入。
键盘的设置可以实现人机对话,借助键盘,可以向计算机系统输入程序,置数,控制程序的执行走向等。
在本次设计中,键盘有P1口输入,按键设置1~5五个数字键,用来输入1~5五首歌曲的序号,并控制程序播放歌曲。
当按键按下,系统将播放该键对应的歌曲,并且数码管将是显示该歌曲的序号。
4.数码管显示接口电路的设计
在单片机系统中,使用的显示器主要有LED显示器,这种显示器成本低廉,配置灵活,与单片机接口方便,在本设计中采用LED显示器。
LED显示器由8为数码管组成,用于显示器在各种不同条件下的状态,
单片机驱动数码管的方式有很多种,按显示方式分,有静态显示和动态显示,按译码方式分,有硬件译码和软件译码。
数码管从电路上来可分为共阴和共阳两种。
在本次设计中,由于电路比较简单,采用的是静态显示。
采用了共阳的数码管。
5.扬声器控制电路的设计
扬声器控制电路用于发出不同频率的音调,是在P3.7口加一放大器再连接到扬声器上即可构成。
3.1.2绘制原理图
在proteusISIS编辑窗口中单击中单击元件列表之上的“P”按钮
,添加如所需的元件。
在proteusISIS编辑窗口中,绘制出原理图。
本电路的原理图如图1所示。
图3原理图
3.2音乐软件的设计
3.2.1音乐代码库的建立方法
(1)先找出乐曲的最低音和最高音的范围,然后确定音符表T的顺序。
(2)把T值建立在一维数组TABLE1,并把构成发音符的计数值用16进制数表示出来,每个数拆成高低4为,放在“TABLE1”中。
(3)简谱码(音符)为高4位,节拍(节拍数)为低4位音符节拍码另建的数组处。
3.2.2选曲
在一个程序中,需要演奏两首或两首以上的歌曲时,音乐代码库的建立有两种方法:
将每首歌曲建立相互独立的音符表T和发音符计数值。
在建立公用的音符表T后,再写每首歌的发音计数值的代码。
在本设计中,建立音乐代码库采用的是第二种方法。
歌曲的设计
程序中的歌曲如下:
从5首歌曲中可以看出,它们的最低音为低1Do,最高音为高3So。
根据音乐软件的设计方法,其对应的简谱码、T值、节拍数如表1-5所示。
表1-5简谱对应的简谱码、T值及节拍数
发音
简谱码
T值
T值对应的十六进制
发音
简谱码
T值
T值对应的十六进制
低1Do
262
1
F8F3
中4Fa
698
8
FD34
低5So
392
2
FB04
中5So
784
9
FD82
低6La
440
3
FB90
中6La
880
10
FDC8
低7Si
494
4
FC0C
中7Si
988
11
FE06
中1Do
523
5
FC44
高1Do
1046
12
FE06
中2Re
587
6
FDAC
高2Re
1175
13
FE56
中3Mi
659
7
FD09
高3Mi
1318
14
FE85
节拍码
节拍数
节拍码
节拍数
1
1/4拍
6
拍
2
1/2拍
8
2拍
3
3/4拍
A
拍
4
1拍
c
3拍
5
拍
F
拍
程序如下:
#include“reg52.h”
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetab[]={0xf9,0xa4,0xb0,0x99,0x92};
ucharcodetab1[]={0xf8,0xf3,0xfb,0x04,0xfb,0x90,0xfc,0x0c,0xfc,0x44,0xfc,
0xfc,0xfd,0x09,0xfd,0x34,0xfd,0x82,0xfd,0xc8,0xfe,0x06,0xfe,0x22,0xfe,0x56,0xfe,0x85};
ucharcodetab2[]={0x72,0x92,0x72,0x62,0x72,0x62,0x74,0x72,0x62,0x32,0xc2,
0x72,0x66,0x62,0x52,0x32,0xc2,0x62,0x72,0x92,0x62,0x72,0xa2,0x92,0x32,0x62,0x56,//第一行0x62,0x52,0x32,0x52,0x62,0x72,0x92,0x62,0x72,0xa2,0x92,0x92,0x78,0x62,
0x72,0x62,0x52,0x92,0xa2,0x64,0x12,0x72,0x74,0x64,0x74,//第二行
0x32,0x72,0x62,0x62,0x58,0x08,0x74,0x94,0xc2,0x92,0xa4,0x02,0xa2,0x92,
0x72,0x72,0x92,0x98,0x72,0x92,0xa2,0xc2,0xd2,0xc2,0x92,0x72,0x64,0x94,
//第三行0x72,0x7a,0x72,0x92,0xc2,0x92,0xa4,0x02,0xc2,0xd2,0xc2,0x92,0x72,0x92,
0xb2,0xa4,0x02,0x72,0x62,0x72,0x92,0xe2,0xd6,0xe2,0xcc,0x72,0x92,//第四行0xcc,0x72,0x92,0xc2,0x92,0xa4,0x02,0xc2,0xd2,0xc2,0x92,0x72,0x82,0xb2,
0xa4,0x02,0x72,0x62,0x72,0x92,0xe2,0xd6,0xb2,0xcc,0x72,0x92,//第五行
0x62,0x72,0x92,0xe2,0xd8,0xd8,0xd8,0xdc,0xb4,0xb8,0xb8};//第六行
ucharcodetab3[]={0x72,0x92,0xc6,0xa2,0xc4,0xc2,0xb1,0xa1,0xa1,0xb5,0x91,0
xa1,0x98,0xa4,0x92,0x82,0x82,0x74,0x62,0x78,0x78,//第一行0xa2,0xc2,0xd2,0xe2,0x76,0xd1,0xc1,0xd6,0xc1,0xd1,0xc8,0x02,0x92,0x82,
0x72,0x66,0x51,0xb1,0x5c,0x22,0x52,//第二行0x76,0x92,0x74,0x62,0x52,0x52,0x52,0x52,0x31,0x21,0x24,0x22,0x52,0x76,
0x92,0x92,0x92,0xa2,0x92,0x92,0x61,0x71,0x62,0x51,0x61,0x64,0xa2,0x92,
//第三行
0x76,0x92,0x92,0x92,0xa2,0x92,0x72,0x62,0x52,0x51,0x61,0x34,0x22,0x32,
0x56,0x61,0x71,0x64,0x72,0x52,0x54,0x5c,0x92,0x52,//第四行0x5c,0x72,0x92,0xc6,0xb1,0xc1,0xb4,0xa2,0x92,0xa2,0xc2,0x72,0x62,0x54,
0x52,0x12,0x52,0xc4,0x91,0xa1,0x92,0x61,0x71,0x62,0x51,0x61,//第五行
0x6c,0x72,0x92,0xc6,0xb1,0xc1,0xb4,0xa2,0x92,0xa2,0xc2,0x72,0x62,0x54,
0x52,0x12,0x52,0xc4,0x91,0xa1,0x92,0x61,0x71,0x62,0x62,//第六行
0x5c,0x02,0x71,0x91,0x96,0x91,0x91,0x92,0xc1,0xc3,0xc1,0xd1,0xc6,0x82,
0xc9};//第七行
ucharcodetab4[]={0x72,0x62,0x78,0x62,0x52,0x58,0x52,0x42,//第一行
0x54,0x54,0x52,0xb2,0x2c,0xa4,0x54,0x54,0x58,0xa2,0x52,0x64,0x34,0x62,0x72,0x68,0x72,0x62,//第二行
0x78,0x92,0xa2,0x68,0x52,0x62,0x74,0x64,0x54,0x61,0x51,0x36,0x03,0xa1,
0x54,0x54,0x42,0x32,//第三行
0x44,0x42,0x42,0x42,0x32,0x44,0x42,0x42,0x42,0x52,0x38,0xa2,0x92,0xa6,
0xa2,0x92,0x52,0x78,0xa2,0x92,//第四行
0xa6,0xa2,0x92,0x