基于单片机的MP3播放器设计毕业设计.docx
- 文档编号:12644583
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:31
- 大小:156.01KB
基于单片机的MP3播放器设计毕业设计.docx
《基于单片机的MP3播放器设计毕业设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的MP3播放器设计毕业设计.docx(31页珍藏版)》请在冰豆网上搜索。
基于单片机的MP3播放器设计毕业设计
基于单片机的MP3播放器设计
前言
人们生活水平的提高及对音乐的喜爱,对音乐播放器的品质,功能,品种等提出了越来越多的要求,表现在对控制系统性能、可靠性等要求越来越高。
而品质的提高,功能的更新,可靠性的增强,品种的变化无不与产品的核心控制部分水平的提高密不可分。
家用音乐播放器产品及其它有关消费电器产品都是一些开环或闭环控制系统,都由核心控制部分,执行部分与人机界面三部分组成。
而最为重要的控制部分一般是由单片机来执行完成的,这就必将导致和促进单片机在音乐领域的应用,使社会生产力的提高,也使人们的生产方式和生活方式产生了日新月异的变化。
现在这些由单片机实现的音乐播放器的功能越来越强、费用越来越低。
例如,就目前市场上的MP3的功能越来越强大体积却越来越小,价格也逐渐便宜,被大多数人所能接受。
但这些音乐播放器也或多或少的存在着一些问题,解决这些问题,非智能化的单片机莫属。
这次设计是由硬件电路设计和软件程序设计两大部分组成。
整个硬件电路是由中心控制、播放、选曲、显示、电子琴和彩灯等模块组成,中心控制模块采用AT89S52单片机,播放模块是由8550NPN三极管和电磁蜂鸣器组成,采用LCD显示模块,软件程序运用C语言编程实现。
1 硬件设计
1.1 硬件电路的设计框图
硬件电路如图1.1-1所示由控制模块、LCD显示模块、播放器模块、彩灯伴奏模块、按键播放、调试接口组成。
图1.1-1 硬件系统框图
硬件系的按键由8个模块组成,其中1个作为模式转换按键来实现播放器自动播放和自弹作曲两种模式之间的转换。
应用LCD来显示歌曲名字和播放状态信息的功能。
LED则通过控制模块的控制伴随音乐节奏闪亮,从而完成彩灯伴奏。
播放是由8550NPN三极管和电磁器组成,通过控制模块的控制对当前音乐进行播放。
1.2 硬件电路设计模块的选定
1.2.1 电子琴模块
电子琴设有8个按键,其中7个作为音符输入,1个作为模式转换按键,实现用户自弹作曲。
7个按键分别表示7个音符,中音段的全部音符。
但通过软硬件的设计,当模式转换按键触发外部中断时,同时可以使程序跳转,实现模式转换,启动电子琴。
并且通过查询电子琴所按下的按键读取电子琴的输入状态,跳转到对应的程序中去实现自弹歌曲。
如果需要取消电子琴弹曲功能时,再次按下模式转换键外部中断。
即可以退出电子琴功能返回最初的音乐播放处。
1.2.2 播放模块
播放模块由8050PN三极管和电磁器组成,通过控制模块的控制对当前音乐进行播放。
当AT89S52输出高电平控制信号时,启动8050NPN三极管使信号放大,从而启动电磁蜂鸣器。
与LM386和喇叭的组合比较,此播放模块存在一定的噪音,出现在传送频率较高的歌曲时,由于采样频率低,带宽不够,而造成声音失真,导致音响效果较差。
但由于所需驱动功率较小,驱动器件要求不高,还能降低成本。
所以,在系统的开发过程中,选用8050NPN三极管和电磁蜂鸣不仅能满足系统要求,同时还能提高运行速度,保证播放歌曲的流畅。
1.2.3 调试接口
一般通过PC的USB接口进行MP3文件的下载,传输速率为12Mbps。
由于Atmel公司生产的AT89S5lSNDlC芯片仅支持USBl.1技术规范,对于MP3播放来说,虽然可以满足需要。
但接口速度稍慢,所以我们AT89S52芯片更能完善大众的需求。
1.2.4 显示模块
LED数码管是一种显示器件。
通过学习我们更清楚的知道发光二极管是由半导体材料制成,能将电信号转换成光信号的结型电致发光器件。
当把发光二极管制成条状,按照一定方式连接组成数字“8”就可以构成LED数码管,简称LED。
1.3 各硬件电路的具体设计
1.3.1 按键模块设计
按键在系统中在于手动切换模式,音乐弹奏时音符的输入以及曲目的选择。
由于在系统中需要的按键不多,单片机I/O口数完全可以满足,所以采用独立键盘设计,如图1.3.1-1所示。
图1.3.1-1按键输入电路
1.3.2 AT89S52芯片的控制设计
AT89S52芯片的控制设计如图1.3.2-1所示,由单片机复位电路及外接晶振组成。
如图2.3.2-1所示,电容C5、C9、和12M晶振与单片机引脚XTAL1和XTAL2相连构成外接电路。
AT89S52单片机内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是放大器的输出端。
AT89S52单片机有一个复位引脚,条件是:
在时钟工作,外部电路在RST引脚施加持续2个机器周期意思的高电平,使系统复位。
要是保持正脉冲宽度为10微妙就可以使单片机安全复位。
在单片机运行期间,按下按键电容瞬间放电,RST引脚电位与vcc相同;当按键断开,电容又开始充电。
RST引脚电位下降,系统开始正常工作。
图1.3.2-1 AT89S52系统
1.3.3LCD显示电路设计
LCD显示电路由单片机P0及P3.0-P3.2端口控制。
而我们常选用的是工业学字符型液晶显示的LCD,能同时16*2即32个字符。
硬件连接如图2.3.3-1所示。
其中变位器是为调节LCD对比度而设计。
LCD的显示驱动在软件中完成。
图2.3.3-1 LCD显示电路
1.3.4 播放器模块设计
播放模块式由8050NPN三极管和无源蜂鸣组成,无源蜂鸣器是由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
无源蜂鸣器发声的原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机I/O引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此设计过程中增加一个有8050NPN三极管组成的电流放大器。
蜂鸣器的负极直接接地,蜂鸣器正极接到三极管的发射极E上,三极管的基极B经过限流电阻R9后单片机的P22引脚控制,当P22输出高电平时,三极管Q1截止,没有电流流过线圈,蜂鸣器不发声;当P22输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。
所以,我们可以通过程序来控制P22脚的电平来使蜂鸣器发出声音和关闭。
1.3.5彩灯伴奏电路设计
根据人们的需求和设计要求,本设计中设计彩灯伴奏电路,彩灯采用的是普通的发光二极管。
播放器工作时,发光二极管根据音乐节拍闪亮。
当播放器发出DUO音时,D1亮;当播放器发RUAI音时,D2亮;当播放器发出MI音时,D3亮;当播放器发出MI音时,D3亮;当播放器发出FA音时,D4亮;当播放器发出LA音时,D2、D3亮;当播放器发出XI音时,D3、D4亮。
在执行过程中,单片机对发出的音符进行检测,再输出对应的彩灯信号。
如图2.3.5-1所示。
图1.3.5-1彩灯电路
2 软件设计
2.1单片机发声的基本原理
我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的高电平或低电平,则在该口线上就能产生一定频率形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制高、低电平的持续时间,就能改变输出频率,从而改变音调。
音符的节拍我们可以用定时器T0来控制,送入不同的初值,就可以产生不同的定时时间。
便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。
但是,由于T0的最大定时时间只能为131毫秒,因此不可能直接用改变T0的时间初值来实现不同节拍。
我们可以用T0来产生10毫秒的时间基准,然后设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。
例如对1/4拍音符,定时时间为0.16秒,相应的时间常数为16(即10H);对3拍音符,定时时间为1.92秒,相应时间长数为192(即C0H)。
我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。
此外,结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。
为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。
2.2设计的相关音乐说明
要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期时间。
利用半周期时间定时这个半周期时间,每当计时到后就将输出的I/O反向,然后重复计时此半周期再对I/O反向,就可以在I/O脚上得到此频率的脉冲。
记数脉冲值与频率的关系公式如:
N=Fi/2/Fr。
N:
记数值;Fi:
内部计时依次为1us,故其频率为1MHZ;Fr:
要产生的频率。
其记数值的求法如:
T=65536-N=65536-Fi/2/Fr。
例:
设K=65536,F=1000000=Fi=1MHZ。
求低音DO(26HZ),中音DO(523HZ),高音DO(1046HZ)的记数值。
每个音符使用1个音节,字节的高四位代表音符的高低,低四位代表音符的节拍。
如果1拍为0.4秒,1/4拍为0.1秒,假设1/4拍为DELAY,则1拍为4DELAY。
2.3MP3切换原理
播放器具有手动弹奏和自行播放两种模式,对于这两种模式的切换,本设计是通过软件判断模式转换按键按下的次数来实现的。
当模式转换按键按下一次时,播放器为自动播放模式;当按键连续按下两次时,播放器为手动弹奏模式。
在软件中的流程图大致如图2.3-1所示。
图2.3-1 MP3切换原理流程
2.4音乐播放器软件程序设计
2.4.1按键扫描子程序设计
本设计中采用的独立式键盘,按键的闭合与否直接反应在口线的电平上,即口线的电平是呈现的高电平还是低电平。
因此可以通过口线的电平高、低状态检测,来确认按键是否按下。
但如果在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误的认为是多次操作,为克服按键点机械抖动所致的检测错误,确保CPU对一次按键动作只确认一次按键,必须采取去抖动的措施。
软件中去抖动的措施即在第一次检测到有键按下时,执行一段延时10ms的子程序,然后再次检测该键的电平状态,如果该键电平仍保持闭合状态电平,则确认为真正有键按下。
一般把按键扫描程序设计成子程序,以便其他程序调用。
程序流程图如图2.4.1-1所示:
图2.4.1-1按键扫描子程序流程图
程序如下:
voidkey_scan()
{
if(key1==0)//---------key1为模式转换键)-----------
{
delay_ms(9);//延时,用于消抖动
if(key1==0)//延时后再次确认按键按下
{
while(!
key1);
set++;
if(set==3)
set=1;//模式转换按键选择模式
} }
if(key2==0)//-------key2为曲目2或音符duo)----------------
{
delay_ms(9);//延时,用于消抖动
if(key2==0)//延时后再次确认按键按下
{
duo=1;
while(!
key2);
}
}
if(key3==0)//---------key3为曲目3或ruai)--------------
{
delay_ms(9);//延时,用于消抖动
if(key3==0)//延时后再次确认按键按下
{
ru=1;
while(!
key3);
}
}
if(key4==0)//-----------key4为曲目4或mi)-------------
{
delay_ms(9);//延时,用于消抖动
if(key4==0)//延时后再次确认按键按下
{
mi=1;
while(!
key4);
}
}
if(key5==0)//-----------key5为曲目5或fa)------------
{
delay_ms(9);//延时,用于消抖动
if(key5==0)//延时后再次确认按键按下
{
fa=1;
while(!
key5);
}
}
if(key6==0)//-----------key6为曲目6或suo)-----------------
{
delay_ms(9);//延时,用于消抖动
if(key6==0)//延时后再次确认按键按下
{
suo=1;
while(!
key6);
}
}
if(key7==0)//------------key7为曲目7或la)-------------------
{
delay_ms(9);//延时,用于消抖动
if(key7==0)//延时后再次确认按键按下
{
la=1;
while(!
key7);
}
}
if(key8==0)//------------key8为曲目8或xi)------------------
{
delay_ms(9);//延时,用于消抖动
if(key8==0)//延时后再次确认按键按下
{
xi=1;
while(!
key8);
}
}
2.4.2 1ms延时程序设计
延时程序一般是通过一层或多层循环实现,整个过程延时的时间是程序执行的指令总条数乘以执行每条指令所用的时间。
由于该系统的晶振选用的是12M,所以执行每条指令所所用时间为2us,程序执行流程如图3.4.2-1所示[7]。
程序如下:
voiddelay_ms(uintxms)//延时函数,有参函数
{
uintx,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
图2.4.2-1 延时程序流程图
2.4.3 LCD显示子程序设计
本设计中利用LCD1602显示当前播放曲目名称以及弹奏时的音符。
LCD开始工作是靠软件来实现的。
整个显示过程中的程序工作流程图如图2.4.3-1所示:
程序如下:
void lcd_display ()
{
WriteCMD(0x80);
for(y=0;y<7;y++)
{WriteData(name[y]);mydelay(5);}
mydelay
(2);
WriteCMD(0x80+0x40);
for(z=0;z<12;z++)
{WriteData(num[z]); mydelay(5);}
for(x=0;x<19;x++)
{WriteCMD(0x18);mydelay(5);}}
图2.4.3-1 LCD显示子程序流程图
2.4.4 系统主程序设计
播放器工作时,程序工作流程图如图2.4.4-1所示,先对在程序过程中所需的各种标记位及参数进行初始化赋值,再执行按键扫描子程序并计算及保存键值,根据其中的模式转换键的按键次数进行模式判断,按键次数为1时播放器处于自动播放模式,扬声器播放模块开始工作,同时彩灯伴奏模块随着单片机端口高低电平的变换闪烁达到伴奏的效果,另一方面显示模块进入工作状态对当前曲目的曲目名进行显示;按键次数为2时播放器处于手动弹奏模式,再次对按键进行扫描,对按下的键值进行分析,单片机输出相应的音符,彩灯伴奏模块也伴随音符闪亮,同时LCD显示模块对当前音符进行显示。
图2.4.4-1 系统主程序框图
2.4.5总体流程图
主程序实现对单片机进行初始化后,进入曲目识别子程序,进行歌曲曲目判断。
确定歌曲曲目后,数码管再进行显示。
然后,子程序对是否播放进行循环判断,得到播放中断的指令后再进行播放。
执行播放后,关闭数码管显示并调用查表子程序进行播放音乐。
在播放音乐的过程中,查表子程序循环判断音乐是否结束。
当音乐结束时,程序跳转回曲目识别子程序。
如图2.4.5-1所示。
图2.4.5-1 总体流程图
2.4.6 单片机音阶代码实现
音调的高低用音阶表示,不同的音阶对应不同的频率。
因此,不同频率的方波就可以产生音阶,音阶与频率的关系见表3.4.6-1。
由于频率的倒数是周期,因此可由单片机中的定时控制方波周期,当定时器计数溢出时产生中断。
将与扬声器连接的P1.7取反后就可得到方波的周期,从而达到了控制频率,即音阶的目的。
表2.4.6-1 音阶与频率的关系
音阶
频率(Hz)
定时器初值
音阶
频率(Hz)
定时器初值
音阶
频率(Hz)
定时器初值
1
2
3
4
5
6
7
0
131
147
165
175
196
220
247
0
0F85EH
0F933H
0F9F0H
0FA49H
0FAE6H
0FB74H,
0FBF4H
0100H
1
2
3
4
5
6
7
0
262
294
330
349
392
440
494
0
0FC2FH
0FC99H
0FCF8H
0FD22H
0FD73H
0FDBAH
0FDFAH
0100H
1
2
3
4
5
6
7
0
523
587
659
698
784
880
988
0
0FE17H
0FE4CH
0FE7CH
0FE91H
0FEB9H
0FEDDH
0FEFDH
0100H
低八度音
中音
高八度音
注:
0表示简谱中的空拍
当晶体振荡频率为6.144MHz,定时器工作在方式1下时,若各音阶相对应的定时器计数初值为X,则可根据下式计算X:
(2.4.6-1)
音调的长短用节拍数表示(例如1/4拍、2/4拍、……),不同节拍数的不同音符的组合形成乐谱。
程序中,音的节拍可由延时子程序实现。
延时子程序设定为四分之一拍,节拍值只能是它的整数倍。
3结束语
本设计以MSC-51系列单片机为核心,充分利用了AT89S52芯片的I/O引脚,以独立式键盘作为琴键输入及曲目的选择键,采用LCD1602对当前曲目及音符进行显示,并利用发光二级管进行音乐伴奏。
本文从理论上分析了该设计方案的可行性,并预计能达到设计要求,主要体现在:
拥有彩灯伴奏功能;
具有音频D/A转换功能,可以输出音频模拟信号并能播放音频文件;
显示歌曲信息功能;
播放器具有手动弹奏和自动播放两个模式。
毕业设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为通信专业的学生来说掌握单片机的开发技术是十分重要的。
也十分有意义的,而且是十分必要的。
在已度过的大学时间里,我们大多数接触的是专业课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似的毕业设计就为我们提供了良好的实践平台。
在做本次毕业设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
我们是在做单片机毕业设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
其次,在这次毕业设计中,运用到了以前所学的专业课知识。
这是我做这次毕业设计的又一收获,要做好一个毕业设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路,但是从中学到的知识会让我受益终身。
我的题目是音乐播放器硬软件的设计,对于我们这些工科学生来说,这是一次考验。
怎么才能找到课堂所学与实际应用的最佳结合点?
怎样让自己的业余更接近专业?
怎样让自己的计划更具有序性,而不会忙无一用?
这都是我们所要考虑和努力的。
这次毕业设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。
通过这次毕业设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。
这次毕业设计通过自己的努力,同学的帮助,还有在XX、XX老师的辛勤指导下,最终顺利完成。
本课题在选题及进行过程中得到XX、XX老师的悉心指导。
在老师多次帮助我分析思路,开拓视角,在我遇到困难想放弃的时候给予我最大的支持和鼓励。
老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。
再多华丽的言语也显苍白。
在此,谨向老师致以诚挚的谢意和崇高的敬意。
附录
附录1:
硬件原理图及PCB图
附录2:
软件主程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#define LCDPORTP0
unsignedintcodetab[]={64021,64103,64260,64400,
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178};
unsignedcharcodename[]="1234567" ;
unsignedcharcodenum[]="200711111111" ;
unsignedcharcodetab1[]="PLAYINGMUSICIS";
unsignedcharcodetab2[]="TWOBUFFER";
unsignedcharcodetab3[]="THETONEIS";
unsignedcharcodetab4[]="LOWSOLOWLALOWTIMIDDOMIDREMINMIMINFAMIDSOMIDLAMIDTIHIGDOHIGREHIGMIHIGFAHIGSOHIGLA"
//两只蝴蝶
UnsignedcharcodeMusic_Two[]={0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x10,0x0E,0x15,0x04,0x0F,0x01,0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,0x15,0x01,0x10,0x03,0x15,0x03,0x16,0x02,0x16,0x0D,0x17,0x03,0x16,0x03,0x15,0x03,0x10,0x03,0x15,0x03,0x16,0x01,0x17,0x03,0x16,0x03,0x17,0x01,0x16,0x03,0x17,0x03,0x16,0x03,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 MP3 播放 设计 毕业设计