毕业论文-基于ATmega16的MP3的设计与实现_第1页
毕业论文-基于ATmega16的MP3的设计与实现_第2页
毕业论文-基于ATmega16的MP3的设计与实现_第3页
毕业论文-基于ATmega16的MP3的设计与实现_第4页
毕业论文-基于ATmega16的MP3的设计与实现_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 太原理工大学毕业设计(论文)用纸 绪论1.1 应用背景与意义1.1.1 背景1998年韩国世韩(SEAHAN)推出了世界上第一台MP3MPManF10,在世韩为人们带来惊喜之后,美国的美国的帝盟(Diamond)公司挑头,于1998年底推出了Rio PMP300,这是第一个让全世界都印象深刻的MP3。MP3(MPEG Audio Layer 3)是采用国际标准MPEG(Moving Pictures Experts Group,动态图象专家组)中的第三层音频压缩模式,对声音信号进行压缩的一种格式。MPEG声音压缩算法是一种通用的声音编码技术,它对音源的性质没有作任何假设,而是利用人耳的听觉特

2、性对声音进行压缩。MPEG音频层根据压缩质量和编码复杂程度划分为三层,即Layer1、Layer2、Layer3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG音频编码的层次越高,编码器越复杂,压缩率也越高,MP1和MP2的压缩率分别为4:1和6:1-8:1,而MP3的压缩率则高达10:1-12:1。也就是说,一分钟CD音质的音乐,未经压缩需要10MB的存储空间,而经过MP3压缩编码后只有1MB左右。跨入21世纪,MP3的高速发展使人们不再满足于闪存那以MB为单位的容量。2000年1月,音频硬件领域的老大哥创新推出了世界第一台2.5寸硬盘MP3N

3、OMAD Jukebox,它采用了富士通6.4GB的2.5英寸硬盘作为HYPERLINK /view/25689.htm存储介质,可以存储相当于100多张CD的MP3音乐,容量远远超过了当时的闪存MP3,不过体积也非常惊人,竟比一般的CD随身听还要大,其外形也跟CD随身听非常相似。虽然采用硬盘介质,但为了保证在运动时音乐能流畅地进行播放,创新为其设计了可支撑5分钟的8MB防震缓存,这样即使在外出及移动的条件下也不会出现音乐跳轨现象。当日历翻到2014年这一页的时候,MP3随身听已经经历了数年的发展,而随身听市场的竞争亦趋于白热化,几乎每个星期甚至每天都会有新品MP3的推出,其发展的速度实在惊人

4、!但一体化的设计导致存储容量固定,如果想下载更多的歌曲还得重新购买新的产品,造成了重大的浪费,另一方面,一体化又限制了MP3播放器在其他领域的应用,比如在一些固定场所使用MP3(非便携式),不方面拆卸。于是,将存储器和播放器分离成为MP3的另一个发展方向。1.1.2 意义基于ATmega16的音乐播放器应用的方面特别广,不仅便携简单,而且在一些特殊环境,如车载MP3,浴室MP3,这些不易移动的产所有很广泛的用途,别且可以作为很多系统的辅助功能,如智能家具,智能手机的一个功能模块。本论文设计的MP3在于播放器与存储器相分离的思想,U盘在市场上很容易买到,支持常用的文件系统FAT12,FAT16以

5、及FAT32,并且支持容量达100G,只要手上有U盘,而且有MP3等音频格式的文件,那么就可以使用本系统所提供的USB接口,直接插上去就可以播放音乐,同时,通过显示屏可以知道当前播放的歌曲,还可以通过按键直接控制音量和歌曲,比起过去用flash保存的音乐要方便的多。 最后,对我们大学生而言,提高了解决问题的能力,增强了动手能力,熟练了一些常见电子芯片的使用。理论分析与方法论证2.1 理论分析针对MP3音乐播放系统,要选择合适核心控制芯片和外部芯片来配合实现,因为本课题要求基于ATmega16的控制芯片,所以核心控制芯片选择ATmega16,下面分别介绍芯片选用原则和最终芯片和模块的确定。2.1

6、.1 ATmega16开发板和下载器控制芯片已经确定为ATmega16,那么如何将程序下载到单片机中?一种方法就是自己设计基于Atmega16的最小系统和必要的外围电路;第二种方法就是利用已经设计好的开发板,用现成的工具,直接下载到单片机,而且现在的开发板都会为用户提供外围接口,使用户能够根据自己的需求去开发其它系统。第一种方法开发周期较长,所以采用第二种方法,选择用现成的开发板。本课题选用由天翔电子公司设计的AVR开发板,如图2-1,下载器使用由轩微科技出品的USBISP,不用JTAG的的原因是本系统占用的I/O会比较多,而JTAG会占用PC口,影响实验结果,USBISP有个缺点是不具备仿真

7、功能,如图2-2。图 2-1 AVR 开发板图 2-2 USBISP下载器2.1.2 MP3解码芯片首先联想到能否用ATmega16单片机来直接对MP3音频文件直接解码?答案是不行的,因为对单片机而言,数字处理速度和资源都远远达不到,所以只能简介通过外部解码芯片来实现解码,并播放歌曲。MP3解码芯片常见的有VS100X系列、SAA775X系列、STA01X系列等;SAA775X系列是MP3播放器解码芯片组功能最全,效果最好的芯片,但价格较贵;STA01X系列需要外加DAC,使用起来多有不便;VS100X系列自带DAC输出功能,而且能解码的音频格式也比较多,同时价格合理。经过比较,选用VS100

