基于单片机的MP3设计汇编(完整版)资料_第1页
基于单片机的MP3设计汇编(完整版)资料_第2页
基于单片机的MP3设计汇编(完整版)资料_第3页
基于单片机的MP3设计汇编(完整版)资料_第4页
基于单片机的MP3设计汇编(完整版)资料_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机的MP3设计汇编(完整版)资料(可以直接使用,可编辑优秀版资料,欢迎下载)

基于单片机的MP3设计汇编(完整版)资料(可以直接使用,可编辑优秀版资料,欢迎下载)摘要MP3是MPEG1Layer-3音频文件的简称。MPEG音频是普遍应用的音频压缩标准,其中层Ⅲ算法最为复杂,但是压缩比最大,效果也最好,在低码率条件下基本上能达到CD的音质效果。但略感遗憾的是除了能够选择歌曲和显示歌名外,绝大部分MP3播放器没有如随意弹奏乐曲、乐曲节奏跳动等功能。然而随着人们生活水平不断提高,单片机控制无疑是人们追求目标的手段之一。要为现代人工作、生活提供更好、更方便的服务就需要从单片机方面着手,一切向着数字化控制、智能化控制方向发展。本设计是采用单片机为核心设计的MP3音乐播放器。硬件电路包括中心控制模块、按键模块、显示模块、扬声器播放模块以及彩灯伴奏模块。中心控制模块是以芯片AT89C52为主,按键模块由8个按键组成,其中1个键用来实现播放器自动播放及自行弹奏两模式之间的转换,其余7个键用作音符的输入或者音乐的播放选择。显示模块采用LCD1602对当前播放的歌曲名称进行显示。彩灯伴奏模块是LED通过中心控制模块的控制伴随着音乐节奏闪亮。扬声器播放模块则是由三极管和无源蜂鸣器组成,通过中心控制模块的控制对当前音乐进行的播放。软件程序运用C语言编程实现。关键字:MP3音乐播放器;多功能;单片机;AT89C52ABSTRACTMP3isshortforMPEG1Layer-3files.

MPEGaudioiswidelyusedaudiocompressionstandard,includingthemostcomplexlayerIIIalgorithmbutthecompressionratio,theeffectisthebest.InlowbitrateconditionsbasicallyCDqualitysoundeffectscanbeachieved.Butsomewhatregretisinadditiontoselectsongsanddisplaythesongname,thevastmajorityofplayersnotasfreetoplaymusic,therhythmofmusicbeats,andotherfunctions.

However,

withthe

continuousimprovementofpeople'slivingstandards,

SCMisoneofthe

meansforpeopleto

pursuegoals.

