毕业设计(论文)-基于Mega128的MP3播放系统.doc_第1页
毕业设计(论文)-基于Mega128的MP3播放系统.doc_第2页
毕业设计(论文)-基于Mega128的MP3播放系统.doc_第3页
毕业设计(论文)-基于Mega128的MP3播放系统.doc_第4页
毕业设计(论文)-基于Mega128的MP3播放系统.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

第一章 绪 论1.1 音频格式背景音频格式是指要在计算机内播放或是处理音频文件,是对声音文件进行数、模转换的过程。音频格式最大带宽是20khz,速率介于4050khz之间,采用线性脉冲编码调制pcm,每一量化步长都具有相等的长度。音频文件格式常见的特点有:要在计算机内播放或是处理音频文件,也就是要对声音文件进行数、模转换,这个过程同样由采样和量化构成,人耳所能听到的声音,最低的频率是从20hz起一直到最高频率20khz,20khz以上人耳是听不到的,因此音频文件格式的最大带宽是20khz,故而采样速率需要介于4050khz之间,而且对每个样本需要更多的量化比特数。音频数字化的标准是每个样本16位-96db的信噪比,采用线性脉冲编码调制pcm,每一量化步长都具有相等的长度。在音频文件的制作中,正是采用这一标准。现如今音频格式已经日新月异,到2008年音频格式包括:cd格式、wave(*.wav)、aiff、au、mp3、midi、wma、realaudio、vqf、oggvorbis、aac、ape。1.2 mp3文件格式 mp3格式诞生于八十年代的德国,所谓的mp3也就是指的是mpeg标准中的音频部分,也就是mpeg音频层。根据压缩质量和编码处理的不同分为3层,分别对应“*.mp1/“*.mp2”/“*.mp3”这3种声音文件。需要提醒大家注意的地方是:mpeg音频文件的压缩是一种有损压缩,mpeg3音频编码具有10:112:1的高压缩率,同时基本保持低音频部分不失真,但是牺牲了声音文件中12khz到16khz高音频这部分的质量来换取文件的尺寸,相同长度的音乐文件,用.mp3格式来储存,一般只有.wav文件的1/10,而音质要次于cd格式或wav格式的声音文件。由于其文件尺寸小,音质好;所以在它问世之初还没有什么别的音频格式可以与之匹敌,因而为.mp3格式的发展提供了良好的条件。直到现在,这种格式还是风靡一时,作为主流音频格式的地位难以被撼动。但是树大招风,mp3音乐的版权问题也一直是找不到办法解决,因为mp3没有版权保护技术,说白了也就是谁都可以用。 mp3格式压缩音乐的采样频率有很多种,可以用64kbps或更低的采样频率节省空间,也可以用320kbps的标准达到极高的音质。用装有fraunhofer iis mpeg lyaer3的 mp3编码器(现在效果最好的编码器)musicmatch jukebox 6.0在128kbps的频率下编码一首3分钟的歌曲,得到2.82mb的mp3文件。采用缺省的cbr(固定采样频率)技术可以以固定的频率采样一首歌曲,而vbr(可变采样频率)则可以在音乐“忙”的时候加大采样的频率获取更高的音质,不过产生的mp3文件可能在某些播放器上无法播放。把vbr的级别设定成为与前面的cbr文件的音质基本一样,生成的vbr mp3文件为2.9mb。 mp3是到2008年止使用用户最多的有损压缩数字音频格式了。它的全称是mpeg(mpeg:movingpictureexpertsgroup)audiolayer-3,刚出现时它的编码技术并不完善,它更像一个编码标准框架,留待人们去完善。早期的mp3编码采用的的是固定编码率的方式(cbr),看到的128kbps,就是代表它是以128kbps固定数据速率编码你可以提高这个编码率,最高可以到320kbps,音质会更好,自然,文件的体积会相应增大。 因为mp3的编码方式是开放的,可以在这个标准框架的基础上自己选择不同的声学原理进行压缩处理,所以,很快由xing公司推出可变编码率的压缩方式(vbr)。它的原理就是利用将一首歌的复杂部分用高bitrate编码,简单部分用低bitrate编码,通过这种方式,进一步取得质量和体积的统一。当然,早期的xing编码器的vbr算法很差,音质与cbr(固定码率)相去甚远。但是,这种算法指明了一种方向,其他开发者纷纷推出自己的vbr算法,使得效果一直在改进。目前公认比较好的首推lame,它完美地实现了vbr算法,而且它是是完全免费的软件,并且由爱好者组成的开发团队一直在不断的发展完善。 而在vbr的基础上,lame更加发展出abr算法。abr(averagebitrate)平均比特率,是vbr的一种插值参数。lame针对cbr不佳的文件体积比和vbr生成文件大小不定的特点独创了这种编码模式。abr在指定的文件大小内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量,可以做为vbr和cbr的一种折衷选择。 1.3 atmega 128单片机结构特点 高性能、低功耗的 avr 8 位微处理器 先进的 risc 结构 133 条指令 大多数可以在一个时钟周期内完成 32 x 8 通用工作寄存器 + 外设控制寄存器 全静态工作 工作于16 mhz 时性能高达16 mips 非易失性的程序和数据存储器 128k 字节的系统内可编程flash寿命: 10,000 次写/ 擦除周期 具有独立锁定位、可选择的启动代码区通过片内的启动程序实现系统内编程真正的读- 修改- 写操作 4k字节的eeprom寿命: 100,000 次写/ 擦除周期 4k 字节的内部sram 多达64k 字节的优化的外部存储器空间 可以对锁定位进行编程以实现软件加密 可以通过spi 实现系统内编程 外设特点 两个具有独立的预分频器和比较器功能的8 位定时器/ 计数器 两个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器 具有独立预分频器的实时时钟计数器 6路分辨率可编程(2 到16 位)的pwm 输出比较调制器 8路10 位adc 7 个差分通道 2 个具有可编程增益(1x, 10x, 或200x)的差分通道 面向字节的两线接口 两个可编程的串行usart 可工作于主机/ 从机模式的spi 串行接口 具有独立片内振荡器的可编程看门狗定时器 片内模拟比较器 特殊的处理器特点 上电复位以及可编程的掉电检测 片内经过标定的rc 振荡器 片内/ 片外中断源 6种睡眠模式: 空闲模式、adc 噪声抑制模式、省电模式、掉电模式、standby 模式以及扩展的standby 模式 可以通过软件进行选择的时钟频率 通过熔丝位可以选择atmega103 兼容模式 全局上拉禁止功能 i/o 和封装 53个可编程i/o 口线 64引脚tqfp 与 64 引脚 mlf 封装 工作电压 4.5 - 5.5v atmega128 速度等级 0 - 16 mhz atmega128第二章 方案与论证2.1 需求分析本 mp3 播放系统功能较多,针对这些功能,要选择合适的控制芯片及外部芯片来实现,以下介绍一下选用芯片: mp3 解码 本播放系统是利用 avr 单片机控制来实现歌曲播放功能的,但对单片机本身来说不能进行音频解码(速度与资源都不符合要求),所以只能利用外部解码芯片来实现歌曲播放功能。 mp3解码芯片常见的有 vs100x 系列和 sta01x 系列,vs 系列自带 dac输出功能,而且能解码的音频格式也比较多;而 sta系列需要外加 dac,使用起来多有不便,而且只能解码 mp3 一种格式的音乐文件。 经过对此比较,选用 vs1003 作为解码芯片,该芯片支持 mp3、wma、wav、midi、等格式的解码,自带 dac 输出;同时,还可以调节音量、高低音等,更重要的是它还具有 mic 功能,如需要,还可以实现录音功能。因此,选用此芯片作为解码芯片。 音效处理 虽然 vs1003自带了音效处理,但是其效果不是很理想,而且无法对外部音源进行音效处理,所以,本播放器采用一块外部数字音效处理芯片来进行音效处理。 cd3314 是一个具有四组立体声输入的双声道数字音质处理器,cd3314将音量、音调(bass and treble)、声道平衡(left/right),响度等处理及输入增益选择内建于单一芯片中。这些功能令 cd3314仅需要少数外部元件即可实现高效的音质处理功能。所用功能均由 i2c 总线控制。 fm收音 本播放器的收音功能只针对 fm 调频进行收音,采用飞利浦公司生产的 tea5767芯片来实现。tea5767 是一款低功耗、电调谐、调频立体声收音芯片,内部集成了中频选频网络和解调网络,可以做到完全免调,因此需要很少量的小体积外围元件。tea5767芯片可以应用在中国、欧洲、美国和日本不同的 fm 波段环境。该芯片通过 i2c 总线控制,就可以实现调频接收,频率覆盖范围从 76108mhz,而且是立体声接收,带信号强度指示。所以,根据以上优点,采用此芯片来完成 fm 收音功能。 人机交互 人机交互采用红外用空加 lcd 液晶显示方式实现。输入端采用遥控方式实现,不但能节省 i/o 口,而且使用起来更加方便,本播放器采用 pt2262/pt2272 红外遥控芯片。该芯片是一种cmos 工艺制造的低功耗低价位通用编解码电路,pt2262/pt2272 最多可有12 位(a0-a11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441 地址码,pt2262 最多可有6 位(d0-d5)数据端管脚,设定的地址码和数据码从17 脚串行输出,可用于无线遥控发射电路。编码芯片pt2262 发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片pt2272 接收到信号后,其地址码经过两次比较核对后,vt 脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。 液晶显示普通单色 lcd 来实现,这里考虑到音乐播放显示、同步歌词显示、音量显示等诸多功能,同时兼顾成本,故选用价格较为便宜的 nokia 5110 点阵lcd 来实现。该液晶屏本身不带有字库功能,所以,系统需要有外部字库文件,来实现曲目及歌词的汉字显示。 存储媒介 作为 mp3 播放器,肯定需要很大的存储器来存放歌曲,可以选择 flash芯片存储、sd卡、u盘等。如果选用 flash ,则整个系统要求较多的 i/o 口来读取,更重要的一点是,这样做的后果就是整个系统的容量就被固定了,扩容存在困难。而 u盘和 sd卡都是不错的选择,并且 u盘和 sd卡均容易购买到,并且价格较为低廉,所以,存储部分选用 u盘或 sd卡读取来实现。2.2 基本方案设计通过以上的需求分析,对本系统的所有的主要芯片有了初步的了解。本 mp3 播放系统已 atmega 128 为控制核心,通过 spi 通信协议控制 sd卡和 vs1003 通信,通过 i2c总线控制收音机模块,对于其他的芯片则是通过普通 i/o 口连接的。以下是硬件系统的连接框图,如图2.1.具体的芯片功能和详细的电路图将在下一章做以详细介绍。 atmega128i2cspitea5767收音模块nokia 5110液晶显示sd卡u盘vs1003音频解码红外遥控pt2262pt2272串口及空闲i/o 口图 2.1以上是本 mp3 播放系统的硬件框图,是该播放系统具有的基本功能,每个功能可以单独运行。实现以上这几个关键功能部分需要具备: fat文件体统的管理 歌曲名字及歌词的汉字显示 unicode 与 cbk 编码的转换。 spi 通信协议的具体设置 i2c总线结构的设置及通信 usart通信协议的建立与设置 。 以上功能将在下面的章节中予以陈述。第三章 硬件电路与软件设计3.1 硬件部分3.1.1 音频解码电路 基本电路图,如图3.1.1图3.1.1vs1003 特性:能解码 mpeg 1 和mpeg2 音频层 iii(cbr+vbr+abr);wma 4.0/4.1/7/8/9 5-384kbps 所有流文件;wav(pcm+imaad-pcm);产生midi/sp-midi 文件。对话筒输入或线路输入的音频信号进行imaadpcm编码支持 mp3 和wav 流高低音控制单时钟操作12.13mhz内部pll锁相环时钟倍频器低功耗内含高性能片上立体声数模转换器,两声道间无相位差内含能驱动30 欧负载的耳机驱动器模拟,数字,i/o 单独供电为用户代码和数据准备的5.5kb片上ram串行的控制,数据接口可被用作微处理器的从机特殊应用的spi flash引导供调试用途的uart接口新功能可以通过软件和4 gpio 添加vs1003 概述:vs1003 是一个单片mp3/wma/midi音频解码器和adpcm编码器。它包含一个高性能,自主产权的低功耗dsp 处理器核vs_dsp4,工作数据存储器,为用户应用提供5kb 的指令ram 和0.5kb 的数据ram。串行的控制和数据接口,4 个常规用途的i/o 口,一个uart,也有一个高品质可变采样率的adc和立体声dac,还有一个耳机放大器和地线缓冲器。vs1003 通过一个串行接口来接收输入的比特流,它可以作为一个系统的从机。输入的比特流被解码,然后通过一个数字音量控制器到达一个18 位过采样多位- dac。通过串行总线控制解码器。除了基本的解码,在用户ram 中它还可以做其他特殊应用,例如dsp 音效处理。3.1.2 u盘模块电路 基本电路图,如图3.1.2图3.1.2ch375 是一个usb总线的通用接口芯片,支持usb-host主机方式和usb-device/slave 设备方式。在本地端,ch375 具有8 位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/dsp/mcu/mpu等控制器的系统总线上。在usb 主机方式下,ch375还提供了串行通讯方式,通过串行输入、串行输出和中断输出与单片机/dsp/mcu/mpu 等相连接。ch375 的usb 设备方式与ch372 芯片完全兼容,ch375 包含了ch372 的全部功能。ch375 的usb主机方式支持常用的usb全速设备,外部单片机可以通过ch375按照相应的usb 协议与usb 设备通讯。ch375 还内置了处理mass-storage 海量存储设备的专用通讯协议的固件外部单片机可以直接以扇区为基本单位读写常用的usb 存储设备(包括usb 硬盘/usb 闪存盘/u 盘)。特点 低速和全速usb-host 主机接口,兼容usb v2.0,外围元器件只需要晶体和电容。 低速和全速usb 设备接口,完全兼容ch372 芯片,支持动态切换主机与设备方式。 主机端点输入和输出缓冲区各64 字节,支持12mbps 全速usb 设备和1.5mbps 低速设备。 支持usb 设备的控制传输、批量传输、中断传输。 自动检测usb 设备的连接和断开,提供设备连接和断开的事件通知。 内置控制传输的协议处理器,简化常用的控制传输。 内置固件处理海量存储设备的专用通讯协议,支持bulk-only传输协议和scsi、ufi、rbc 或等效命令集的usb 存储设备(包括usb 硬盘/usb 闪存盘/u 盘/usb 读卡器)。 通过u 盘文件级子程序库实现单片机读写usb 存储设备中的文件。 并行接口包含8 位数据总线,4 线控制:读选通、写选通、片选输入、中断输出。 串行接口包含串行输入、串行输出、中断输出,支持通讯波特率动态调整。 支持5v 电源电压和3.3v 电源电压,支持低功耗模式。 采用sop-28无铅封装,兼容rohs,提供sop28到dip28 的转换板,引脚基本兼容ch374芯片。3.1.3 sd卡存储接口电路基本电路图,如图3.1.3图3.1.3 sd卡的体系结构将在这里叙述。它定义了数据区域的逻辑结构。对于如分割数据区域的区别,第一分区有主启动记录和分区表。sd卡文件系统使用fat文件系统(iso/iec 9293)并支持fat12和fat16文件系统格式。如表3.1 和表 3.2文件系统层psnlsn分区部分主启动记录和分区表0到38用户部分系统部分分区启动部分390文件分配表40到631到24根目录64到9525到56用户部分用户区96到12979157到129752表3.1表 3.20到445 主启动记录此间内容不被叙述。446到461 分区表(第一部分)这个部分叙述了第一分区在体系中的信息。这个分区意味着使用者可以没有相互的证明使用普通区域。如表3.3462到477 分区表(第二部分)如果体系只有一个分区,此间内容为0。478到493 分区表(第三部分)如果体系只有一个分区,此间内容为0。494到509 分区表(第四部分)如果体系只有一个分区,此间内容为0。510到511 信号字(signature word)此处记录了0x55(bp 510) 和 0xaa。分区表bp长度文件名内容01启动指示0x00或0x8011启始磁头数值22启始柱面和扇区数值41系统id号0x01 或 0x04 或 0x0651终止磁头数值62终止柱面和扇区数值84relative sector数值124总扇区数值表3.3bp0 启动指示如果以sd卡作为启动(盘),记录0x80,否则记录0x00。bp1 启始磁头此处叙述分区的起始磁头。bp2和3 启始柱面和扇区此处将叙述分区的启始柱面和扇区。6个位 (在bp2中0到5位) ,将作为启始扇区。10个位(在 bp 2 中的6和7位,在bp3中的0到7的)将作为启始柱面。bp4 系统id号此处叙述文件系统类型。 如果分区大小是少于32680个扇区,它将被记录0x01。如果少于65536个扇区,它将被记录0x04。否则,它将被记录0x06。bp5 终止磁头此处记录终止磁头。bp6和7 终止柱面和扇区此处记录终止柱面和扇区。6个位(在bp6中的0到位5位)作为结束扇区。10个位(在bp6中的位6和7位,在bp7中的0到7位)作为结束柱面。bp8到11 relative sector此处叙述这此分区的起始扇区之前存在的数目。bp12到15总扇区此处记录总扇区数量。申请分配表 (fat)fat将包含一个格式id号和一些项目,每个使用者区域的指示簇。这些项目连续的将是有限的出发由于 2 而且项目数目将和相等对应的簇的数目。每个项目在 fat 中将指示对应的簇状态。 fat 项目将用来识别被分派到每个文件的簇组。3.1.4 红外遥控接收电路 基本接收电路,如图3.1.4,基本发射电路,如图3.1.5图3.1.4图3.1.5pt2262/pt2272 是台湾普城公司生产的一种cmos 工艺制造的低功耗低价位通用编解码电路,pt2262/pt2272 最多可有12 位(a0-a11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441 地址码,pt2262 最多可有6 位(d0-d5)数据端管脚,设定的地址码和数据码从17 脚串行输出,可用于无线遥控发射电路。编码芯片 pt2262 发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片pt2272 接收到信号后,其地址码经过两次比较核对后,vt 脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。当发射机没有按键按下时,pt2262 不接通电源,其17 脚为低电平,所以315mhz 的高频发射电路不工作,当有按键按下时,pt2262 得电工作,其第17 脚输出经调制的串行数据信号,当17 脚为高电平期间315mhz 的高频发射电路起振并发射等幅高频信号,当17 脚为低平期间315mhz 的高频发射电路停止振荡,所以高频发射电路完全收控于pt2262 的17 脚输出的数字信号,从而对高频电路完成幅度键控(ask 调制)相当于调制度为100的调幅。pt2262/pt2272 特点 cmos 工艺制造,低功耗 外部元器件少 rc 振荡电阻 工作电压范围宽:2.6-15v 数据最多可达6 位 地址码最多可达531441 种3.1.5 lcd 液晶显示接口电路 基本电路如图:图3.1.6图3.1.6lph7366 是 nokia 公司生产的可用于 5110、6150、6100等系列移动电话的液晶显示模块,国内厂家也生产有类似的兼容产品。该产品除应用于移动电话外,也可以广泛应用于各类便携式设备的现实系统。与其它类产品相比,该模块具有以下特点: 8448的点阵 lcd ,可显示 4 行汉字 采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线只有9条,支持多种串行通信协议(如 avr 单片机的 spi、mcs51的串口模式0等),传输速率可高达 4mbps,可全速写入显示数据,无等待时间。 可通过导电胶连接模块与印制板,而不用连接电缆用模块上的金属钩可将模块固定到印制板上面,因而非常便于安装和更换。 lcd 控制器/驱动芯片及绑定到 lcd 晶片上,模块的体积很小。 采用低电压供电,正常显示时的工作电流在 200ua 以下,且具有掉电模式。3.1.6 fm 收音模块电路 基本电路如图:图3.1.7图3.1.7tea5767 特点: 高灵敏度-内置集成低噪声输入运放 fm混频转换,在不同频段之间可以自由转换 rf agc自动增益控制 lc 调谐振荡器和低成本固定芯片电感器 无需外部鉴相器,内部集成了 fm 解调器 晶体参考频率振荡器,振荡频率可操作在 32.768khz晶体和 6.5mhz晶体频率 pll合成调谐系统 iic 总线模式和3线总线模式可以选择,由芯片 busmode 引脚控制 7位 if 计数器有总线输出 软静音功能tea5767内置了主频高达75mhz的数字信号处理器,实现384kbps/48khz的md级高品质mp3音乐文件回放,加上拥有一般mp3播放器难以企及的高保真回放线路(信噪比高达95db,thd 总谐波失真率0。05%同时非常省电。 tea5767中的uesr模式给人的印象最为深刻,感觉有点像艾丽和中的3d效果,能很好并且充 分表现出各个音色的质地,让人听起来十分的舒服,音质个人主观意想占比较大的份额,有的人喜欢低音偏重些,有的人喜欢高音明朗些,所以对于音质的探讨还是自己亲身体验一下是最好的选择,不过话说回来tea5767给人的印象十分出色,很对的起他自身的价值! 高清晰度fm广播:支持移动存储,多种音乐格式mp3,wma;录音功能非常出色,可以直接 对输入音频进行mp3编码,也就是说即使你没有pc机 也可以从cd机/卡带机等音频设备上获 得动听的音乐,还支持fm转录功能:ab复读;更具个性化设计是可自定义设计开机画面 。3.1.7 万年历时钟电路 基本电路如图:图3.1.8图3.1.8ds1302 是dallas 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态ram 通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过am/pm 指示决定采用24 或12 小时格式ds1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 res 复位2 i/o 数据线3 sclk串行时钟时钟/ram 的读/写数据以一个字节或多达31 个字节的字符组方式通信ds1302 工作时功耗很低保持数据和时钟信息时功率小于1mwds1302 是由ds1202 改进而来增加了以下的特性双电源管脚用于主电源和备份电源供应vcc1 为可编程涓流充电电源附加七个字节存储器它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等产品领域下。ds1302 时钟芯片的特点: 实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力 31 8 位暂存数据存储ram 串行i/o 口方式使得管脚数量最少 宽范围工作电压2.0 5.5v 工作电流2.0v 时,小于300na 读/写时钟或ram 数据时有两种传送方式单字节传送和多字节传送字符组方式 8 脚dip 封装或可选的8 脚soic 封装根据表面装配 简单3 线接口 与ttl 兼容vcc=5v 可选工业级温度范围-40 +85 与ds1202 兼容 在ds1202 基础上增加的特性-对vcc1 有可选的涓流充电能力-双电源管用于主电源和备份电源供应-备份电源管脚可由电池或大容量电容输入-附加的7 字节暂存存储器3.2 软件部分mp3播放系统的硬件已经设计完成,但是没有软件的支持,硬件就不能正常工作,形同虚设。软件是硬件的灵魂,控制着整个硬件系统的运行。整个mp3的软件涉及的方面比较多,是一个比较复杂的系统,对软件的编写采用模块的设计思想,将整个软件系统逐步划分为子系统,实现预期功能。对整个系统来说,按其与硬件是否直接相关,可以把软件划分为两个大部分: 与硬件相关的底层驱动软件子系统; 与硬件无关的应用软件子系统。当进行模块化程序设计时,首先要明确模块的功能作用,将其划分为一个个独立的功能模块,封装为函数,供给其他模块调用。底层驱动主要实现一些基本的底层功能,如硬件初始化、与硬件密切相关的时序函数等。应用层实现整个软件系统的应用功能函数。3.2.1 系统软件框图 本系统的主控制程序通过调用各个模块的相关函数,实现整个系统的各个功能。系统开机之后,第一步进行的是对系统各个硬件模块的初始化;第二步是对 fat 文件系统的初始化,智力要判断是否初始化成功,如果不成功,则系统会一直检索 sd卡,直到检测到能被系统识别的卡和文件系统为止;第三步是查找系统文件,本系统启动,需要系统文件 font12.fon 和 unitogb.bin 两个系统文件,第一个是系统的字库文件,第二个是 unicode 码转 gbk 码的转换码表。系统只有在找到这两个文件之后才能启动。在查找系统文件成功之后,系统会加载启动界面,完成系统启动。启动之后,系统等待用户输入,在用户按下遥控之后,系统就根据用户的选择执行相应的功能。在功能完成之后又会加载系统主界面,回到启动使得界面,再次等待用户输入。如图:图3.2.1 图3.2.1 3.2.2 音频解码程序设计 vs1003 驱动框图如图:图3.2.2。在开始播放音乐之前,先要对 vs1003 进行一系列的初始化,完成对vs1003 的基本设置,然后才能正确的播放音频文件。在系统启动时会对 vs1003初始化。第一步初始化 mcu 与 vs1003相连接的 i/o 口,接着对 vs1003进行硬件复位和软件复位,之后初始化 vs1003 的内部寄存器,之后就可以向 vs1003写数据,进行音乐播放的功能了。vs1003 i/o 口初始化硬复位vs1003软复位 vs1003初始化vs1003 内部寄存器vs1003写命令vs1003写数据vs1003读数据外部程序调用图3.2.2vs1003解码芯片是通过 spi 实现数据通信的,与 sd卡 公用一个 spi 接口,通过不同的片选信号,分时复用。vs1003 通过 7根线与单片机进行通信,即 xrst、xdcs、xcs、dreq、sck、mosi、miso。在默认情况下,数据将在 sclk的上升沿有效(被读入vs1003),一次需要在 sclk 的下降沿更新数据,并且字节发送以 msb 在先。第一步,i/o 口初始化,这部分初始化 mcu 与 vs1003 相连接的 i/o 口,并初始化 avr 的spi 的相关寄存器,实现代码如下:void mp3_port_init() spi_init(); mp3_ddr|=mp3_data_cs|mp3_cmd_cs|mp3_data_rest; mp3_ddr&=mp3_data_req; mp3_port|= mp3_data_cs|mp3_cmd_cs|mp3_data_rest| mp3_data_req;void spi_init() ddrb=0xbf; spcr=0x53; spsr=0x01;第二步,对 vs1003 进行复位和寄存器的设置,这几个步骤在系统启动的时候会执行一遍,在音乐开始播放的时候,也要执行这个步骤,来清除上次的设置,并初始化相关寄存器。#define mp3reset()mp3_port&=mp3_data_rest;delay_ms(10);mp3_port=0xff;硬复位很简单,只要把 vs1003 的 rst 引脚拉低一定时间(1.35ms,12.288mhz),然后再置高电平就实现了硬复位。这里采用宏定义的形式来实现: void vs1003_reset() while(1) if(pinb&mp3_data_req) vs1003_data_write(0x00); break; resetdecodetime(); vs1003_cmd_write(0x00,0x0804)/delay_us(15000; 软复位先等待 vs1003空闲,然后设置 sci_mode(0x00)寄存器的 bit2 为 1,实现 vs1003的软复位。这里在软复位之前,还对 vs1003的解码时间进行了清空操作,以确保上次解码的时间被清除掉。 void vs1003_init() uchar t; if(vs1003epm015) for(t=0;t5;t+) vs1003epmt=vs1003ramt;vs1003_cmd_write(0x00,0x0800);set1003();vs1003_cmd_write(0x03,0x6000);在硬复位和软复位之后,就开始对 vs1003 的内部寄存器进行设置:包括对模式(0x00)、音量(0x0b)、音调(0x03)、时钟(0x03)的设置。此函数中的 vs1003 epm和 vs1003 ram数组是保存音效的寄存器数组。前者保存在 eeprom,使得用户设置的音效再掉电后可以保存;后者保存在 sram 中,使得用户可以反复操作,两者之间是相互映射的。音效和音量的设置通过函数 set1003 来实现。以上介绍了 vs1003 的初始化过程,在完成以上的操作后,就可以向 vs1003 中直接放入音频数据了,然后 vs1003 就会开始音频解码,并且播放音乐了。3.2.3 存储部分驱动程序设计上电延时等待上电完成发送74个脉冲发送复位命令cmd 0发送激活命令 cmd 1关crc,设置扇区字节数结束图3.2.3sd 卡存储了系统文件非常重要的信息,如果 sd 卡驱动出现问题,将直接导致系统崩溃(无法开机),所以,sd 卡的驱动对系统来说是至关重要的,只要 sd 卡成功地初始化了,后面的处理就相对简单,所以关键在于初始化。sd 卡有两个可选的通信协议:sd 模式和 spi 模式。 sd 模式是 sd 卡标准的读/写方式,选择 spi 模式读取 sd 卡。因为 sd 卡在上电初期自动进入 sd 总线模式,在此模式下向 sd 卡发送复位命令 cmd 0。如果 sd 卡在接收复位命令过程中 cs 低电平有效,则进入 spi 模式,否则工作在 sd 总线模式。如图:图3.2.3在 sd 卡初始化时注意 spi 时钟频率一定不要超过 400 khz,在初始化之后则可以提高到25mhz。具体的 sd 卡初始化函数如下:void sd_init(void) uchar retry,temp; uchar i; mmc_port&=mmc_cs_pin;spi_setspeed(0); delay_us(250); for(i=0;i0x0f;i+) write_byte_spi(0xff); retry = 0;do temp=sd_write_command(0,0);retry+;if(retry =100) return 0xff;while(temp!=1);retry = 0;do temp=sd_write_command(1,0);retry+;if(retry =100);while(temp!=0);retry = 0;sd_write_command(59,0);sd_write_command(16,512);mmc_port|=mmc_cs_pin;spi_setspeed(1);return(0);3.2.4 红外遥控接收程序设计红外接收模块初始化等待红外信号(init0)记录红外信号数据解码数据图3.2.4利用串口将单片机从一体化红外接收器接收到的红外遥控键值发送到计算机上,通过计算机的串口助手观察接收到的数据。编程过程中,我们利用单片机的外部中断0口进行检测,一旦检测到有红外遥控信号出现,则程序进入外部中断处理程序,在处理数据过程中关闭外部中断,直到接收完数据,再将外部中断打开。红外遥控的数据接收主要在外部中断函数中进行处理:处理过程为:当有遥控键值发送的时候,红外一体化接收器的脉冲信号输出脚发生一个下降沿的电平变化,外部中断采用下降沿出发的方式接收到由外部中断事件发生,程序进入外部中断处理函数,首先关闭外部中断,然后根据一体化接收器脉冲信号输出引脚的高低电平变化时间判断红外遥控发送的数据,共有4个字节的数据,处理完这4个字节数据后,利用单片机的串口将数据发送到计算机。如图:图3.2.4具体程序代码如下:void int_init(void) mcucr |= (1 isc01); /选择外部中断0,下降沿触发中断gicr |= (1 int0); /使能外部中断0gifr |= (1 intf0); /清除int0中断标志位 isr(int0_vect) unsigned char i,j,k = 0,addr4 = 0;gicr = 0x00; /禁止外部中? 关闭外部中断,开始接受数据for(i = 0;i 14;i+) delayus(400);if(pind & (1 pd2) /9ms内有高电平,则判断为干扰,退出处理程序 gicr |= (1 int0); /使能外部中断4return;while(!(pind & (1 pd2); /等待9ms低电平过去for(i = 0;i 4;i+) for(j = 0;j 8;j+) while(pind & (1 pd2); /等待4.5ms高电平过去while(!(pind & (1 pd2); /等待变高电平while(pind & (1 = 30) /高电平时间过长,则退出处理程序 gicr |= (1 1; /接受一位数据if(k = 8) addri = addri | 0x80; /高电平时间大于0.56,则为数据1 k = 0; /计时清零 3.2.5 lcd 显示接口驱动程序设计 如图:图3.2.5。是 lcd 显示程序的本分框图。 lcd 模块初始化字符显示函数汉字显示函数图片显示函数清屏函数外部程序调用图3.2.5lcd 显示是本系统人机交互界面的核心部分,本系统绝大部分信息都是通过 lcd 来实现与用户交互的,而且在系统调试的时候,lcd 显示的实现也能该系统调试带来很大的方便。在系统开机之后,将会 lcd 模块初始化,在初始化之后,lcd 模块的各种高层应用函数就都可以调用了。通过外部程序调用这些高层应用函数,就输出所要显示的各种信息了。该 lcd 通过5根线与单片机通信,控制简单。第一步实现的就是对 lcd 的初始化,否则其他高层应用函数都无法实现。lcd 初始化代码如下:void lcd_init() ddrc|=0xfc; lcd_sda=0;lcd_sck=0; lcd_rs=0;lcd_rst=1;lcd_cs=1; lcd_led=0;lcd_rst=0; delay_ms(10); wirte_comd(0xae); wirte_comd(0xa1); wirte_comd(0xc8); wirte_comd(0xa2); wirte_comd(0x2f); wirte_comd(0x22); wirte_comd(0x81); wirte_comd(0x18); delay_ms(10); cleardisplay(4); 从上面的程序可以看出:第一步,现对 lcd 与单片机相连的接口初始化,把这些接口全部设置成输出;第二步,对 lcd 进行硬件复位(拉低 rst 线),在硬复位之后,开始对 lcd 模块内部的寄存器进行操作,完成 lcd 的一系列初始化过程;第三步,开启 lcd 的显示,然后执行清屏操作,这样就完成了 lcd 的初始化。在完成 lcd 的初始化之后,关于 lcd的各种高层应用函数就都可以操作了。关于字符显示函数,函数先设置字符显示地址,然后写入点阵数据,从而实现字符的显示。asc2 为 ascii 字符的点阵数据存储数组。该数组被定义在 font.h 中。参数 chr 要减去 32 ,因为 32 是第一个 ascii 字符“空格”的 ascii 编码,对输入的字符必须减去这个偏移量,得到在asc2 数组中的绝对地址,从而去得所需要的点阵数据。在取得点阵数据之后,就把这些数据按顺序写入 lcd 的 gram 中,从而实现字符的显示。 字符显示函数的实现代码: void show_char(unsigned char x,unsigned char y,unsigned char chr) unsigned char t; set_page(2*x); set_column(y); for(t=0;t=76000&ch

温馨提示

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

评论

0/150

提交评论