8、3作为解码芯片,该芯片支持MP3、WMA、WAV、MIDI、等格式的解码,而且自带DAC输出;同时还可以调节音量、高低音等,更重要的是它还具有MIC功能,如需要还可以实现录音功能。因此,选用VS1003作为本课题音频解码芯片。如图2-3为VLSI公司生产的VS1003芯片图,2-4为由天翔电子公司设计的接入外围电路只提供与控制芯片接口的MP3播放器。 图 2-3 VS1003图 2-4 MP3播放器(模块)2.1.3 USB总线设备接口芯片USB总线设备接口设备较多较杂,在本课题中选用有南京沁恒公司生产的CH375b芯片,它是全速USB设备接口,兼容USBV2.0,即插即用,外围器件需要晶体电

9、容,支持HOST主机方式和DEVICE设备方式。在本地端,CH375b具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/DSP/MCU等控制器的系统总线上。在USB主机方式下,CH375b还提供了串行通信方式,通过串行输入、串行输出和中断输出与单片机/DSP/MCU等相连接。CH375b的USB主机方式支持各种常用的USB全速设备,外部单片机/DSP/MCU可以通过CH375b按照相应的USB协议与USB设备通信。单片机可以通过CH375b读写U盘中的数据,CH375提供了U盘文件级子程序库单片机可以直接调用子程序读写U 盘中的文件数据,硬件上只需要在原单片机系统中增加

10、一个CH375芯片,综合成本较低。CH375的U 盘文件级子程序库支持常用的FAT12、FAT16 和FAT32 文件系统,支持容量高达100GB 的U 盘。如图2-5为CH375b芯片,图2-6为有天翔电子公司设计的接入外围电路只提供与控制芯片接口的CH375U盘模块。 图 2-5 CH375B图 2-6 CH375U盘模块2.1.4 存储介质MP3播放器需要大容量的存储器来存放歌曲,可以选择Flash芯片存储、SD卡、U盘等。如果选用Flash,则整个系统需要较多的I/O端口来读取,更重要的一点,也是本次课题要解决的一个问题,那就是整个系统的容量就被固定了,扩容存在空难;而U盘和SD卡都是

11、不错的选择,并且U盘和SD卡均容易购买的到,同时价格较为低廉,所以,存储部分选用U盘读取来实现。2.1.5 液晶显示屏为了兼顾成本,选择普通单色液晶显示屏,常用的有LCD1602和LCD12864,在本课题中选择LCD12864,因为LCD12864本身带有字库的功能,系统不需要添加外部字库文件,就可以实现曲目等有效信息汉字显示;而LCD1602只有常见的ASCII符号,要想显示中文必须添加外部字库文件。如图2-7为液晶LCD12864。图 2-7 LCD128642.1.6 控制设备控制设备选用键盘,但是键盘又分为编码键盘和非编码键盘,键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号

12、或键值的称为编码键盘,如计算机键盘,而靠软件编程来识别的称为非编码键盘;由于成本低廉和结构简单考虑,在本次课题中选择非编码键盘。2.2 方法论MP3播放器系统以ATmega16为控制核心,不仅要管理USB总线的通用接口芯片CH375b、MP3解码芯片VS1003b、LCD12864液晶显示屏和按键的处理,而且还管理USB存储设备中的文件系统,查找文件,写文件等等。存储器里的媒体文件首先要查询,查询到的文件确定是音频文件(MP3等)后,把MP3路径名写到固定文件中,将所有的音频文件路径名写到固定文件中后,按照文件偏移,读取固定文件中的音频文件路径名,根据路径名,读取音频文件到MCU的RAM中,然

13、后又被送到解码芯片中,解码后的音频数据被还原成模拟音频,再由扬声器传出。由于ATmega16本身不支持USB接口功能,所以MCU无法直接与U盘完成数据传输的功能,存储设备需要通过自身的接口与CH375b相接。其它芯片是通过普通I/O端口连接的。软件开发平台在上一章中介绍了硬件设备的选择,那么我们知道,只有硬件而没有软件的机器就是一个没有灵魂的电人,所以,在这一章中介绍软件的开发平台,使没有灵魂的电人让它有自己的思想。3.1 编译器的选择我们知道,机器只认识机器代码,所以要将我们所编写的程序翻译成二进制机器码必须要使用编译器。由于单片机内存和程序存储空间非常有限,好的编译器可以优化源代码,使程序

14、的运行消耗资源小、效率提高,所以选择一个性能优越的编译器是必须的。AVR编译器非常多,常见的有ICCAVR,GCCAVR,IAR AVR等;ICCAVR编译器是市面上教科书使用它作为AVR例程的较多,集成代码生成向导,虽然它的各方面性能均不是特别突出,但使用较为方便,一般作为教学方面的应用;GCCAVR,GCC是Linux的唯一开发语言,GCC编译器优化程度可以说是目前世界上民用软件中做的最好的,另外,它有一个非常大的有点,免费!在国外,使用它的人几乎是最多的但,相对而言,它的缺点是操作比较麻烦;IAR实际上在国外比较多的人使用,但它的价格较为昂贵,所以,中国大陆内,使用它的开发人员比较少,只