TomodernworkandlifetoprovidebetterandmoreconvenientserviceneedtoproceedfromtheSCM,alltowarddigitalcontrol,intelligentcontroldirection.Thisdesignistheuseofsingle-chipmicrocomputerasthecoredesignoftheMP3musicplayer.Thehardwarecircuitincludesacentralcontrolmodule,keyboardmodule,displaymodule,loudspeakermoduleandlightsaccompanimentmodule.CentralcontrolmoduleisAT89C52chipbased,thekeymoduleiscomposedofa8keys,akeywhichisusedtoachieveplaybackandselfplayingtheconversionbetweenthetwomodes,theremainingsevenkeyusedasnotesinputormusicplaybackoptions.DisplaymoduleusingLCD1602todisplaythenameofthecurrentlyplayingsong.LanternaccompanimentmoduleisLEDunderthecontrolofthecentralcontrolmodulewiththerhythmofthemusicofshining.Speakerplaybackmoduleiscomposedofatriodeandpassivebuzzer,broadcastthroughthecentralcontrolmoduleofthecontrolofthemusic.ThesoftwareprogramusingClanguageprogrammingKeywords:MP3musicplayer;multifunction;singlechipmicrocomputer;AT89C52目录第一章绪论…………………11.1MP3播放器研究的背景……………………11.2国内外状况…………………21.3课题研究内容………………2第二章MP3播放器的编解码过程…………32.1MP3的工作原理……………32.2MP3的编码过程……………5……………5……………………82.3MP3播放器解码过程………102.4本章小结……………………11第三章硬件设计………………123.1硬件电路总体框图………123.2主芯片的选择与概述……………………123.3硬件电路设计模块………16………16……………17……………………18……………19……………………203.4本章小结…………………20第四章软件设计……………224.1单片机发声原理………224.2设计的相关音乐说明…………………224.3播放模式切换原理……………………224.4软件程序设计…………23……………………23……………24…………26………………26………294.5本章小结…………………30第五章总结与展望……………32参考文献…………33致谢……………34附录A………………35附录B………………36第一章绪论1.1研究背景及其意义随着电子信息技术的发展,社会生产力的快速提高,人们的生产方式和生活方式发生了日新月异的变化。生活水平的提高,人们对于音乐接触的更多了,这就触发了人们对音乐的喜爱,对音质的追求,对音乐播放器的品质、功能、品种等的要求越来越多,表现在对控制系统性能、可靠性等要求越来越高。然而品质的提高,功能的更新,可靠性的增强和品种的变化无一不与产品核心控制部分水平的提高密不可分。数字音频已经全面取代了模拟音频,在随身听世界里由CD、MD、MP3形成三分天下的局面。而MP3相比于CD、MD等随身听,其最大的市场优势在于独特的产品特性。它是一种采用集成芯片制成的数码产品,在产品的设计上有很大的灵活性和随意性,其产品可大可小,可设计成任意的形状,迎合了不同年龄段的审美要求。各种型号时尚个性的MP3播放器产品,创造着消费潮流,这是其最大的卖点。特别值得一提的是自从Diamond(帝盟)公司推出第一台MP3Player后,这个比烟盒还小的精灵在过去短短两三年内改变了整个音乐市场、便携式数码音乐产品,改变了我们的生活。MP3播放器集电脑的新潮、网络的便捷、音乐的灵秀于一身,在过去以惊人的速度传遍世界的每个角落,曾成为今天IT界和音乐界最热门的话题之一。MP3播放器之所以能在过去短短几年内迅速席卷全球,成为听歌者的热爱,成为便携式音频设备的主流,实在是历史发展的必然:一方面,MP3播放器是电脑、网络、音乐三者结合的产物。电脑是科技的骄傲,网络是时代的象征、音乐则是人类的灵魂,MP3播放器与电脑、网络、音乐融为一体相伴相生,本身就有强大的生命力,具有革命性的意义。另一方面,作为便携式音频设备,人们要求有更轻、更小、更便捷的产品出现,这是现代快节奏快生活的时代要求。MP3播放器虽然曾在市场上的销售呈上升趋势,但是它的功能还需要进一步完善并加以提高,使其能够给消费者提供更多的,更完善的功能服务。接着MP3播放器的发展方向便是提高便携性、实现多功能化和对应多种方式。其中,所谓对应多种方式是指对应多种音频编码方式和知识产权管理技术。所以把MP3播放器产品可以分为两大发展方向,一种是专用便携式MP3播放器,另一种是多功能MP3播放器。专用MP3播放器发展方向是追求小、轻便和薄型化。这种便携式播放器,小到邮票大小,最大的也超不过信用卡的外形尺寸。多功能便携式播放器,它不仅具备音频功能,而且嵌入信息处理功能。比如,融合MP3播放器、移动、汽车导航等为一体的便携式播放器。所以研究MP3播放器还是有一定意义的,不仅能够了解音频设备的发展,还能深刻体会快速发展的科技。家用音乐播放器产品以及其它有关消费电器产品都是些开环或闭环控制系统,都由核心控制部分,执行部分和人机界面三部分组成。而最为重要的控制部分一般由单片机来执行完成的,这就必将促进单片机在音乐领域应用的发展。现在这些由单片机来实现的音乐播放器的功能变得越来越强、费用也变得越来越低。但这些音乐播放器同时或多或少的存在着一些问题,为了解决这些问题,非智能化的单片机莫属。1.2国内外状况中国加入WTO和经济全球化的推进,使得每个企业都置身于一个全球性发展的大市场中,每一个企业都面临着激烈的市场竞争,如果要想可以取得好的收益,就不得不不断完善和改进自己产品的质量和功能,使自己的产品更受用户的喜爱,这就必须在一个市场和一个行业中取得绝对性的企业竞争力,这就是企业获胜的关键。虽然经历了很许多次的洗礼,生产商家越来越多,市场上的MP3的竞争越来越激烈,生活的压力逼迫许多商家,为了获得更多的利益而不得不去尽量降低产品的成本,这样质量就难免会缩水,使得越来越少的人们会在技术上做出更多的进步了。MP3市场超速增长的原因,主要有以下几点:MP3功能的不断完善,由原来的单纯的播放音乐文件,发展到现在的录音,收音,FM等附加功能,使得更加的多功能化。与此同时,音质也在不断的提升,播放模式变的越来越多样化,以及容量的不断扩大,外表包装越来越个性创新,使得人们对其爱不释手。但是随着国内市场闪存价格的迅速下降,使得MP3成本大幅度下降,导致MP3的价格也急剧下降。在MP3市场上,国内的品牌具有压制性的优势。爱国者、联想、等诸多国内品牌占市场销售前列,但国外品牌如三星、ipod也没有放弃对市场的竞争,他们一方面继续巩固已经拥有的优势,另一方面他们也在不断向中低端市场渗透,多方面发展。与此同时,国内品牌也不再满足低端定位,不断推出自己的高端产品。硬盘MP3、彩屏MP3也相继问世,并取得了广大消费者的支持。虽然现在是快速发展的时代,但是MP3的发展也给我们带来了不可磨灭的影响。所以,对于MP3的研究还将不断发展,在未来也将取得更加突破性的发展,应用也将更加广泛。1.3课题研究内容随着现代电子信息工业技术的飞速发展,MP3播放器越来越受到人们的喜爱。目前单片机本的应用已经渗透到我们生活的各个领域,许多开发领域都离不开单片机,而且单片机在音乐播放器领域有很大的应用。本设计由MP3播放器的编解码部分分析硬、件电路设计和软件程序设计三大部分组成。整个硬件电路由中心控制模块、扬声器播放模块、显示模块、按键模块及彩灯伴奏模块组成,中心控制模块是采用AT89C52单片机,扬声器播放模块由8550NPN三极管和电磁蜂鸣器组成,采用LCD1602显示模块,按键模块设8个按键,7个作为音符输入,另1个作为模式转换按键,来实现用户的自弹作曲、彩灯伴奏。软件程序用C语言编程来实现。本设计主要围绕以下几个部分对基于单片机的MP3播放器的控制系统进行设计:(1)对MP3播放器的编解码部分分析。(2)对MP3播放器的硬件部分设计。(3)对MP3播放器的软件部分设计。MP3播放器的编解码过程2.1MP3的工作原理MP3的全称为MPEG1Layer-3音频文件,MPEG(MovingPictureExpertsGroup)在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码[16]。MPEG音频编码的层次越高,编码器就越复杂,压缩率也就越高,MP1和MP2的压缩率分别为4:1和6:1~8:1,而MP3的压缩率则高达10:1~12:1,也就是说,一分钟CD音质的音乐,如果未经压缩需要10MB的存储空间,而经过MP3压缩编码后确只需要1MB左右。MP3对音频信号采用的是有损压缩方式,为了降低声音的失真度,MP3采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。一个完整MP3播放机要分几个部分:中央处理器、解码器、存储设备、主机通讯端口、音频DAC和功放、显示界面和控制键[12]。中央处理器和解码器是整个系统的核心。这里的中央处理器我们通常称为MCU(单片微处理器),简称单片机。它运行MP3的整个控制程序,也称为fireware(或者固件程序)。控制MP3的各个部件的工作:从存储设备读取数据送到解码器解码;与主机连接时完成与主机的数据交换;接收控制按键的操作,显示系统运行状态等任务。解码器是芯片中的一个硬件模块,或者说是硬件解码(有的MP3播放机是软件解码,由高速中央处理器完成)。它可以直接完成各种格式MP3数据流的解码操作,并输出PCM或I2S格式的数字音频信号。存储设备是MP3播放机的重要部分,通常的MP3随身听都是采用半导体存储器(FLASH

MEMORY)或者硬盘(HDD)作为储存设备的。它通过接受储存主机通讯端口传来的数据(通常以文件形式),回放的时候MCU读取存储器中的数据并送到解码器。数据的存储是要有一定格式的,众所周知,PC管理磁盘数据是以文件形式,MP3也不例外,最常用的办法就是直接利用PC的文件系统来管理存储器,微软操作系统采用的是FAT文件系统,这也是最广泛使用的一种。播放机其中一个任务就是要实现FAT文件系统,即可以从FAT文件系统的磁盘中按文件名访问并读出其中的数据。主机通讯端口是MP3播放机与PC机交换数据的途径,PC通过该端口操作MP3播放机存储设备中的数据,拷贝、删除、复制文件等操作。目前最广泛使用的是USB总线,并且遵循微软定义的大容量移动存储协议规范,将MP3播放机作为主机的一个移动存储设备。这里需要遵循几个规范:USB通信协议、大容量移动存储器规范和SCSI协议。音频DAC是将数字音频信号转换成模拟音频信号,以推动耳机、功放等模拟音响设备。这里要介绍一下数字音频信号。数字音频信号是相对模拟音频信号来说的。我们知道声音的本质是波,人说能听到的声音的频率在20Hz到20kHz之间,称为声波。模拟信号对波的表示是连续的函数特性,基本的原理是不同频率和振幅的波叠加在一起。数字音频信号是对模拟信号的一种量化,典型方法是对时间坐标按相等的时间间隔做采样,对振幅做量化。单位时间内的采样次数称为采样频率。这样一段声波就可以被数字化后变成一串数值,每个数值对应相应抽样点的振幅值,按顺序将这些数字排列起来就是数字音频信号了。这是ADC(模拟-数字转换)过程,DAC(数字-模拟转换)过程相反,将连续的数字按采样时候的频率顺序转换成对应的电压。MP3解码器解码后的信息属于数字音频信号(数字音频信号有不同的格式,最常用的是PCM和I2S两种),需要通过DAC转换器变成模拟信号才能推动功放,被人耳所识别。MP3播放机的显示设备通常采用LCD或者LED等来显示系统的工作状态。控制键盘通常是按钮开关。键盘和显示设备合起来构成了MP3播放机的人机交互界面。MP3播放机的软件结构跟硬件是相对应的,即每一个硬件部分都有相应的软件代码,这是因为大多数的硬件部分都是数字可编程控制的。总结一下,MP3播放器的工作原理可以概括如下:首先将MP3歌曲文件从存储体中读出并将数据送往解码器→解码器对数据进行解码→通过数模转换器将解码后的数字信号转换成模拟信号→再把转换后的模拟音频放大→低通滤波后到耳机输出口,输出后就是我们所听到的音乐了。2.2MP3的编码过程(1)音频信号数字化信号的数字化就是将连续的模拟信号转换成离散的数字信号,一般需要完成采样、量化和编码三个步骤[10]。如图2.1所示。采样是指用每隔一定时间间隔的信号样本值序列来代替原来的时间上连续的信号;量化是用有限个幅度近似表示原来的时间上连续变化的幅度值,把模拟信号的连续幅度变为有限数量、有一定时间间隔的离散值;编码则是按照一定的规律,把量化后的离散值用二进制数码表示。上述数字化的过程又称为脉冲编码调制,通常由A/D转换器来实现。模拟音频信号 低通滤波器 采样数字流 编码 量化图2.1音频信号数字化数字音频信号经过处理、记录或传输后,当需要重现声音时,还必须还原为连续变化的模拟信号。将数字信号转换成模拟信号为D/A转换。数字音频的质量取决于采样频率和量化位数。采样频率越高,量化位数越多,数字化后的音频质量越高。(2)音频采样采样就是从一个时间上连续变化的模拟信号取出若干个有代表性的样本值,来代表这个连续变化的模拟信号。一个在时间和幅值上都连续的模拟音频信号的函数表示为,采样的过程就是在时间上将函数离散化的过程。一般的采样是按照均匀的时间间隔来进行的。设这一时间间隔为T,则取样后的信号为,n为自然数。根据奈奎斯特采样定理:要从采样值序列完全恢复原始的波形,那么采样频率必须大于或者等于原始信号最高频率的2倍。设连续信号的频谱为,以采样间隔时间T抽样得到离散信号,如果满足时,其中是截止频率,即时,可以由完全确定连续信号,如公式(2-1)所示。(2-1)因此,可由离散信号完全确定频谱,如公式(2-2)所示。(2-2)当采样频率为1/2T时,即时,称为奈奎斯特采样频率。(3)音频量化采样把模拟信号变成了时间上离散的样值序列,但每个样值的幅度仍然是一个连续的模拟量,所以还必须对其进行离散化处理,将其转换为有限个离散值,才能最终与数码来表示其幅值。量化过程是将采样值在幅度上再进行离散化处理的过程。所有的采样值可能出现的范围被划分成有限多个量化阶的集合,把凡是落入某个量化阶内的采样值都赋予相同的值,即量化值。通常这个量化值用二进制来表示,用N位二进制码字可以表示2N个不同的量化电平。存储数字音频信号的比特率为:,其中的是采样率,N是每个采样值的比特数。表示采样值的二进制的位数为量化位数,它反映出各采样值的精度,如3位能表示采样值的8个等级,8位能反映256个等级,其精度为音频信号最大振幅的1/256。量化位数越多,量化值就越接近于采样值,其净度就越高,但是要求的信息存储量就越大。根据以上公式可知,要减小比特率I,在2s已经确定的情况下,只能去减少N的值。N的值降低会导致量化的精度降低,N的值增加又会导致信息存储量的增加。因此在编码时就需要合理地选择N的值。均匀量化就是采用相等的量化间隔进行采样,也称为线性量化。用均匀量化来量化输入信号时,无论对大的输入信号还是小的输入信号都一律采用相同的量化间隔。因此,要想既适应幅度大的输入信号,同时又要满足精度高的要求,就需要增加采样样本的位数。非均匀量化的基本思想是对输入信号进行量化时,大的输入信号采用大的量化间隔,小的输入信号就采用小的量化间隔,这样就可以在满足精度要求的情况下使用较少的位数来表示。其中采样输入信号幅度和量化输出数据之间一般定义了两种关系,一种成为u律压缩算法,另一种成为A律压缩算法。采用不同量化方法,量化后的数据量也就不同。因此说量化也是一种压缩数据的方法。(4)音频编码采样、量化后的信号还不是数字信号,需要把它转换成数字脉冲,这一过程就叫编码。最简单的编码方式是二进制编码。具体说就是用n比特的二进制编码来表示已经量化了的样值,每个二进制数对应一个量化电平,然后把它们排列,得到由二值脉冲串组成的数字信息流。用这种方式组成的二值脉冲的频率等于采样频率与量化比特数的乘积,成为数字信号的数码率。采样频率越高,量化比特数越大,数码率就越高,所需要的传输带宽就越宽。音频编码方法归为三大类参数编码、波形编码、混合编码。参数编码:从语音波形信号中提取生成语音的参数,然后用这些参数通过语音生成模型重构出语音,使重构的语音信号尽可能的保持原始语音信号的语意。也就是说,参数编码是通过把语音信号产生的数字模型作基础,然后求出数字模型的模型参数,再按这些参数还原数字模型,进而合成语音。波形编码:不利用生成音频信号的任何参数,直接将时间域信号变换为数字代码,使重构的语音波形尽可能的与原始语音信号的波形形状保持一致。波形编码的基本原理就是在时间轴上对模拟语音信号按一定的速率抽样,然后将幅度样本分层量化,并用代码表示。混合编码:同时使用两种或两种以上的编码方法进行编码。这种编码方法克服了波形编码和参数编码的弱点,并且结合了波形编码高质量和参数编码的低编码速率,能够取得比较好的效果。MP3文件由一系列长度不同的帧组成,一个接着一个,就好像电影胶片一样。每一帧的前面都有一个头信息,其中就包括一些关于后继数据的额外信息。在某些编码中,这些帧可以互相影响。例如,一帧有剩余的空间,而下一帧没有,他们就可以组合起来产生一个优化的结果。在一个MP3文件的开始或者结尾,通常会存储一些额外的信息,包括歌手、曲目名、专辑名、录制时间、流派以及个人评论。这叫做“ID3”数据,当文件数目不断增长是,将会非常有用。MP3使用两种技术获得好的压缩比:一种有损压缩,一种无损压缩。首先,压缩过程将人类根本不能听到的部分丢弃(或者至少做出可接受的折中),然后对冗余编码进一步的压缩。然而,正是第一部分的压缩做了大部分的工作,也具有更多的复杂性,这里也被更多的考虑。MP3编码工具分析信号源,把它分解为各种数学模板,并与编码器存储的心理声学模板进行比较。编码器就可以丢弃大部分不匹配的数据。MP3编码过程可以分成几个步骤:第一,将信号分解成称为帧的组建片、每一帧持续不到一秒。这和电影中的帧很类似。第二,分析信号已决定其“光谱能量分布”,也就是说,在整个可听频率的光谱范围内,找出怎样将比特流进行分布,以产生最好的音频编码。因为频率光谱的不同部分使用相同的算法,经过轻微的变换,可以进行高效编码,这一步将信号分解为子带(sub-bands),子带可以独立的进行处理以产生最优的效果(注意所有的子带都使用相同的算法,不同只是因为使用的编码器不同造成的其分配的比特流大小不同而已)。第三,要考虑数据传输率,它决定了每一帧能够分配的比特最大值。例如,如果数据传输率是128kbit/s,那么每一帧可以分配的数据上限就确定了(除非使用变比特率方法)。这一步决定了可以存储多少可获得的数据以及有多少数据被丢弃。把每一帧的频率分布于人类心理声学的数学模板进行比较(数学模板作为一个索引表存储在编/解码器中),从这些模板中就可以决定,哪些频率应该准确的渲染表现出来,那些频率可以丢弃或者分配较少的bit。第四,经过Huffman编码的处理,这个过程去处取样的冗余信息。Huffman编码与心理声学模型并不相关,它只是通过传统的压缩方式获得额外的压缩比。因此,读者可以看到,整个MP3编码过程是:首先,利用所有的心理声学模板选择性的丢弃大量数据,然后压缩剩余的数据,消除冗余。其中的第二步,并不丢弃数据,它仅仅使用更小的空间存储剩余的数据。把一定数量的帧集合起来,再在每个数据帧前加上头信息,就组装成一系列的比特流,头信息主要包括一些相关帧的指令。在这个过程中,许多其他因素需要考虑,这经常在开始编码前就需要预先设定。另外,对每个单独的帧的编码算法经常还依赖于对前一帧和后一帧。整个过程包含了某种程度的同步,前面的步骤并不必须按顺序进行。MP3的声音数据分成帧,每帧包含1152个样本的数据,由32个子带分别输出MP3的编码器输入,以12个样本为一组,每组样本经过时间-频率变换之后进行一次位分配并记录一个比例因子(scalefactor)。位分配的信息告诉解码器每个样本由几位表示,比例因子用6位表示解码器,使用6位的比例因子乘以量化器的每个输出样本值,以恢复被量化的子带值。比例因子的作用是充分利用量化器的量化范围,通过位分配的比例因子相配合,可以表示的动态范围超过了120dB的样本。MP3编码器的详细框图如图2.3所示。MDCT动态加窗逆比例器和量化器数字通信MCU边信号编码器哈弗曼编码逆MDCT动态加窗合成滤波器组边信号编码器掩蔽域值MCUFFT哈弗曼编码比例器和量化器分析滤波器组MDCT动态加窗逆比例器和量化器数字通信MCU边信号编码器哈弗曼编码逆MDCT动态加窗合成滤波器组边信号编码器掩蔽域值MCUFFT哈弗曼编码比例器和量化器分析滤波器组图2.3MP3编码器和解码器的结构MP3使用了从ASPEC(AudioSpectralPerceptualEncoding)和OCF(OptimalCodingInTheFrequencydomain)导出的算法。在滤波器组上,MP3在使用了正交镜像滤波(和MP1和MP2相同)后,紧跟着使用了改进离散余弦变换MDCT(ModifiedDiscreteCosineTransform),对正交镜像滤波的不足进行了一些补偿。MDCT把子带的输出在频域里进一步细分已达到更高的频域分辨率。而且通过了对子带的进一步细分,编码器部分消除了多相滤波器组引入的混迭效果。MP3指定了两种MDCT的块长:长块的块长为18个样本,短块的块长为6个样本,相邻变换的窗口之间有50%的重叠。长块对于平稳的声音信号可以得到更高的频域分辨率,而短块对跳变的声音信号可以得到更好的时域分辨率。在短块模式下,3个短块代替了一个长块,短块的长恰好是一个长块的1/3,所以MDCT的样本数不受块长的影响。给定的一个帧声音信号,MDCT可以全部使用长块或全部使用短块,也可以长短块混合使用。因为低频区的频域分辨率对音质有重大影响,所以在混合块长模式下MDCT对低频的2个子带使用长块,而对其余的30个子带使用短块。这样,既能保证低频区的频域分辨率,又不会牺牲高频域的时域分辨率。长块和短块之间的切换有一个过程,一般用一个带特殊长转短或者短转长数据窗口的长块来完成这个长短块之间的切换。除了使用MDCT外,MP3还采用了其他许多改进措施来提高压缩比而不降低音质。虽然MP3引入了许多复杂的感念,但是它的计算量并没有比MP2增加许多。增加的主要是编码器的复杂度和解码器所需要的存储容量。2.3MP3播放器解码过程MP3的解码总体上可分为这样九个过程:比特流分解,霍夫曼解码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,IMDCT变换,子带合成,PCM输出[9]。为解上述9个过程的由来,简要描述mp3的压缩流程。声音是一个模拟信号,对声音进行采样,量化,编码将得到PCM数据。PCM又称为脉冲编码调制数据,是电脑可以播放的最原始的数据,也是MP3压缩的源。为达到更大的数据压缩率,MPEG标准采用子带编码技术将PCM数据分成了32个子带,每个子带都是独立编码的。然后将数据变换到频域下分析,MPEG采用的是改进的离散余弦变换,也可以使用傅利叶变换。再下来为重建立体声进行了频谱按特定规则的排列,随后立体声处理,处理后的数据按照协议定义进行量化。为达到更大的压缩,再进行霍夫曼编码。最后将一些系数与主信息融合形成mp3文件。解码是编码的反过程大概如下:(1)所谓比特流分解是将mp3文件以二进制方式打开,再根据其压缩格式的义依次从这个mp3文件中取出头信息,边信息,比例因子信息等。这些信息都是面的解码过程中需要的。(2)霍夫曼编码是一种无损压缩编码,属于熵编码。MP3的解码能够通过公式实时进行数据的解码,但是往往采用的是通过查表法实现解码(节省了CPU时间资源)。(3)逆量化处理只是几个公式的操作。(4)立体声处理:代码中的立体声处理函数JointStereo是种立体声编码技巧,主要分为IntensityStereo(IS)和Mid/Side(M/S)stereo两种。IS的是在比较低流量时使用,利用了人耳对于低频讯号指向性分辨能力的不足,将音讯资料中的低频分解出来,合成单声道资料,剩余的高频资料则合成另一个单声道资料,并另外纪录高频资料的位置资讯,来重建立体声的效果。例如钢琴独奏的录音就能够利用这种方法在有限的资料流量中减少音场资讯又大幅增加音色资讯。Mid/Side(M/S)stereo在左右声道资料相似度大时常被用到,纪录方式是将左右声道音讯合并(L+R)得到新的一轨,再将左右声道音讯相减(L-R)得到另外一轨,然后再将这两轨资料用上面提到听觉心理学模型与滤波器处理。Mid/Side(M/S)stereo与IS一样的是利用部分相位(phase)资讯的损失来换得较高的音色纪录资讯。一般的MP3是Mid/Sidestereo和IntensityStereo交替使用的。(5)频谱重排列,抗锯齿处理,IMDCT变换。(6)PCM的输出是与c语言对文件的处理相关的。对文件的处理在比特流分解和霍夫曼解码中最先接触到。2.4本章小结本章主要阐述MP3播放器的编解码过程,一个完整MP3播放机要分几个部分:中央处理器、解码器、存储设备、主机通讯端口、音频DAC和功放、显示界面和控制键。其中,中央处理器和解码器是整个系统的核心,存储设备是MP3播放机的重要部分,通常的MP3随身听都是采用半导体存储器或者硬盘作为储存设备的。在第一节主要介绍MP3的工作原理其工作原理大致可以概括为:首先将MP3歌曲文件从存储体中读出并将数据送往解码器,然后解码器对数据进行解码,之后通过数模转换器将解码后的数字信号转换成模拟信号,再把转换后的模拟音频放大,最后低通滤波后到耳机输出口,输出后就是我们所听到的音乐了。在第二节中主要介绍MP3的编码过程,包括编码分析和编码过程。其中,编码分析包括音频信号数字化、音频采样、音频量化和音频编码。信号的数字化就是将连续的模拟信号转换成离散的数字信号,一般需要完成采样、量化和编码三个步骤。采样就是从一个时间上连续变化的模拟信号取出若干个有代表性的样本值,来代表这个连续变化的模拟信号。量化过程是将采样值在幅度上再进行离散化处理的过程。所有的采样值可能出现的范围被划分成有限多个量化阶的集合,把凡是落入某个量化阶内的采样值都赋予相同的值,即量化值。采样、量化后的信号还不是数字信号,需要把它转换成数字脉冲,这一过程就叫编码。第三节主要介绍MP3播放器解码过程,Mp3的解码总体上可分为这样九个过程:比特流分解,霍夫曼解码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,IMDCT变换,子带合成,PCM输出。第三章硬件设计3.1硬件总体框图一个单片机应用系统的硬件电路设计包含有两个部分内容:一是系统扩展,即单片机内部的功能单元;二是系统配置,即按照系统功能的要求配置外围设备。硬件电路如图3.1所示包括中心控制模块、按键模块、显示模块、扬声器播放模块以及彩灯伴奏模块。彩灯伴奏模块按键模块中心控制模块 显示模块 扬声器播放模块图3.1硬件总体框图按键模块由8个按键组成,其中1个键用来实现播放器自动播放及自行弹奏两模式之间的转换,其余7个键用作音符的输入或者音乐的播放选择。显示模块采用LCD1602对当前播放的歌曲名称进行显示。彩灯伴奏模块是LED通过控制模块的控制伴随着音乐节奏闪亮。扬声器播放模块则是由三极管和无源蜂鸣器组成,通过控制模块的控制对当前音乐进行的播放。3.2主芯片的选择与概述首先,确定选用的单片机。综合来看,单片机具有如下明显的特点:(1)可靠性高、适用的温度范围宽。单片机芯片一般是按工厂测控环境要求设计的,能适应各种恶劣的环境,抗扰性强,功能稳定。这一特点是其他机种无法比拟的。(2)小巧灵活、成本低、易于产品化。能利用它方便地组装成各种智能式测控设备及各种智能仪器仪表,很容易满足仪器设备既智能化又微型化的要求。(3)易扩展、控制功能强。通过单片机本身或扩展可以方便地构成各种规模的应用系统及多机和分布式计算机的控制系统。(4)指令系统相对简单,较易掌握。指令中有丰富的逻辑控制功能指令,能较方便地直接操作外部输入/输出设备。目前应用较为流行且简单的单片机有AVR和51单片机。51系列的单片机主要优点有两点如下[3]:第一,它从内部硬件到软件有一套完整按位操作系统,即位处理器,也称布尔处理器,它处理对象不是字或字节,而是位,这样就意味着它不仅能对其片内某些特殊功能寄存器的某位来进行处理,例如传送、置位、清零、测试等,还可以进行位的逻辑运算,这一点是其它种类单片机很难实现的。第二,此系列的单片机具备乘法和除法指令,其中八位除以八位的除法指令商为八位,精度显得不足,因此在应用方面不是很多,但八位乘以八位的乘法指令积是十六位,这样的精度已经可以满足大部分应用要求了,更为重要的是,直接具备乘法与除法指令,这样就使得在实际应用的时候,使用者没有必要额外编写相应子程序以备调用,和其他系列单片机相比,51系列单片机在编程操作方面的简便性与实用性无疑上了一个新台阶。同属指令系统规范完整范畴所带来的便利还包括二进制—十进制的调整指令DA,可将二进制变为BCD码,这样就使得十进制的计量更快捷简便,省去了其他系列的单片机还需要编写调用相应子程序的冗余过程,这样节省了大量的劳动力和时间。另一种系列单片机:AVR单片机。这系列的单片机也具备了大多数新兴事物的特点,在原有系列的基础上,拥有高性能、高速度、甚至是更低的功耗的特点,但这些优化与更新的性能背后,同样也存在着一些问题,例如其价格相比之下显得较昂贵,另外,它的32个通用寄存器中前16个寄存器都不能直接和立即数打交道,不像51系列单片机中所有的通用寄存器均可直接与立即数打交道,因而AVR系列单片机在通用性方面肯定有所下降。由此可见,较高的价格、较低的适用性,这两点便成为AVR单片机进行市场推广存在的最大制约。综上所述,从本系统设计的功能需求及成本来考虑,51系列单片机性价比更高,中心控制模块来用AT89C52单片机已完全满足设计需要,实现整个系统控制[11]。AT89C52是一个低电压,高性能CMOS

