毕业设计(论文)基于凌阳单片机的音乐播放器的设计与实现.doc
-
资源ID:3980231
资源大小:2.37MB
全文页数:47页
- 资源格式: DOC
下载积分:8金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
毕业设计(论文)基于凌阳单片机的音乐播放器的设计与实现.doc
摘要随着高新技术的发展,对于那些高技术的产品生产的成本会越来越低;随着人们娱乐生活的充实,使得像音乐播放器MP3这样的娱乐工具得到了很大的普及,由于人们对此需求量增多的同时也对其要求的功能也逐渐的趋于多样化,使得那些对知识的渴望与对专业的爱好者不得不有一种想法那就是用自己的所学为自己做一部自己喜欢的音乐播放器。本设计介绍一种以SPCE061A单片机为核心的音乐播放器,并辅有一些外围器件与软件来实现。硬件设计主要有两大部分组成:液晶显示部分和语音存储与播放的部分,分别采用凌阳公司的两个设计模块:主要是由SPCE061A组成的精简开发板做为主控板,一部分是用SPR4096存储模块来扩展存储容量实现语音的存储,另外一部分采用的LCD1602液晶模块来实现语音播放效果的显示,通过这两个模块最终完成设计的硬件要求。在软件方面使用了凌阳公司提供的语音压缩工具COMPRESS TOOL 工具与RESWRITER工具使得有足够的空间用来存储与烧写、更换自己喜欢的音乐。最后采用汇编语言编写程序,实现音乐的播放,开机时有欢迎提示画面,键盘界面显示,可通过按键选择歌曲。按键后播放对应歌曲,显示界面,对应的歌曲反色显示。关键词:SPCE061A;音乐播放器;1602液晶显示;SPR模组;The Design and implementation of Music Player Based on Spce061AABSTRACTA microcontroller core with SPCE061A music player, and assisted a number of peripheral devices, using assembly language programming to realize the music going, have welcomed the prompt boot screen, select a song by pressing a button. After the Play button corresponding to songs, display interface, the corresponding anti-color display song and give the system hardware and software design.Key words: SPCE061A; music player; 1602 LCD; SPR module;目 录中文摘要ABSTRACT.第一章 选题背景与系统总体设计方案51.1 选题背景51.2 设计方案的提出61.2.1 系统的工作原理71.2.2 系统的硬件方案71.2.3 硬件模块连线图8第二章 音乐播放器的硬件设计102.1 主控板模块102.2 SPCE061A精简开发板122.3 SPR模组模块132.3.1主要功能132.3.2结构框图13 2.3.3SPR模组模块电路分析.132.4液晶LCD602显示模组模块162.4.1液晶LCD1602的基本参数及引脚功能16 2.4.2液晶LCD1602均衡效果显示.172.5语音更换及语音压缩.18 2.5.1语音更换及语音压缩的操作.18第三章 音乐播放器的软件设计293.1音乐播放器的主函数设计293.2 音乐播放器语音函数的设计33结论45致谢语46参考文献47附录48第一章 选题背景与系统总体设计方案1.1选题背景 随着大规模集成电路技术的发展,将CPU、RAM、ROM、定时器/计数器以及输入/输出(I/O)接口电路等主要计算机部件集成在一块集成电路芯片上构成单片机成为一种趋势,可以说单片机已经基本上具备了微机系统的功能,因此单片机在今后的计算机硬件领域中具有不可替代作用,其发展前景是非常看好。当前单片机应用的领域越来越多,单片机的功能将得到淋漓尽致的实现。将单片机用于控制过程,在国内外都已经得到了充分的发展。据统计,我国的单片机年需求量已达1-3亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。特别是沿海地区的电子厂,其产品多数要用到单片机,并不断地向内地辐射,这说明单片机应用在我国才刚刚起步,有着广阔的前景,目前单片机已渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的足迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说全自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的工程师和科学家。科技越发达,智能化的东西就越多。本设计介绍了一个以凌阳科技公司的SPCE061A单片机、SPR模组与液晶1602以及相应的软件程序部分实现音乐播放器的设计。设计主要有两大部分组成:液晶显示部分和语音播放,分别采用凌阳公司的两个设计模块:完成一个是由SPCE061A组成的精简开发板做为主控板;另外一部分采用的LCD1602液晶模块。通过这两个模块最终完成设计的要求。对我设计过程中用到的各种硬件模块和系统实现所需软件工具的应用有了更深刻的了解和认识。1.2设计方案的提出通过对凌阳SPCE061A单片机的仔细研读,了解了其系统丰富的内部资源,在此基础上加之对凌阳设计资料之设计方案的参考,我总结了两种设计方案如下:方案一:根据设计的要求整个硬件电路是采用AT89S52单片机作为中心控制模块来满足设计需要,实现整个系统的中心控制,外部适当的扩展播放、选曲、显示、电子琴和彩灯等模块组成。该硬件系统框图如下图所示:液晶显示模块中心控制模块AT89S528按键电子琴模块播放模块彩灯模块自动音乐和歌曲自动播放转换按钮5首音乐选择按钮图1 硬件系统设计框图方案二:系统以SPCE061A为核心,可以划分成为61板自带的按键作为输入,液晶1062用户界面提示与均衡器效果、SPR4096资源存储与61板语音播放等部分,如下图所示:61板作为整个系统的核心控制,并且负责语音的输出;SPR模组作为语音资源的存储介质,这些语音资源是通过专门的ResWriter工具烧写到SPR4096芯片中的;61板自带的键盘与液晶1602实现用户控制音乐播放盒的控制与显示作用,在播放音乐时,液晶1602还可以显示音乐的均衡效果。由于这个芯片使用较少的外围器件就能实现最小系统,本次毕业设计就是采用了方案二,该硬件系统框图如下图所示:SPCE061ASIOSPR4096液晶1602键盘图2 硬件系统设计框图1.2.1系统的工作原理系统以SPCE061A为核心,用自带键盘作为输入;液晶LCD1602与61板连接实现音乐播放时均衡器效果的显示;SPR4096作为语音资源的存储介质与61板连接实现语音的播放控制功能。1.2.2系统的硬件方案系统主要包括SPCE061A精简开发板、SPR4096 FLASH存储芯片、液晶LCD1602液晶显示。SPCE061A是整个设计的核心控制器件,负责控制液晶LCD1602的输出,按键信息的采集输入和语音资源的播放。液晶显示和按键主要是作为人机交互的作用,显示音乐播放时的均衡器效果,同时利用按键实现不同的操作。硬件框图如下图所示:SPCE061ASIOSPR4096液晶1602键盘图3 硬件框图61板作为整个系统的核心控制,并且负责语音资源的输出。SPR4096模组作为语音资源的存储介质。液晶LCD1602显示模组作为语音播放的均衡器效果与用户的输出设备。1.2.3硬件模块连线图根据设计的要求硬件模块规划如下图所示:图4 硬件连线图IOA0Key1(61板自带的按键,按键的另一端接5V电压);IOA1Key2;IOA2Key3;IOA8-IOA15-D0-D7(液晶LCD1602);IOB13RS(液晶LCD1602数据/命令选择端);IOB14R/W(液晶LCD1602读/写选择端);IOB15EP(液晶LCD1602使能端);IOB0SCK(SPR4096模组);IOB1SDA(SPR4096模组)。功能说明:结合61板的3个按键实现如下的功能:Key1 开始或暂停切换Key2 单按播放下一曲Key3 单按播放下一曲按住1秒钟关闭音乐图5 按键功能图停止状态:按KEY1键开始播放音乐,按KEY2 键选择上一首曲目,按KEY3键选择下一首曲目,按KEY3键一秒钟恢复到停止状态。播放音乐状态:按KEY1键暂停播放音乐,按KEY2键选择上一首曲目,按KEY3键选择下一首曲目。第二章 音乐播放器的硬件设计在利用凌阳61板设计音乐播放器的过程中,用到三种硬件模块和实现语音播放、音乐更换与语音压缩等方法的软件工具。三种硬件模块分别为控制音乐播放的主控板模块(即SPCE061A板)、存储语音资源的SPR模组模块(包括SPR_4096和SPR_1024两种型号)和实现音乐播放显示功能的液晶1602模块(显示音乐播放时的均衡器效果等功能)。2.1 主控板模块SPCE061A 是凌阳科技研发生产的性价比很高的一款十六位单片机,使用它可以非常方便灵活的实现语音的录放功能,该芯片拥有 8 路 10 位精度的 ADC,其中一路为音频转换通道,并且内置有自动增益电路。这为实现语音录入提供了方便的硬件条件。两路 10 位精度的 DAC,只需要外接功放(SPY0030A)即可完成语音的播放(这两点是此芯片相对于51芯片的优势所在)。另外凌阳十六位单片机具有易学易用的效率较高的一套指令系统和集成开发环境(unSP IDE)。SPCE061A 片内还集成了一个 ICE(在线仿真电路)接口,使得对该芯片的编程、仿真都变得非常方便,而 ICE 接口不占用芯片上的硬件资源,结合凌阳科技提供的集成开发环境(unSP IDE)用户可以利用它对芯片进行真实的仿真;而程序的下载(烧写)也是通过该接口进行下载。主控板模块主要由电源板电路模块、音频输入MIC电路和音频输出DAC电路等功能模块组成。(1)电源板电路模块分析图下图是电源部分的电路,4.5V直流电压经过SPY0029后产生3.3V电压,从而给整个系统供电。图6电源电路图图中的VDDH3为SPCE061A的I/O电平参考,接SPCE061A的51脚,这种接法使得I/O输出高电平为3.3V;VDDP为PLL锁相环电源,接SPCE061A的7脚;VDD和VDDA分别为数字电源与模拟电源,分别接SPCE061A的15脚和36脚;AVSS1是模拟地,接SPCE061A的24脚;VSS是数字地,接SPCE061A的38脚;AVSS2接音频输出电路的AVSS2。(2)音频输入电路MIC电路音频输入电路如下图所示: 图7音频输入电路原理图此部分起到了将外部音频输入到凌阳芯片中的作用,其工作原理如下:麦克风相当于一个可变电阻串联到电路中,C11、C12将麦克风的阻值变换耦合输入到SPCE061A的对应引脚MICP(麦克风差动输入正端),MICN(麦克风差动输入负端),从而完成了音频的输入。VICM为麦克风提供电源串联电阻R1R4 MICROPHONE R3到地形成回路,电容C1起滤波作用。VCM为上拉电阻提供电源使两输入端始终保持着高电平从而保证输入信号有效。电容C9和C6起到去耦和滤波作用。(3)音频输出电路DAC电路音频输出电路原理图 如下图所示:此部分为语音输出部分,其工作原理如下:接口J2从SPCE061A的DAC部引脚接入信号通过改变电阻R9的阻值可以形成不同频率的信号,再经过C23将信号耦合输入到音频集成放大电路芯片SPY0030的4,5输入端,经其放大之后从1,2脚输出到扬声器。图8音频输出电路原理图2.2 SPCE061A 精简开发板“61板”是SPCE061A EMU BOARD的简称,是以凌阳 16 位单片机 SPCE061A 为核心的精简开发仿真实验板。61 板除了具备单片机最小系统电路外,还包括有电源电路、音频电路、复位电路等。61 板上有调试器接口(Probe 接口)以及下载线(EZ_Probe)接口,分别可接凌阳科技的在线调试器、简易下载线,配合凌阳十六位单片机软件开发工具unSP IDE,可方便地在板上实现程序的下载、编译和在线仿真调试。2.3 SPR模组模块2.3.1 主要功能SPR芯片分为两种:SPR_4096和SPR_1024两种。在本次设计中采用的是SPR_4096芯片,该芯片的作用是存储语音资源。SPR模组是凌阳科技公司针对存储器芯片SPR_4096/SPR_1024开发的简易烧写器。该烧写器配合PC机ResWriter工具,通过EZ_probe下载线,完成对SPR_4096/SPR_1024存储芯片的擦除、写入、校验等功能。并且在SPR模组上留有与SPCE061A单片机的接口,可以实现SPR模组与SPCE061A单片机组成的系统。2.3.2 结构框图SPR_4096/1024结构框图如下图所示: 图9 SPR_4096/1024结构框图SPR 模组预留两个接口,一个接口是 EZ-probe,这是在使用 ResWriter 工具对 SPR4096/1024 进行烧写时连接使用的,另一个是 10PIN 的排线,主要提供电源以及与 SPCE061A 连接使用。SPR 模组电路支持 SPR4096 和 SPR1024,但这两种芯片不能同时使用,SPR 模组电路只能对其中一种芯片进行使用,而且在使用时必须配备下载线使用。2.3.3 SPR模组模块电路分析SPR模组是针对语音资源存储芯片SPR_4096/1024芯片开发的建议语音烧写器。它的作用是存储语音资源,然后通过主控板的语音处理功能和相应语音资源播放功能。SPR模组电路分析SPR模组_4096硬件原理图如图10所示:图10 SPR_4096硬件原理图SPR模组_4096的硬件电路主要分成3大部分:第一部分:ResWriter工具对SPR_4096/SPR_1024进行烧写的硬件电路如图11所示:图11烧写SPR_4096/1024硬件电路图分电路主要起到控制SCK、SDA信号的作用,通过74HC244可以控制SDA信号的通与断,这样可以使用ResWriter工具发出符合烧写芯片的时序信号,完成对芯片的擦除、写入与校验功能。 第二部分:SPR_4096的工作电路,如图12所示: 图12 SPR_4096工作电路此部分工作电路是为了使SPR_4096存储器工作的外围电路,通过SCK与SDA与外界相连。第三部分:SPR1024的工作电路,如图13所示:图13 SPR1024工作电路此部分工作电路是为了使SPR1024存储器工作的外围电路,通过SCK与SDA与外界相连。另外,SPR模组_4096还有其他接口电路,如图14所示:图14 SPR模组_4096接口跳线电路上图最左边的电路是SPR4096片内FLASH与片内SRAM的选择端,当MEM选择与地短接时使用的是SPR4096的片内FLASH,当MEM选择与电源短接时使用的是SPR4096的片内SRAM。2.4 液晶LCD1602显示模组模块液晶LCD1602显示模组在实现音乐播放器功能和显示音乐播放均衡器效果上起到非常重要的作用。2.4.1 液晶1602LCD的基本参数及引脚功能 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图所示:图15 1602LCD尺寸图1602LCD主要技术参数:显示容量:16×2个字符; 芯片工作电压:4.55.5V; 工作电流:2.0mA(5.0V); 模块最佳工作电压:5.0V; 字符尺寸:2.95×4.35(W×H)mm引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下所示: 编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极 图16 引脚接口说明图第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高 , 对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。 第15脚:背光源正极。第16脚:背光源负极。2.4.1 液晶LCD1602均衡效果显示:在设计音乐播放器的过程中,液晶显示模组在实现音乐播放和显示均衡效果等功能上起着很重要的作用。语音资源播放时均衡器效果显示如下图所示:图17 音乐播放均衡效果显示2.5音乐更换与语音压缩 音乐更换与语音压缩在设计音乐播放系统时是一个必不可少的过程。语音资源存储器SPR模组只支持二进制语音文件,在向SPR模组烧录语音资源时,首先通过网络下载到自己喜欢的音乐,如果是mp3格式的就要通过音频格式转化软件将其转化为wav格式,然后用语音压缩软件工具Compress Tool将转化好的语音资源压缩成二进制语音文件,最后再通过语音烧写工具ResWriter将二进制的语音文件烧录到语音存储器SPR模组中。2.5.1 语音更换与语音压缩的操作按照以下步骤实现语音资源的更换:步骤一:语音资源的准备,通过网络获取自己喜欢的音乐文件,现在以MP3的格式为例来说明,如下图所示:图18 语音资源文件步骤二:使用音频格式转化软件如coolEditpro软件将非wav格式的转化成wav格式。步骤三:使用coolEditpro软件打开音乐文件,如下图所示:图19 打开语音文件可以用鼠标选取语音文件,选取该语音文件的片段如下图所示:图20 截取语音文件片段步骤四:删除上图选中的语音资源片段如下图所示:图21 截取后的语音文件步骤五:选择菜单Filesave as如下图所示:图22 选择菜单另存为步骤六:在弹出的对话框里选择保存类型*WAV文件,如下图所示:图23 另存为WAV文件步骤七:点击保存,在文件夹中出现修改后的wav文件,如下图所示:图24 生成的wav文件步骤八:使用windows自带的录音机程序将wav文件打开,如下图所示:图25 使用录音机打开wav文件步骤九:执行菜单文件另存为,如下图所示:图26 录音机另存为步骤十:点击更改按钮,如下图所示:图27 更改wav文件的采样率步骤十一:选择8.000KHZ,16位,单声道,如下图所示:图28 改变语音文件的属性选择属性后的对话框,如下图所示:图29 选择后的语音文件属性对比语音资源更改前与更改后的区别使用凌阳的音频压缩工具将修改后的WAV文件压缩成为A2000格式的文件。步骤十二:启动Compress软件如下图所示:图30 compress压缩工具启动界面步骤十三:打开需要压缩的语音文件,如下图所示:图31 打开需要压缩的语音文件步骤十四:选择压缩后目标文件的路途与名称,如下图所示:图32 选择压缩后目标文件的路径和名称步骤十五:使用鼠标双击源文件名或压缩文件名,试听声音进行对比如下图所示:图33 对比源文件与压缩文件步骤十六:如果对压缩文件满意,单击完成,在目标文件夹生成压缩文件,如下图所示;如果不满意,则返回前面步骤重新选择语音文件等。图34 生成目标(A2000格式)文件步骤十七:得到的目标文件扩展名为24K,将文件名更改为英文或者数字,如下图所示:注意*OUT文件为PCM编码文件,可以直接用录音机打开试听压缩文件的效果图35 更改目标文件为英文名步骤十八:使用ResWriter软件工具将压缩文件(*24K)打开,如下图所示:图36 使用ResWriter软件工具打开压缩文件步骤十九:点击自动下载,将语音资源烧写到SPR4096芯片中,如下图所示:注意硬件连接要连接好。图37 自动烧录语音文件第三章 音乐播放器的软件设计3.1音乐播放器主函数设计在音乐播放器的软件设计前,首先将源程序下载到61板上。当把程序下载到61板上,通过61板的语音处理功能将存储在SPR模组中的语音资源播放出来,从而实现音乐播放器的功能。下载到主控板即61板上的程序是系统设计的主函数程序,主函数中完成SPR4096的初始化、键盘、液晶LCD1602的初始化,并进行停止状态的界面显示,然后进入循环根据键盘的值执行相关的操作。主函数文件名为main.c,主函数流程图与主函数程序如下图所示:清看门狗开始初始化键盘初始化液晶1602初始化SIO口调用停止状态的界面显示获得键盘值停止状态播放音乐根据键值执行相关操作音乐播放标志为1NY下一曲上一曲开8HZ中断,置音乐播放标志停止播放音乐图38 主函数流程图/=/The information contained herein is the exclusive property of/Sunnnorth Technology Co. And shall not be distributed, reproduced,/or disclosed in whole in part without prior written permission./(C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO./ALL RIGHTS RESERVED/The entire notice above must be reproduced on all authorized copies./=/=/工程名称:MusicBox.spj/功能描述:实现音乐盒毕业设计礼包的功能/涉及的库:CMacro1016.lib、SACMv26e.lib/组成文件:main.c/硬件连接:IOA0-Key1/IOA1-Key2/IOA2-Key3/Key-5V/IOA8-IOA15-D0-D7(1602液晶)/IOB0-SCK(SPR模组)/IOB1-SDA(SPR模组)/IOB13-RS/IOB14-R/W/IOB15-EP/维护记录:2005-12-14v1.0 edit by liuxue(liuxue)/20xx-xx-xx v1.x modify by xxxxxx(xxxxxx)/=/=/文件名称:main.c/功能描述:实现音乐盒的功能/维护记录:2005-12-14v1.0/=#include "spce061a.h"#include "a2000.h"#include "key.h"#include "spr4096_user.h"#include "speech.h"#include "lcd1602_user.h"unsigned int g_uiIndex = 0;/ 曲目索引unsigned int g_uiData5 = '1','2','3','4','5'/ LCD1602的字模显示void Stop_Dis(void);/ 在停止的时候的显示函数/=/语法格式:int main(void)/实现功能:MusicBox.spj工程主函数/参数:无/返回值:无/=int main(void)unsigned int uiKey;/ 判断键值unsigned int uiStatus;/ 音乐播放盒现在的状态0,处于暂停/停止状态;1,处于播放状态unsigned int uiInt;uiStatus = 0;/ 初始化,停止状态Key_Init();/ 初始化键盘LCD1602_Initial();/ 初始化液晶1602SP_SIOInitial();/ 初始化SIOwhile(1)Stop_Dis();/ 停止时显示uiKey = Key_Get();/ 获得键值switch(uiKey)case KEY_1:uiInt = *P_INT_Ctrl;/ 打开8Hz中断,在中断中调用均衡器效果函数uiInt |= C_IRQ6_TMB1;*P_INT_Ctrl = uiInt;uiStatus = 1;/ 开始播放音乐break;case KEY_2:g_uiIndex+;/ 下一曲if(g_uiIndex = 5)/ 5首曲目,序号重0到4g_uiIndex = 0;break;case KEY_3:g_uiIndex-;/ 上一曲if(g_uiIndex = 0xffff)/ 无符号数,0下来是0xffffg_uiIndex = 4;break;case KEY_1_THREE:break;case KEY_2_THREE:break;case KEY_3_THREE:SACM_A2000_Stop();/ 停止播放g_uiIndex = 0;/ 重新初始化uiStatus = 0;/ 重新初始化break;default:break;if(uiStatus = 1)PlaySnd_A2000();elseSACM_A2000_Stop();*P_Watchdog_Clear = 0x0001;while(1)*P_Watchdog_Clear = 0x0001;void Stop_Dis(void)Write_Command(0x0080);/ 显示菜单Write_Data('P');/ PRESS KEY1 STARTWrite_Data('R');Write_Data('E');Write_Data('S');Write_Data('S');Write_Data(' ');Write_Data('K');Write_Data('E');Write_Data('Y');Write_Data('1');Write_Data(' ');Write_Data('S');Write_Data('T');Write_Data('A');Write_Data('R');Write_Data('T');Write_Command(0x00c0);/ 在下一行显示Write_Data('K');/ K2 N K3 LWrite_Data('2');Write_Data(' ');Write_Data('N');Write_Data(' ');Write_Data('K');Write_Data('3');Write_Data(' ');Write_Data('L');Write_Data(' ');Write_Data('N');Write_Data('O');Write_Data('.');Write_Data(g_uiDatag_uiIndex);/ 显示曲目Write_Data('/');Write_Data('5');3.2音乐播放器语音函数的设计在音乐播放器的软件设计前,除了用将主程序下载到61板后还需要语音函数,由于语音资源存储在外扩的存储器SPR4096上面,要实现语音播放必须采用手动方式。需要获得语音资源,关键解决语音资源的起始地址,然后通过读取函数获得语音资源。放音程序的文件名是“speech.c”,放音程序流程图与程序如下图所示:开始取得语音资源的开始地址与结束地址初始化放音、队列与解码获得语音资源语音资源解码根据按键执行相关操作清看门狗语音播放结束判断解码队列是否为空是否有键按下是否播放结束如果是key1键按下,暂停然后继续扫描键盘,再次按下继续播放如果是key2键按下,曲目号加1,然后跳到语音播放开始处重新播放如果是key3键按下,曲目号减1,然后跳到语音播放开始处重新播放如果是按住key3键1秒,清除音乐播放标志,返回到停止播放状态NYNYNY图39语音流程图/=/文件名称:Speech.c/功能描述:MusicBox.spj工程播放语音的文件/维护记录:2005-12-14v1.0/=#include "spce061a.h"#include "a2000.h"#include "spr4096_user.h"#include "key.h"#include "LCD1602_User.h"#define BASE_START_ADDRESS0x0012#define BASE_END_ADDRESS0x0016unsigned int g_uiDAC;extern unsigned int g_uiIndex;extern unsigned int g_uiData;/=/语法格式:void Delay(unsigned int uitime)/实现功能:延时/参数:延时时间/返回值:无/=void Delay(unsigned int uitime)while(uitime > 0)uitime-;*P_Watchdog_Clear = 0x0001;*P_Watchdog_Clear = 0x0001;*P_Watchdog_Clear = 0x0001;*P_Watchdog_Clear = 0x0001;*P_Watchdog_Clear = 0x0001;*P_Watchdog_Cl