15、有习惯用IAR的工程师才会去使用它。综上分析,使用GCCAVR是非常不错的选择。3.2 Atmel Studio 6简介Atmel公司在2012年推出广受欢迎的集成开发环境(IDE)的最新版ATmel Studio 6,支持基于Atmel32位ARM Cortex-M系列与Atmel 8/32位AVR系列的处理器(MCU)。Atmel Studio 6是免费的IDE,提供专业质量的开发工具,同时配有Atmel软件框架,因而显著降低了创建新设计的成本。利用Atmel软件框架,设计人员可以获得经验证的大型免费源代码库-包括近1000个设计样例。利用此IDE更快的产品开发周期,配合更低的片上闪存成本

16、与速度更快的MCU,正在推动更多的设计工程师以C和C+语言编写代码,而不是使用汇编代码。Atmel Studio 6使得工程师能够轻易编写、构建和调试其C/C+和汇编代码,还能够以无缝方式集成具备辅助代码编写功能的编辑器、用于快速创建新项目的向导工具、一个GNU C/C+编译器、一个功能强大的仿真器,以及适用于爱特梅尔所有Cortex-M系列和AVR处理器的编程器与在线调试器的前端可视化工具。目前用于AVR设计的模拟器通过提供准确的AVR MCU模型来加快应用开发。仿真器不仅为CPU和中断进行仿真,而且还可以为片上I/O模块仿真,无需实际的硬件即可进行全面的应用开发。基于上述Atmel Stu

17、dio 6各种优势,在本课题中使用此IDE进行代码编辑和程序编译。Atmel Studio 6的代码编辑继承了Visio Studio 2010的风格,所以编辑非常方便,比如自动补全功能,在目前一般单片机IDE是做不到这一点的!在上述的简介中也提到Atmel Studio 6自带编译器为GNU C/C+编译器,也就是上一届在AVR系列中的GCCAVR,这就意味着Linux GCC编译器直接移植到此IDE中,继承了了GCC优化程度高,运行效率高等优点。如图3-1为Atmel Studio 6的工程界面。图 3-1 Atmel studio 6工程界面3.3 下载器软件工具经过上两节的论述,现在已

18、经具备把写的C源程序编译成ATmega16单片机可以识别的机器语言,但是,还有一个问题,如何将在PC机上交叉编译好的hex(机器码,8进制)与单片机产生联系?也就是将程序下载到单片机上,让其运行,那么这就要用到下载器,上一章已经介绍了USBISP下载器的硬件,那么下载不仅要有硬件提供支持,还要有相应的软件工具。为了适合开发板的下载需求,在本课题中使用轩微编程器控制平台来对ATmega16来进行下载,如图3-2为轩微编程器控制平台界面。图 3-2 下载器工具系统设计前两章已经为系统提供了纯硬件支持和软件工具,接下来将对各个模块建立起与主控芯片ATmega16的联系,并对系统进行整体的软硬件设计。

19、由于ATmega16引脚在控制寄存器的控制下具有不同的功能,在这里对ATmega16的引脚做一个约定:在接下来作的图中,除4-1,模块与ATmega16连接的引脚只具备一个功能,而不具有其他功能,如有括号则说明使用括号中的功能,如图4-3,PD4只具有输入输出功能,而PB5则具有SPI总线的功能,因为括号中已经标明。这样就不会造成误解。4.1 硬件系统总体设计方案ATmega16作为控制中心,它负责直接或间接控制所有的外围模块;MP3播放器系统需要音频文件,那么ATmega16通过直接给CH375发送数据和命令,间接的从U盘中取得音频数据;获得音频数据后ATmega16再把数据传送到VS100

20、3b,当然,还得把获得的文件名信息传送给LCD12864液晶,这样周而复始,达到播放MP3的目的;本课题还提供四个按键对播放歌曲和音量进行控制,是单向的控制系统,已达到灵活控制系统,满足用户的需求。如图4-2为MP3系统的总体规划图。图 4-1 MP3系统总体规划4.2 ATmega16处理器介绍ATmega16是基于增强的AVR RISC结构的高性能、低功耗8 位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1 MIPS/MHz。ATmega16拥有16K字节的系统可编程Flash,512字节的EEPROM,1K字节的片内SRAM,并且内部

21、集成很多总线。如图4-2为ATmega16的引脚图。图 4-2 ATmega16引脚4.3 ATmega16与外部芯片的连接4.3.1 ATmega16与VS1003的连接表4-1简要列出了VS1003b与ATmega16直接联系的引脚功能说明,图4-3为芯片引脚连接图,连接具备某些原则,首先VS1003b的SI和SCLK必须和ATmega16的MOSI和SCK对应连接,因为在对VS1003b进行读写数据时会用到SPI总线,而其余四个控制读写的引脚可随意分配到ATmega16 32个普通的I/O,但是出于和后续的三个模块相互间不产生影响,所以将剩余的四个控制引脚按图4-3连接。表4-1 VS1

22、003b的主要引脚功能说明管脚管脚类型功能SI输入串行输入SCLK输入串行总线的时钟XCS输入片选输入,低电平有效XREST输入低电平有效,异步复位端DREQ输出数据总线,输入总线XDCS输入数据片选端/字节同步图4-3 ATmega16与VS1003硬件连接4.3.2 ATmega16与CH375b的连接表4-2简要列出了CH375b与ATmega16直接联系的引脚功能说明,图4-4为芯片引脚连接图;CH375b有两种读写方式,一种是串行读写,另一种是并行读写,串行读写灵活且比较节省引脚,而并行却相反,但是效率高;由于天翔电子的这款U盘模块没有提供串口读写数据的接口,所以本课题只能用并行读写