8位的单片机,片内含有8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件是采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置有通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用[8]。AT89C52有40个引脚,(如图3.2)32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52即可以按照常规方法进行编程,也可以在线编程。其可将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本,这给本次设计带来便利。图3.2AT89C52芯片引脚图图3.2AT89C52芯片引脚图AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。AT89C52为8位通用微处理器,采用工业标准的C51内核,与工业80C51产品指令和引脚完全兼容。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。RST(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0~P3为可编程通用I/O脚,其功能用途由软件定义。P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写"1"时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写"1",通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚P2是一个带有内部上拉电阻的8位双向I/O口,而且P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写"1",通过内部的上拉电阻把端口拉到高电平,此时可作输入口,当作输入口使用时,因为内部存在上拉电阻,所以某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。当Flash编程或校验时,P2亦接收高位地址和一些控制信号。P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入"1"时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能:P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。RST复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。ALE/当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲()。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。程序储存允许()输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。/VPP外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存端状态。如端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。XTAL1振荡器反相放大器及内部时钟发生器的输入端。XTAL2振荡器反相放大器的输出端。3.3硬件电路设计模块中心控制模块,是由核心芯片AT89C52单片机、单片机复位电路和外接晶振组成。如图3.3所示,电容C1、C2和12M晶振与单片机引脚XTAL1、XTAL2相连构成外接晶振电路。AT89C52单片机内部有一个用来构成振荡器的高增益反相放大器,引脚XTAL1和引脚XTAL2分别是该放大器的输入和输出端。在XTAL1和XTAL2两端跨接晶体就构成稳定的自激振荡器,它发出的脉冲直接送进内部的时钟电路,替单片机的工作提供时序。XTAL1端和XTAL2端将电容C1和C2与内部的反相放大器连接起来形成并联谐振电路,C1、C2取30pF,对频率起到微调作用[14]。其中的AT89C52单片机有一个复位引脚,复位条件就是:在时钟电路工作后,每当外部电路在RST引脚处施加持续2个机器周期以上的高电平时,使系统复位,通常只要保持正脉冲宽度为10微秒,就可以保证单片机安全复位。该系统采用的是按键手动复位,在通电瞬间,RST引脚电位与VCC相同,随着电容充电电压的增加,RST引脚电位就逐渐下降。在单片机运行期间,按下按键后电容就立马瞬间放电,RST引脚电位和VCC相同,这时系统就复位了;当随着按键的断开,电容又开始充电,RST引脚电位电位又逐渐下降,系统开始又正常工作。图3.3AT89C52最小系统目前市场所用的MP3音乐播放器很多都是采用LED数码管。LED数码管是一种数显器件。我们知道,发光二极管(英文缩写为LED)是由半导体材料制成的、能将电信号转换成光信号的结型电致发光器件。如果把发光二极管制成条状,再按照一定方式连接,组成数字“8”,就构成LED数码管,简称LED。使用时按规定使某些笔段上的发光二极管发光,即可组成0~9的一系列数字。液晶显示器,简称LCD(LiquidCrystalDisplay),是一种液晶利用光调制的受光型显示器件。LCD的特点是体积小、形状薄、重量轻、耗能少(1~10微瓦/平方厘米)、低发热、工作电压低(1.5~6伏)、无污染,无辐射、无静电感应,尤其是视域宽、显示信息量大、无闪烁,并能直接与CMOS集成电路相匹配,同时还是真正的“平板”式显示设备。常见的基于单片机设计的MP3音乐播放器基本不能显示歌曲信息。该MP3音乐播放系统设计上增加液晶显示器,可为使用者提供曲目信息。由于LED数码管只能显示数字而无法显示其他中英文字符,从设计的成本及功能的角度考虑,采用LCD1602显示模块,它可以显示每首曲目的英文名字。LCD1602驱动电路简单,可以由单片机直接输出命令驱动。LCD1602工业字符型液晶,能够同时显示16x02即32个字符[1]。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平1时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平1时读取信息,负跳变时执行指令。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。3.3V或5V工作电压,对比度可调,内含复位电路,提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能,有80字节显示数据存储器DDRAM,内建有192个5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM。其中LCD显示电路是由单片机P0及P25-P27端口控制。我们选用的工业字符型液晶显示屏LCD1602,能同时显示16*2即32个字符(16列2行)。硬件连接如图3.4所示。其中变位器是作为调节LCD对比度而设计。LCD的显示驱动在软件中完成,硬件之中不做处理。图3.4图3.4LCD显示电路扬声器播放模块的选择有两种。第一种,由8050NPN三极管与电磁蜂鸣器组成。AT89C52输出高电平控制信号,启动8050NPN三极管从而使信号放大,启动电磁蜂鸣器。第二种,由LM386和喇叭组成,但和8050NPN三极管与电磁蜂鸣器组合相比较,此播放模块存在着一定噪声,音响效果也较差。由于所需驱动功率较小,驱动器件要求不高,而且能降低设计成本。因此,须选用8050NPN三极管和电磁蜂鸣器的组合来能满足系统要求。所以详细设计如下,扬声器播放模块由8050NPN三极管和无源蜂鸣器组成。无源蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片以及外壳等组成。无源蜂鸣器发声原理是让电流通过电磁线圈,从而使电磁线圈产生磁场来驱动振动膜发声的,所以需要一定的电流才可以驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上不能驱动蜂鸣器,因此设计过程中增加一个由8050NPN三极管组成的电流放大电路。蜂鸣器的负极直接接地,蜂鸣器的正极接到三极管的发射极E上,三极管的基级B经过限流电阻R4后再由单片机的P2.2引脚控制,当P2.2输出高电平时,三极管Q1截止,没有了电流流过线圈,蜂鸣器就不发声;当P2.2输出低电平时,三极管导通,这样蜂鸣器的电流就形成了回路,从而发出声音。因此,我们可以通过程序控制P2.2脚的电平使蜂鸣器发出声音和关闭。键盘在系统中作用在于手动切换播放器模式、音乐弹奏时音符的输入以及曲目的选择。因在本系统中需要的按键并不多,单片机的I/O数完全可以满足,所以采用了独立式键盘设计,如图3.5所示,按键均低电平有效。此外,上拉电阻保证了按键断开时,I/O口线有确定的高电平。在设计键盘的时候,还要考虑去抖问题。常见的去抖的方法有两种:硬件方法和软件方法。单片机中常用软件法,因此在硬件方面将不做处理。键盘输入电路中共用到八个按键,S1键用于播放器模式的切换,在软件中计算S1键按下的次数,一次为播放模式,二次为自行弹奏模式;S2~S8键在播放器为自动播放模式时为曲目选择键,即七个按键依次对应一首歌曲,按下其中一个键就播放对应的歌曲。而在播放器为自行弹奏模式时,七个键就对应着七个音符,即按下某一按键,播放器就发出对应音符的节奏。图3.5按键模块硬件设计图图3.5按键模块硬件设计图由于本设计中需设计彩灯伴奏电路,因此彩灯就采用了普通发光二级管[2]。播放器工作时,发光二级管可以根据音乐节拍闪亮。每当播放器发出duo音时,D1亮;当播放器发出ruai音时,D2亮;当播放器发出mi音时,D3亮;当播放器发出fa音时,D4亮;当播放器发出suo音时,D1、D4亮;当播放器发出la音时,D2、D3亮;当播放器发出xi音时,D3、D4亮。在程序执行过程中,单片机对其发出的音符进行检测,再输出对应彩灯信号。硬件电路较为简单,如图3.6所示。图3.6彩灯伴奏模块硬件设计图图3.6彩灯伴奏模块硬件设计图2.4本章小结本章主要介绍MP3播放器的硬件设计部分,一个单片机应用系统的硬件电路设计包含有两个部分内容:一是系统扩展,即单片机内部的功能单元;二是系统配置,即按照系统功能的要求配置外围设备。二节主要是讲单片机主芯片的选择,从本系统设计的功能需求及成本来考虑,51系列单片机性价比更高,中心控制模块来用AT89C52单片机已完全满足设计需要,实现整个系统控制。AT89C52是一个低电压,高性能CMOS

8位的单片机,片内含有8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件是采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置有通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。第三节主要讲硬件电路设计模块,它包括中心控制模块、显示模块、扬声器播放模块、按键模块和彩灯伴奏模块。中心控制模块,是由核心芯片AT89C52单片机、单片机复位电路和外接晶振组成。发光二极管(英文缩写为LED)是由半导体材料制成的、能将电信号转换成光信号的结型电致发光器件。如果把发光二极管制成条状,再按照一定方式连接,组成数字“8”,就构成LED数码管,简称LED。扬声器播放模块由8050NPN三极管和无源蜂鸣器组成。无源蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片以及外壳等组成。在设计键盘的时候,还要考虑去抖问题。常见的去抖的方法有两种:硬件方法和软件方法。单片机中常用软件法,因此在硬件方面将不做处理。由于本设计中需设计彩灯伴奏电路,因此彩灯就采用了普通发光二级管。播放器工作时,发光二级管可以根据音乐节拍闪亮。第四章软件设计4.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,则产生相应的停顿效果。为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。4.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。4.3播放模式切换原理本设计是通过软件判断模式转换按键按下的次数来实现播放器的手动弹奏和自行播放俩种模式之间的切换的。模式转换按键按一次时,播放器为自动播放模式;当按键连续按两次时,播放器为手动弹奏模式。在软件中的流程图大致如图4.1所示。开始按键扫描开始按键扫描计算模式转换键按下次数自动播放模式次数清零手动弹奏模式次数清零判断按键次数1次2次图4.1切换原理图4.4软件程序设计当播放器工作时,程序工作流程图如图4.2所示,首先对在程序运行过程中所需的各种标记位及参数进行初始化赋值,然后再执行按键扫描子程序并计算和保存键值,根据模式转换键的按键次数进行正确的模式判断,当按键次数为1时,播放器处于自动播放模式,接着扬声器播放模块就开始工作,与此同时彩灯伴奏模块随着单片机端口高低电平的变换闪烁达到伴奏的效果,另一方面,显示模块将进入工作状态并且对当前曲目名进行显示;当按键次数为2时,播放器处于手动弹奏模式,再次对按键进行扫描,对按下的键值进行分析,然后单片机输出相应的音符,彩灯伴奏模块也伴随音符闪亮,LCD显示模块将对当前音符进行显示。就此程序工作流程图,可以设计出系统的主程序详见附录B。开始开始函数初始化函数初始化按键扫描按键扫描计算并保存键值计算并保存键值判断模式转换键键值判断模式转换键键值1次2次1次2次手动弹奏播放曲目手动弹奏播放曲目彩灯伴奏彩灯伴奏彩灯伴奏彩灯伴奏显示弹奏音符显示曲目名称显示弹奏音符显示曲目名称图图4.2系统主程序框图在本次设计中,用于显示当前播放曲目名称和弹奏时的音符是通过LCD1602来实现的,其开始工作是靠软件来实现的。整个显示过程的程序工作流程图如图4.3所示。根据流程图可得程序如下:voidlcd_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);}}开始液晶初始化写指令选择第一行数据地址指针LCD专用延时时间开始液晶初始化写指令选择第一行数据地址指针LCD专用延时时间FOR循环将显示数据逐位写入显示在第一行写指令选择第二行数据地址指针LCD专用延时时间FOR循环将显示数据逐位写入显示在第二行返回图4.3LCD显示子程序流程图函数初始化子程序设计为了让程序更具有条理化,清晰易懂,本设计中需有函数初始化程序也就是把在主函数内对某些参数和标记位赋初值编写成一个函数[15]。因为整个程序要用到定时器0和定时器1,所以初始化程序主要用于对定时器相关内容作说明,程序的简单框图如图4.4所示。EA=1ET0=1EA=1ET0=1ET1=1TH0,TL0赋值TR0=1TH1,TL1赋值图4.4初始化程序框图TR1=1其程序如下:voidInitialSound(void){ Sound_Temp_TH1=(65536-(1/1200)*SYSTEM_OSC)/256; //计算TH1应装入的初值 (10ms的初装值) Sound_Temp_TL1=(65536-(1/1200)*SYSTEM_OSC)%256; //计算TL1应装入的初值 TH1=Sound_Temp_TH1; TL1=Sound_Temp_TL1; TMOD=0x11; ET0=1;ET1=0;TR0=0;TR1=0;EA=1;}因为本设计中所采用的独立式键盘,按键的闭合与否直接反应在口线的电平上。因此能够通过口线的电平高、低状态检测,来确认按键是否按下。但如果在触点抖动期间检测按键的通与断状态,就可能导致判断出错,也就是按键一次按下或释放被错误的认为是多次操作,为了克服按键点机械抖动所致的检测错误,确保CPU对一次按键动作只能确认一次按键,就必须采取去抖动的措施。软件中去抖动的措施是在第一次检测到有键按下时,执行一段延时10ms的子程序,然后再一次检测该键的电平状态,如果该键电平仍保持闭合状态电平,就确认为真正有键按下。这样设计以便于其他的程序的调用[5]。程序流程图如图4.5所示。开始开始有否键按下有否键按下延时去抖返回计算并保存键值按键是否释放恢复键值yesnonoyesyesno图4.5按键扫描子程序流程图详细程序如下: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); } }}通过一层或多层循环来实现延时程序,整个过程延时的时间是程序执行的指令总条数乘以执行每条指令用的时间[17]。本系统的晶振选用的是12M,所以执行每条指令所所用时间为2us,程序执行流程如图4.6所示。开始开始是否x>0x--结束是否y>0y--yesnonoyes图4.6延时程序流程图程序如下:voiddelay_ms(uintxms)//延时函数,有参函数{ uintx,y; for(x=xms;x>0;x--) for(y=110;y>0;y--);}4.5本章小结本章主要阐述基于单片机的MP3播放器设计的软件设计,第一节主要讲单片机的发声原理,第二节主要讲设计的相关音乐说明,第三节主要阐述播放模式切换原理,第四节主要讲软件程序设计。第一节的单片机发声原理,我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。此外,结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。第二节的音乐说明,我们知道要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期时间。再利用半周期时间定时这个半周期时间,每当计时到后就可以将输出的I/O反向,然后重复计时半周期再对I/O反向,就能在I/O脚上得到此频率的脉冲。第三节讲播放模式的切换原理,本设计是通过软件判断模式转换按键按下的次数来实现播放器的手动弹奏和自行播放俩种模式之间的切换的。模式转换按键按一次时,播放器为自动播放模式;当按键连续按两次时,播放器为手动弹奏模式。第四节的软件程序设计,分别详细的设计了系统主程序、LCD显示子程序、函数初始化子程序、按键扫描子程序、延时程序。一目了然的程序流程图能够快速的理解其原理。第五章总结与展望本设计以MSC-51系列单片机为核心,充分利用了AT89C52芯片的I/O引脚,以独立式键盘作为琴键输入及曲目的选择键,采用LCD1602对当前曲目及音符进行显示,并利用发光二级管进行音乐伴奏。本文从理论上分析了该设计方案的可行性,并预计能达到设计要求,主要体现在:拥有彩灯伴奏功能;具有音频D/A转换功能,可以输出音频模拟信号并能播放音频文件;显示歌曲信息功能;播放器具有手动弹奏和自动播放两个模式。在做此毕业设计中遇到很多的难点,有的原理,根本就不知道怎样去实现。最后通过了自己仔细查资料,一点一点的就慢慢懂了。在实践中发现,其实再难编写的程序都是由一些基础程序模块构成的,很多的基础模块前人就已经做好了,只要我们拼凑就行了,当然拼凑的工作也不是很简单,最重要的还是要自

温馨提示

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

评论

0/150

提交评论