基于51单片机音乐播放器设计内容摘要:

89C51单片机作为主机,它们都具有4K片内ROM,128字节片内RAM,片外ROM寻址范围达64K,片外RAM寻址范围达64K,2个16位计数器,5个中断源,4个并行口,1个串行口。 简易自动乐曲播放器采用单片机最小系统足以满足系统设计要求,同时要设计单片机最小系统的晶振和复位电路。 单片机复位电路复位是单片机的初始化操作,其作用是使CPU中的各个部件都处于一个确定的初始状态,并从这个状态开始工作。 当8051的ALE及 两脚输出高电平,RST引脚高电平时,单片机复位。 8051单片机的复位电路有上电复位和手动按钮复位两种形式,RST/VPD端的高电平直接由上电瞬间产生高电平则为上电复位;若通过按钮产生高电平复位信号称为手动按钮复位。 图51为兼有上电复位与按钮复位的电路。 图中,上电瞬间RST端的电位与Vcc相同,随着电容充电电流的减小,+5V立即加到了RST/VPD端,该高电平使8051复位。 若运行过程中,需要程序从头开始执行,这只需按图51中的按钮即可。 按下按钮则直接把+5V加到了RST/VPD端从而复位,这称为手动复位。 在实际应用系统中,有些外围芯片也需要复位,如果这些复位端的复位电平要求与单片机的要求一致,则可以与之相连。 单片机晶振电路晶振是给单片机提供工作信号脉冲的,这个脉冲就是单片机的工作速度。 比如 12M晶振,单片机工作速度就是每秒 12M。 当然,单片机的工作频率是有范围的,不能太大,一般 24M就不上去了,不然不稳定。 图52为晶振电路。 图51 复位电路图52 晶振电路 键盘接口电路的设计单片机应用系统中的人机对话通道是用户为了对应用系统进行干预以及了解应用系统运行状态所设置的通道。 主要有键盘、显示器等通道接口。 在单片机应用系统中,为了控制系统的工作状态以及向系统中输入数据,应用系统设置键盘,用于系统复位,功能转换以及数字输入。 键盘的设置可以实现人机对话,借助键盘可以向计算机系统输入程序、置数、送操作命令、控制程序的执行走向等。 在本次设计中键盘由P1口输入, 按键设置:1~4四个数字键,A~F六个功能键。 数字键(1~4): 用于输入1~4共4首乐曲的序列号。 功能键(A~F): A键:乐曲从1~4按顺序播放B键:乐曲从1~4循环播放C键:循环播放某一乐曲D键:从某一乐曲开始播放至最后一首乐曲E键:暂停/播放F键:停止播放各功能键(A~F)的意义与操作:A键:乐曲从1~4按顺序播放。 当用户按下A键后,LED显示器清屏,简易自动乐曲播放器按照从头到尾的顺序自动播放预先设定的1~4共4首乐曲,全部乐曲播放完毕则停止。 B键:乐曲从1~4循环播放。 当用户按下B键后,LED显示器清屏,简易自动乐曲播放器按照从头到尾的顺序自动循环播放预先设定的全部乐曲。 C键:循环播放某一乐曲当用户按下C键后,并选定某一乐曲,随即输入选定乐曲的序列号(1~4),即按下1~4数字键之一,简易自动乐曲播放器对选定的某一乐曲循环播放。 D键:从某一乐曲开始播放至最后一首乐曲当用户按下D键后,并选定某一乐曲,随即输入选定乐曲的序列号(1~4),即按下1~4数字键之一,简易自动乐曲播放器就从选定的某一乐曲开始播放,直到乐曲播放完毕则停止。 E键:暂停/播放。 当用户按下E键时,简易自动乐曲播放器打断正在播放的某一乐曲,用户再次按下E键时,该乐曲继续播放。 F键:停止播放。 当用户按下F键时,简易自动乐曲播放器终止正在播放的某一乐曲。 本设计中按键作为输入部分,由P1口输入。 LED显示接口电路的设计在单片机应用系统中,使用的显示器主要有LED显示器(发光二极管显示器)。 这种显示器成本低廉,配置灵活,与单片机接口方便。 在本系统的设计中采用LED显示器。 LED显示器由8位LED数码管组成,用于显示系统在各种不同条件下的状态。 用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态显示,按译码方式分为硬件译码和软件译码。 静态显示是显示驱动电路具有输出锁存功能,单片机将要显示的数据送出后不再控制LED,直到下次显示时再传送一次新的显示数据。 静态显示的数据稳定,占用CPU时间少。 动态显示要CPU时刻对显示器件进行数据刷新,显示数据会有闪烁,占用的CPU时间多。 这两种显示方式各有利弊:静态显示虽然数据显示稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的电路硬件较多;动态显示虽然闪烁,占用的CPU时间多,但使用的硬件少,能节省线路板空间。 在本设计中由于显示部分比较简单,所以选用了静态显示方式,LED显示器由74LS373来驱动,为了扩展外部存储器需一块74LS373(地址锁存器)。 LED发光器件一般常用的有两类:数码管和点阵。 常用的数码管一般为8字型数码管,分为A、B、C、D、E、F、G、DP八段,其中DP为小数点。 数码管常用的有10根管脚,每一段有一根管脚,另外两根管脚为一个数码管的公共端,两根之间相连通。 数码管从电路上来看可分为共阴和共阳两种,在本设计中用了共阳的LED。 扬声器控制电路的设计扬声器控制电路用于发出不同频率的音调。 硬件原理图通过以上分析,本次设计的音乐播放器的电路原理图如图53所示。 图53 音乐播放器的原理图第6章 音乐播放器的软件设计软件设计的重点在于定时中断的设计、键盘控制、显示的实现、乐曲的演奏等方面。 主控软件的设计与流程图主模块是系统软件的框架。 本系统的主模块的程序框图可用图61来表示。 主控模块用于控制系统的工作。 该模块先初始化,接着接受到复位信号后读取键盘信号,再调用各键子程序。 开始关闭定时器T0、T1置定时器T0、T1工作方式 显示等待提示状态F读取键盘N是否有键输入。 是否是A键。 YY是否是B键。 NA键子程序YB键子程序N是否是D键。 YNC键子程序A键子程序是否是C键。 Y图61 主控模块的流程图主控程序主要源程序代码如下:START: MOV SP, 60HMOV TMOD, 11HMOV IE, 8AH MOV IP, 08H。 T1中断优先于T0中断MOV TH1, 3CHMOV TL1, 0BH。 以上为系统初始化,T=50msW1: MOV P2, 10001110B。 等待提示FLCALL GETKEYCJNE A, 0FFH, W1 MOV A, BCJNE A, 0AH, W2LCALL KEY_A。 输入键是39。 A39。 ,转KEY_ASJMP W1W2: CJNE A, 0BH, W3 LCALL KEY_B。 输入键是39。 B39。 ,转KEY_BW3: CJNE A, 0CH, W4 LCALL KEY_C。 输入键是39。 C39。 ,转KEY_CW4: CJNE A, 0DH, W5 LCALL KEY_DSJMP W1。 输入键是39。 D39。 ,转KEY_D 定时中断服务子程序的设计与流程图中断入口定时器T0 用于产生不同频率的音阶,如图62为定时器T0的中断服务子程序。 而定时器T1控制延时来实现不同的节拍,定时时间设定为50ms,图63为定时器T1的中断服务子程序。 关闭定时器T0产生周期方波查频率表重装音频初值启动定时器T0中断返回图62 定时器T0的中断服务流程图中断入口关闭定时器T1装入定时常数=3C0BH启动定时器T1查频率表重装音频初值节拍数减1图63 定时器T1中断服务流程图中断返回其程序如下所示INT_T0: CLR TR0 ;定时器0中断子程序 MOV TL0, 20H MOV TH0, 21H CPL SETB TR0 RETI INT_T1: CLR TR1。 定时器1中断子程序 CLR TR0 LCALL KEY_E MOV TH1, 3CH MOV TL1, 0BH DJNZ 60H, OUT MOV 60H, 20OUT: SETB TR1 RETI 键盘控制模块的设计与流程图键盘控制模块分为6个功能键和读4个数字键。 下面分别介绍各个键的流程图和程序: F键子模块 入口F键是用于实现系统复位系统复位系统返回图64 F键流程图 E键子模块E键用于实现对乐曲的暂停和播放入口LED显示ETR0、TR1取反 E键被按下。 NY系统返回图65 E键子程序流程图按下E键的主要源程序代码如下KEY_E: JB , L2。 中断键盘检测 LCALL DELAY2。 消除抖动 JB , L2。 如果是高电平就跳到L2 JNB , $。 如果仍然是低电平就执行中断程序 MOV P2, 10000110B。 让LED显示EL3: JB , $。 检测低电平,直到低电平时才跳出该指令 LCALL DELAY2 JB , L3 JNB , $。 如果再来一个高电平才跳出中断 MOV P2,R5L2: SETB TR0 RET A键子模块当用户按下A键后,LED显示器清屏,简易自动乐曲播放器按照从头到尾的顺序自动播放预先设定的1~4共4首乐曲,全部乐曲播放完毕则停止。 入口LED显示器清屏调MUSIC1~MUSIC4子程序即按顺序自动播放4首乐曲,并显示相应的序号系统返回图66 A键子程序流程图A键主要源程序代码如下:KEY_A: LCALL MUSIC1。 乐曲《真的爱你》 LCALL MUSIC2。 乐曲《祝你平安》 LCALL MUSIC3。 乐曲《八月桂花香》 LCALL MUSIC4。 乐曲《老鼠爱大米》 RET B键子模块当用户按下B键后,LED显示器清屏,简易自动乐曲播放器按照从头到尾顺序自动循环播放预先设定的全部乐曲。 LED显示器清屏入口调A键盘子程序系统返回图67 B键子程序流程图B键主要源程序代码如下:KEY_B:。 B键子程序(从1~4循环播放)T11: LCALL KEY_A SJMP T11 RET D键子模块当用户按下D键后,并选定某一乐曲,随即输入选定乐曲的序列号(1~4),即按下1~4数字键之一,简易自动乐曲播放器就从选定的某一乐曲开始播放。 图68 D键子程序流程图D键源程序代码如下:KEY_D:。 D键子程序(从某一乐曲开始播放,播放完后停止)T2: LCALL GETWORD CJNE A, 0FFH, T2 MOV A, B CJNE A, 00H, B1 SJMP C0B1: CJNE A, 01H, B2 SJMP C1B2: CJNE A, 02H, C3 SJMP C2C0: LCALL MUSIC1。 乐曲《真的爱你》C1: LCALL MUSIC2。 乐曲 《祝你平安》 C2: LCALL MUSIC3。 乐曲《八月桂花香》C3: LCALL MUSIC4。 乐曲《老鼠爱大米》 RET 读数字键读取正在播放乐曲的序号,读取键盘后消去键盘抖动接着显示和保存数据。 图69 GETWORD子程序(读数字键0~4)流程图读数字键主要源程序代码如下:GETWORD:。 读音乐序号子程序S1: JB , S2。 读1键 LCALL DELAY2 JB , S1 JNB , $ MOV P2, 11111001B。 显示1 MOV R5, 11111001B MOV A, 0FFH MOV B, 00H RET 演奏乐曲模块的设计与流程图(1) 将音阶代码组成一个字节,节拍代码组成一个字节,按照:音阶代码,节拍代码,音阶代码,节拍代码 …… 的顺序,将一个乐谱转换为一定长度的代码数据表。 (2) 在程序执行时顺序查此表,取出音阶代码,并根据音阶代码查频率表,以得到该音阶对应的频率,随后将对应的定时初值送定时器T0,使定时器T0产生该音阶对应的频率,驱动外接扬声器发声。 (3) 取出节拍代码N,由定时器T1控制延。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。