23、数据,也就是用更多的引脚去完成对应的功能,如果不使用中断的方式,那么理论上这13个引脚可以与ATmega16 32个普通的引脚任意连接,在本课题中,中断请求信号采用的是查询方式,所以也不需要接在ATmega16外中断引脚上。为了不与其它模块相互冲突,则采用图4-4的连接方式。表4-2 CH375b的主要引脚功能说明管脚管脚类型功能DB7-DB0双向三态8 位双向数据总线,内置弱上拉电阻RD输入读选通输入,低电平有效,内置弱上拉电阻WR输入写选通输入,低电平有效,内置弱上拉电阻CS输入片选控制输入,低电平有效,内置弱上拉电阻INT输出中断请求输出,低电平有效A0输入地址线输入,区分命令口与数据口

24、,内置弱上拉电阻,当A0=1 时可以写命令,当A0=0 时可以读写数据图 4-4 ATmega16与CH375b硬件连接4.3.3 ATmega16与LCD12864的连接表4-3简要列出了LCD12864与ATmega16直接联系的引脚功能说明,图4-5为芯片引脚连接图;ST7920是LCD12864的控制器,也可支持串行传输和并行传输,在本课题中仍然采用并行的方式读写数据,如图4-5,从图中可以看出,LCD12864的并行数据传输接口和CH375b的控制端口用冲突,但是不会收到影响,因为当LCD12864在读写数据时,控制CH375b的引脚电频可能会在改变,但却不会给CH375b传送数据,

25、而当CH375b在读写数据时LCD12864的控制端口处于不使能读写数据状态,所以两者不会造成紊乱,系统会很顺利的执行。表4-3的主要引脚功能说明管脚管脚类型功能DB7-DB0双向三态8 位双向数据总线RS输入地址线输入,区分命令口与数据口,当RS=1 时可以写命令,当RS=0 时可以读写数据RW输入读写,RW=1时读,RW=0时写E输入允许信号,相当于片选RST输入重新复位图 4-5 ATmega16与LCD12864的硬件连接4.3.4ATmega16与按键的连接图4-5为三个独立按键与ATmega16的连接,理论上这三个按键也是随意在Atmega16的任意一个普通引脚上连接的,但基于上述

26、几个模块的引脚分配,最终将按键确定为图4-5;此处有三个按键,KEY3为状态键,用来改变其余两个按键KEY1,KEY2的职能,如果KEY3为选择曲目状态,则剩下两个按键的功能分别为KEY1下一曲,KEY2上一曲,如果KEY3为调节音量状态,则剩下两个键的功能分别为KEY1音量调高,KEY2音量调低。这样设计的好处在于增加了按键的灵活性,如果后续再继续扩展功能的话比较方便,比如增加暂停停止功能,又或者增加快进快退,只需增加状态即可,而不必用更多的独立按键去控制,那样既浪费引脚,又使检测按键的次数增加,增大控制延时,降低系统效率。图 4-6 ATmega16与按键的硬件连接系统软件设计5.1 需求

27、分析需求分析的方法很多,常见的有功能分解法、结构化分析法、信息建模法、面向对象分析方法等,本系统从复杂程度和自身的特性综合考虑采用结构化分析法,用自顶向下逐层分解策略,描叙本系统满足功能需求的软件模型,通过结构化分析描述工具来理清本系统到底做什么。在画数据流图之前要先声明一个问题:对某个系统而言没有绝对的输入和输出;我们只是在抽象的层次去分析系统的输入和输出,围绕系统的具体功能去抽象;例如在使用VS1003解码芯片时,可以对它写入数据,播放音乐,即输出,也可以读取它某个寄存器的值,获取VS1003某时刻的状态,即输入;但在对VS1003功能进行抽象,它只具有播放功能,所以在这个抽象层次上认为V

28、S1003只具有输出。5.1.1 数据流图数据流图是结构化分析方法中用于表示系统逻辑模型的一种工具,它以直观的图形清晰地描述了系统数据的流通和处理过程,图中没有任何物理元素,主要强调的是数据流和处理过程,可以很方便的了解系统的真正需求。 (1)顶层数据流图。顶层数据流图是最为复杂也是最容易看清系统到底是做什么的;在本系统中,按键为系统提供按键信号,CH375芯片为系统提供文件数据,程序为系统提供系统初始值,在本系统中也可以用读取配置文件的策略去得到系统初始值,但为了使系统更简化,直接让程序提供初始值,所以键盘、程序、CH375芯片做系统的输入;ATmega16负责处理数据的计算和搬运,因此作为

29、系统的变换中心(也称控制中心);系统将控制命令和数据输出到VS1003解码芯片、LCD12864,以控制音频文件播放、控制音量以及显示音频文件名等,因此,VS1003、LCD12864一定作为系统的输出;那么CH375是不是也可以作为输出呢?为了能智能的读取U盘中的所有音频文件,而ATmega16又没有足够的内存去存放所有的音频路径名,所以在播放音乐之前先把所有音频文件的路径名写在固定文件中,以便后续操作,综合分析CH375芯片既作为系统输入又作为输出;程序中有许多控制数据是随一定条件下改变的,比如按键按下、音频路径名在文件中的偏移量等,所以将程序(内存)也作为逻辑输出,会使系统更清晰。通过上

30、述的简要分析后,如图5-1为顶层数据流图,需要说明的一点,在输出流中都无一例外的使用了数据命令字眼,原因是本系统面对的是裸芯片,没有任何操作系统的支持,除了CH375芯片有子程序库的支持,VS1003芯片和LCD12864都没有直接的接口去调用,所以对于底层的驱动本系统也是要考虑的,不仅要提供数据,而且要把相应控制命令加进去。图 5.1 顶层数据流图(2)0层数据流图顶层数据流图显然是非常复杂的,在MP3控制系统中几乎是不知道系统是如何进行数据处理进而得到想要的结果,显然要对顶层系统进行分解。首先,本系统是没有任何操作系统的,所以第一步就是要对VS1003解码芯片、CH375芯片、LCD128

31、64进行初始化操作,使这些芯片处在就绪状态等待主控芯片对它进行读写操作,每个芯片初始化成功后,提供一个正确信息,保证系统正常运行;紧接着,程序提供一个目录(程序默认提供根目录),开始对U盘中所有的音频文件的路径名保存在固定文件(ZCX.TXT),这样做有助于对所有音频文件进行统一管理,并且使变换歌曲操作会很方便,录入成功后提供录入文件内容的大小;然后,通过给定偏移量数据(默认为0),在固定文件(ZCX.TXT)中读取音频路径名,输出音频路径名;最后,通过给定的音频路径名进行MP3播放处理和液晶显示处理,将音频数据输出到VS1003解码芯片和LCD12864液晶;在MP3播放的同时,加上按键处理

32、,以便随时能够接收按键信号,进行相应的按键处理操作,改变现有的状态。通过上述分析后,如果5-2为0层数据流图,图中纵向在同一层次的表明没有先后顺序,在图中除了逻辑输出外,不加芯片代号的表明输入输出给程序(修改内存),这些数据基本都是控制信息,在下一节的数据字典中会有体现。图 5.2 0层数据流图(3)1层数据流图1层数据流图中系统处理基本明朗,每一个处理都基本可以明确各自的职能,只有在按键处理部分有些模糊,因为按键处理部分可以控制按键状态,可以变换歌曲的上下一曲,还可以调节音量,因此将上述的按键处理再细化,并且有对应的流程进行处理,使系统更清晰,如图5-3为1层数据流图。图 5.3 1层数据流

33、图5.1.2 数据字典数据流条目MP3系统数据 = VS1003初始化数据 + CH375初始化数据 + LCD12864初始化数据 + 根目录 + MP3控制数据MP3控制数据 = 初始偏移量数据 + 初始按键状态数据 + 新生成文件的文件名(ZCX.TXT)按键信号 = 状态信号 + 加信号 + 减信号VS1003数据命令 = VS1003音频数据 + VS1003控制命令LCD12864数据命令 = LCD12864数据 + LCD12864控制命令CH375数据命令 = CH375数据 + CH375控制命令音量数值 = 无符号高八位的音量数值 + 无符号低八位的音量数值音频文件名 =

34、 由最大30个字节组成的字符串正确信息 = true | false 偏移量数据 = 当前音频文件名在新生成文件中的偏移量 + 下一首音频文件名在新生成文件中的偏移量 + 上一首音频文件名在新生成文件中的偏移量按键状态数据 = 变换歌曲状态 + 调节音量状态 + 按键连续状态数据存储条目 文件名 :ZCX.TXT组成 :所有音频文件路径名的集合组织方式 :按查找到的音频文件名路径的顺序,依次写入加工条目加工名:MP3控制系统 编号:无 输入:MP3系统数据,按键信号 输出:VS1003数据命令,LCD12864数据命令,CH375数据命令,MP3控制数据加工名:VS1003管理 编号:1 输入

35、:VS1003初始化数据 加工逻辑:初始化VS1003解码芯片,使芯片处于就绪状态,随时准备工作。 输出:正确信息加工名:CH375管理 编号:2 输入:CH375初始化数据 加工逻辑:首先要做的是初始化CH375芯片,使芯片处于就绪状态,再者初始化CH375子程序库,使系统可以随时进行读写U盘。 输出:正确信息加工名:LCD12864管理 编号:3 输入:LCD12864初始化数据 加工逻辑:LCD12864是由ST7920芯片控制的,准确来说是初始化ST7920,使显示液晶能正常工作。 输出:正确信息加工名:保存U盘所有音频文件路径名 编号:4 输入:根目录 加工逻辑:根据根目录,逐层检查

36、文件,如果是音频文件,则将文件路径添加到ZCX.TXT文件中,如果不是则不做任何处理。 输出:新生成文件(ZCX.TXT)大小加工名:按给定条件读取新生成的文件 编号:5 输入:偏移量数据,新生成文件大小 加工逻辑:根据给定的偏移量数据先将文件偏移到指定位置,然后读出音频路径名 输出:音频文件名加工名:MP3播放 编号:6 输入:音频路径名 加工逻辑:根据音频路径名播放相应的歌曲 输出:VS1003音频数据加工名:按键处理 编号:7 输入:按键信号 加工逻辑:根据按键信号判断是什么信号,如果是状态信号则改变当前按键的状态,如果是加减信号,则根据当前的状态来判断是改变当前文件控制信息还是调节音量

37、大小。 输出:VS1003音量控制命令,按键状态值,偏移量数据加工名:液晶显示 编号:8 输入:音频路径名 加工逻辑:根据给出的音频路径名,先处理得到音频文件名,然后经过给LCD发指令和数据,显示出音频文件名 输出:LCD12864音频文件名数据加工名:按键状态判断 编号:7.1 输入:加减按键信号,按键状态数据加工逻辑:先判断是否存在加减信号,然后根据按键状态数据判断加减按键信号执行什么功能输出:变换歌曲状态,调节音量状态加工名:按键状态处理 编号:7.2 输入:按键状态数据,状态按键信号 加工逻辑:先判断是否存在状态按键信号,然后修改当前按键状态 输出:新的按键状态数据加工名:变换歌曲 编

38、号:7.3 输入:变换歌曲状态 加工逻辑:先判断按键是加信号还是减信号,然后修改当前、上一曲、下一曲音频文件名在新生成文件的偏移量数据。 输出:偏移量数据加工名:调节音量 编号:7.4 输入:变换音量状态 加工逻辑:先判断按键是加信号还是减信号,然后通过对VS1003解码芯片写入音量控制命令,达到变换音量的目的 输出:VS1003音量控制命令5.2 软件总体设计经过需求分析阶段的工作,建立了由数据流图、数据字典和一组算法描述所定义的系统逻辑模型,系统“做什么”已经清楚,下一步将进入软件总体设计阶段,总体设计阶段描述软件的总体结构。5.2.1 结构化总体设计结构化设计方法是一种把在需求分析中得到

39、的数据流图映射为软件结构图的基于数据流的设计方法,通过用数据流图描绘信息系统在系统中的加工和流动情况。结构化设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构图,他是在比模块更高一层的层次上讨论软件结构问题。按照数据流图的性质,数据流图分为两种基本类型,变换型和事务型。变换型数据流图基本呈线形形状,由输入、变换、输出三个部分组成,变换是系统的变换中心。变换输入端的数据流为系统的逻辑输入,输出端为逻辑输出,而系统输入端为数据流的物理输入,输出端为物理输出。而事务型则是当一个数据项到达处理模块时,将有多个动作之一,就是事务型,这种类型数据流图呈辐射状,及数据沿着输入同路到达

40、下一个处理,这个处理根据输入数据的类型分离成一束平行的数据流,然后选择执行若干个动作序列中的某一个来执行。按照上述描述,可以分析得出本课题的数据流图类型属于变换型和事务型两种类型的混合型,变换型是显而易见的,因为从始至终本系统都是为播放MP3而服务的,那么事务型从何体现?根据最终处理得到音频路径名的处理方式上,既要交给VS1003解码芯片,又要交给LCD12864显示液晶,所以此又为事务型。5.2.2 软件总体结构图的构建通过对顶层和0层数据流图的分析,MP3控制系统本质上明确音频路径名后直接进行播放,所以确定“按给定条件读取新生成的文件”作为系统变换中心,变换中心确定以后就相当于确定了主模块

41、的位置,这就是软件的顶层;第一层至少要有输入、输出、变换中心三种功能的模块,因此首先要构建音频路径名文件(将U盘中所有音频文件的路径名保存在指定文件中),所以音频文件名录入处理做为第一层的输入,但前提必须首先调用芯片管理模块,为主模块提供可进行读写的音频文件名文件和必要的控制数据;紧接着,需要一个变换中心模块,用刚刚得到的数据去变换得到要播放的音频路径名,并得到音频路径名,传给主模块,最后主模块再分别调用MP3播放、按键处理、液晶显示模块,在此过程中读音频路径名和处理音频路径名是一个循环的过程,播完一曲再继续下一曲;在MP3播放、按键处理。液晶显示这三个模块都分别要调用芯片管理模块,所以芯片管

42、理模块作为公共模块要将其放在最底层。如图5-6,为软件总体结构图,图中上层调用下层模块,并且VS1003管理模块,CH375管理模块,LCD12864管理模块作为基类模块,上层不少模块都在直接或间接的调用它们,所有为了不使图形太过杂乱,某些模块的输出并没有表示出来。5.6 软件总体结构图5.3 软件详细设计在上一节已经将系统划分为多个模块,并将它们按照一定的原则组装起来了,同时确定了每个模块的功能及模块与模块之间的外部结构,在本节中,将对系统各个模块进行详细的设计,用详细设计工具清晰地描述。本系统将按照自底向上的顺序一一剖析每个模块,设计出程序的“蓝图”。5.3.1 CH375管理模块CH37

43、5提供了U 盘文件级子程序库,单片机可以直接调用子程序读写U 盘中的文件数据,硬件上只需要在原单片机系统中增加一个CH375芯片,综合成本较低。CH375的U 盘文件级子程序库支持常用的FAT12、FAT16 和FAT32 文件系统,支持容量高达100GB 的U 盘。AVR 单片机的增强版子程序库,文件名是CH375HFB.A和libCH375HFD.A 以及CH375HFJ.R90,分别支持ICC、WinAVR-GCC、IAR 编译环境,在本课题中,使用的是libCH375HFD.A,利用WinAVR-GCC编译环境。1.CH375b子程序库相关配置虽然在CH375b子程序库中已经给用户提供

44、了许多现成的接口,但有些配置符号常量的值仍然需要重新定义,再者CH375b中引脚与ATmeag16引脚之间的联系是动态的,用户可以根据自己的喜好去连接CH375b,所以在子程序库的头文件CH375HFD.H定义了三个外部定义有子程序库去掉用的三个接口实现,分别是往CH375b写命令的接口、写数据接口以及从CH375读数据的接口。下面对需要修改的符号常量和需要实现的三个接口作详细阐述,因为它在程序中至关重要。1)符号常量的重定义(1)F_CPU 8000000在Atmel Studio 6中标准库中有一个延时库,这个延时库是根据ATmega16提供的晶振去计算延时的,延时非常准确,比我们仿真测试

45、要准确,所以,给定晶振的频率很重要,在这里我们提供的是8MHz,默认16MHz。(2)LIB_CFG_FILE_IO 2文件读写数据的复制方式,选择2为双DPTR复制”,针对特定硬件的数据复制方式,使用两个DPTR,每传输一个字节需要8.5个机器周期,速度较快,适用于ATMEL/PHILIPS/SST 等具有双DPTR 及DPS 的单片机,默认设置为1,1为内部复制,适用于速度慢的MCS51单片机。(3)LIB_CFG_INT_EN 0CH375的INT#引脚连接方式,0为查询方式,1为中断方式,这里建议使用方式0,因为此系统应用单一,不需要中断,默认也是查询,但这里最好显示给出,使读者一目了

46、然。(4)DISK_BASE_BUF_LEN 512表示磁盘缓存区的大小,缓存子程序库数据和文件数据的。由于ATmega16片内RAM只有1K,要定义的小一些,默认也是512,但是最好也显示给出,比较深刻理解子程序库存放数据的机制。(5)MAX_BYTE_IO 32表示以字节为单位单次读写文件时的最大长度,默认值为30,但是,VS1003的缓存为32,为了使读写数据的效率提高,将单次读写最大长度变为32。(6)CH375_INT_WIRE ( PINB & 0 x10 )表示PINB.4, CH375b的中断线INT#引脚,连接CH375的INT#引脚,用于查询中断状态,必须定义此符号常量,这

47、个引脚可以随意一个普通引脚,根据运算操作可得知。(7)NO_DEFAULT_CH375_F_QUERY1未调用CH375FileQuery程序故禁止以节约代码,这是为优化代码而定义的,因为在子程序库中有很多代码使用不到的,可以适量在预编译的时候把它优化掉。2)三个读写数据命令的实现 这三个函数非常重要,因为子程序库中提供的每个接口几乎都要调用它!而且在操作每一种芯片时这是必备的函数!(1)写命令函数:void xWriteCH375Cmd( unsigned char mCmd )首先先将A0置为1,因为A0为1表示写命令,接着将D0-D7输出口赋予mCmd,然后将控制输入输出的寄存器置高,表

48、示并口D0-D7为输出,最后分别将控制信号置位,CS置0,表示片选通,WR置0,表示写选通,RD置1,表示读关闭。写完命令后做必要的延时。(2)写数据函数:void xWriteCH375Data( unsigned char mData )与写命令函数基本类似,只是要将A0置为0,表示写数据,其它的都一样。(3)读数据函数:unsigned char xReadCH375Data( void )首先读来的数据要有内存保存,所以事先定义一个字节的数据,然后将控制输入输出的寄存器置低,表示并口D0-D7为输入,接着将控制信号分别置位,CS置0,表示片选通,WR置1表示关闭写端,RD置0,表示读选

49、通,A0置0,表示可以读数据。CH375子程序库接口和全局变量 (1)子程序接口CH375子程序为用户提供了很多方便的接口,这些接口在本系统中不会全部用到,会选择性的使用,如表5-1为本系统用用到的接口,更详细的接口列表可参阅CH375API介绍。表5-1 CH375子程序库接口子程序简称用途和概述CH375Init初始化CH375 芯片,建议用CH375LibInit 代替CH375DiskConnect查询U 盘是否连接,建议不要频繁查询CH375DiskReady查询U 盘是否准备就绪,通常在就绪后才能读写CH375FileOpen打开指定名称的文件或者目录、搜索枚举文件CH375Fil

50、eEnumer搜索枚举指定目录下的文件,返回文件名CH375FileCreate新建文件并打开,如果文件已存在则先删除再新建CH375ByteLocate以字节为单位移动当前文件指针,进入字节模式CH375ByteRead以字节为单位从当前文件读取数据,进入字节模式CH375ByteWrite以字节为单位向当前文件写入数据,进入字节模式CH375FileClose关闭当前文件这里要说明一下数据读写方式,有两种数据读写方式,一种是字节读写CH375ByteRead/CH375ByteWrite,另一种扇区读写CH375FileRead/Ch375FileWrite,本系统使用的是字节读写,因为A

51、Tmega16的内存只有1KB,而一般扇区最少也得512个字节,并且加上文件数据去也差不多512个字节,这两项就足以1KB了,内存是完全不够用,所以选择以字节的方式读取,只需600字节的内存就足够了,而且在效率上也不影响本系统。(2)全局变量CH375子程序库提供了很多标志U盘状态、文件状态等全局变量,在本系统中一般标志状态信息的全局变量是用不到的,用的最多的是“mCmdParam”、“CH375vFileSize”“mCmdParam”记录了当前打开文件的文件名、文件数据等信息,“CH375vFileSize”记录文件大小。CH375扩展接口CH375子程序库中已经基本实现了所有功能,但在主

52、模块中总希望它是以一个简单的语句描述一个操作,而不需要一大串的命令。出于此考虑,将CH375芯片和CH375子程序库的准备操作定义为一个接口CH375_Prepare(),如图5-7为CH375芯片和CH375子程序库准备操作流程图。图 5-7 CH375准备流程图5.3.2 VS1003管理模块SPI总线简介SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,

53、需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。1)SDO 主设备数据输出,从设备数据输入2)SDI 主设备数据输入,从设备数据输出3)SCLK 时钟信号,由主设备产生4)CS 从设备使能信号,由主设备控制其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。由于ATmega16

54、集成了SPI总线,而VS1003同样是用SPI总线去接收数据,所以本系统采用SIP总线对VS1003输出音频数据。VS1003基本接口所谓基本接口就是可以在VS1003解码芯片进行读写命令如表5-2为基本接口列表。表5-2 基本接口接口名称参数接口功能Port_Init()无初始化与VS1003相关的引脚VS1003B_SPI_High()无SPI控制寄存器设置为高速状态VS1003B_SPI_Low()无SPI控制寄存器设置为低速状态VS1003B_WriteByte()uchar发送数据,可以是数据,也可以是指令VS1003B_WriteData()uchar将解码的数据写入VS1003B

55、VS1003B_WriteCmd()3个uchar写命令,此命令用于控制VS1003B1)Port_Init()根据VS1003各引脚的功能,除了将DREQ的管脚类型初始化为输入外,其余的管脚类型都定义为输出。 2)VS1003B_SPI_High()和VS1003B_SPI_Low()这两个接口属于同类型接口,但却是操作VS1003解码芯片的必要条件,因为VS1003读写数据必须用到SPI总线。ATmega16的SPI总线由8位寄存器SPCR控制,SPCR初始值都为0,SPCR每一位的功能可参考ATmega16的资料,在本系统中,无论SPI高低速状态,第六位SPE(SPI使能为)置1,第四位

56、MSTR(主从选择)置1;在低速状态,将第一位和第零位(时钟速率)置1,而在高速状态将它们置0;还需设置的一个寄存器是SPSR(SPI状态寄存器),只需设置SPI2X,置1后可使SPI速度加倍,无论高低速都必须设置。 3)VS1003B_WriteByte()该接口是为VS1003写数据和命令的基础,1字节的数据或命令参数,首先,由寄存器SPDR接收数据,然后等待数据发送,数据发送结束的标志由状态寄存器SPSR的第七位(SPIF)置1决定,置1说明数据发送完毕! 4)VS1003B_WriteData() 该接口有1字节的数据参数,首先将XDCS置0,表明要对VS1003写数据操作,接着XCS

57、置0,确保VS1003选中,然后利用VS1003_WriteByte()写入相应的数据,最后XDCS和XCS全部置1。 5)VS1003B_WriteCmd()该接口有3个参数,分别为发送命令地址、数据高八位,数据低八位;首先将XDCS置1,表明是要对VS1003写命令操作,接着XCS置0,确保VS1003选中,然后利用VS1003B_WriteByte()依次发送写寄存器命令、写入地址、数据高八位、数据低八位,最后将XCS置1。VS1003扩展接口如表5-3为VS1003的扩展接口,这些接口都是基于基本接口的组合。表5-3 VS1003扩展接口接口名称参数接口功能VS1003B_Init()

58、无VS1003B初始化VS1003B_WriteData32()无VS1003B FIFO缓存有32位,写满数据Volume_Add()无调高音量Volume_Sub()无调低音量1)VS1003B_Init()如图5-8为VS1003初始化流程图。图5-8 VS1003初始化流程图2)VS1003B_WriteData32()往缓冲区写数据这个过程相对比较容易,就是调用32次VS1003_WriteData(),但是调用这个接口之前是有条件的,比如缓冲区中有数据,那么是不允许往VS1003中些数据的,所以在调用之前要不断的检测DREQ,检测到DREQ为1后,说明缓冲区为空,可以直接写入32个

59、字节的数据。Volume_Add()和Volume_Sub()这两个接口为同一类型接口,不同仅在与一个是对音量数值作减运算,一个是作加运算;先要不断检测DREQ,检测到DREQ为1,然后再调用VS1003B_WriteCmd(),将相应的音量控制命令和音量数值写进VS1003。5.3.3 LCD12864管理模块LCD12864基本接口如表5-4为LCD12864基本接口。表5-4 LCD12864基本接口接口名称参数接口功能LCD12864_readbyte()uchar读数据或指令LCD12864_sendbyte()uchar,uchar发送一个字节的数据或指令LCD12864_read

60、byte()参数为决定是否读取指令或数据,LCD12864sendbyte()第一个参数决定是否发送数据或指令,第二个参数为要发送的数据,如图5-8为这两个基本接口的流程图。图5-9 LCD12864_readbyte()和LCD12864_writebyte()流程图LCD12864扩展接口如表5-5为LCD12864扩展接口。表5-5 LCD12864扩展接口接口名称参数接口功能LCD12864_readBF()无判断LCD12864是否忙LCD12864_Init()无初始化LCD12864液晶LCD12864_sendstr()uchar*给LCD12864发送字符串(发送数据)LCD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论