语音存储与回放系统的设计与实现_第1页
语音存储与回放系统的设计与实现_第2页
语音存储与回放系统的设计与实现_第3页
语音存储与回放系统的设计与实现_第4页
语音存储与回放系统的设计与实现_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

精选优质文档-----倾情为你奉上精选优质文档-----倾情为你奉上专心---专注---专业专心---专注---专业精选优质文档-----倾情为你奉上专心---专注---专业目录附录3工作图语音存储与回放系统的设计与实现摘要随着当今社会电子技术更新的日益加快,单片机控制系统的应用在日常生活中已变得越来越广泛,特别是在语音录放等领域。以单片机控制为基础来进行语音录放系统的设计,或是具备语音播报功能的产品,正在被大家所广泛接受,这也将对通信领域语音处理的发展起着更大的推进作用。本文采用单片机AT89S52与语音芯片ISD4004来组成语音存放系统,实现语音的分段存储、组合回放。该语音录放系统主要包括单片机控制模块、语音处理模块、显示模块,其中单片机控制模块是整个系统设计的核心。在语音的录放过程中,单片机通过SPI通信方式与语音模块ISD芯片进行实时通讯,以此来实现语音的录制与回放。实践证明,本系统能实现语音的录放,且音质自然清晰。关键词单片机/语音芯片/语音存储/语音回放

THEDESIGNANDIMPLEMENTATIONOFVOICESTORAGEANDPLAYBACKSYSTEMABSTRACTWiththeacceleratingupdatesofelectronictechnologyintoday'ssociety,theapplicationofmicro-controllercontrolsystemindailylifehasbecomemoreandmorewidespread,especiallyinvoicerecordingareas.ThedesignofvoicerecordingsystemthatbasedonMCUcontrol,ortheproductswhichhaveavoicebroadcastfeature,arewidelyacceptedbyeveryone,whichwillalsoplayagreaterroleinpromotingthedevelopmentofcommunicationinthefieldofspeechprocessing.Inthispaper,AT89S52micro-controllerandvoicechipISD4004areusedtoformthevoicestoragesystems,torealizethefragmentationofvoice,thecombinationofplayback.Thevoicerecordingsystemincludes,voiceprocessingmodule,anddisplaymodule,inwhichthesingle-chipcontrolmoduleisthecoreofthesingle-chipsystemdesign.Inthevoicerecordingprocess,themicro-controllerviaSPIcommunicationmoduletocommunicateISDvoicechipwithforreal-timecommunication,inordertoachieveavoicerecordingandplayback.Practicehasprovedthatthesystemcanachievevoicerecording,andthesoundnaturalandclear.KEYWORDSAT89S52,voicechip,voicestorage,voiceplayback1绪论1.1课题的背景及意义在智能仪器仪表或自动控制设备中,增加语音功能就能够在很大程度上提高人机界面的友好型,为用户提供方便。目前,语音服务的应用越来越广泛,如电脑语音钟、排队机、公交车报站器、语音型数字万用表、监控系统语音报警等。在许多场合,设计者都需要将语音系统和单片机结合在一起,以实现智能语音控制的功能。由于单片机的体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,使得现代人们生活中所用的几乎每件电子和机械产品都会集有单片机。手机、电话、计算器、ipad、电子玩具以及鼠标等电脑配件中都会有1-2部单片机。而个人电脑中也会有为数不少的单片机在维持工作,由此看出,单片机在语音功能的实现中发挥着重大的作用。数字化语音录放指的是利用数字技术对语音信号进行采集、处理并在一定存储设备中存储,而且在需要时可以进行输出的过程。相对于模拟设备来说,数字化语音设备凭借着易于集成、小型化、制作成本低、稳定、操作直接、方便等优点,在各个领域都得到广泛的应用。如监控环境中的语音采集系统,家庭或学校使用的语音复读机等,都是数字化语音存放系统的典型应用[1]。在对语音信号的处理方法上,常规的是采用滤波器处理接收到的信号,通过模数转换成数字信号,再由单片机控制存储在存储器中,在需要输出时,由单片机控制从存储器输出,再经数模转换成模拟信号,滤波后由功放放大播出。这种方法的缺点是:输出不稳定,语音信号有杂音或变音,不易调试。解决该缺陷,可以采用语音芯片。语音芯片就是在人工或者控制器控制下可以完成录/放音的芯片,它可以很方便的在单片机系统中使用,并且和单片机的接口非常容易,其体积和重量也很符合单片机系统的要求。因此,采用单片机和语音芯片的结合,来实现语音信号的数字化控制,是实用性较强的选择。1.2国内外研究现状随着IT行业的不断发展进步,生活中的各种语音录播设备层出不穷。在一般的数字化语音录放系统中,对于语音信号的处理只是简单的采集、存储和播放;尽管还能较大程度上保证语音的保真度,但是过多的语音数据会造成对大量存储设备的需求。所以,对于大型系统,可以通过使用大容量的硬盘、甚至大规模的磁盘阵列来解决;但对于小型的设备,如便携式语音复读机,则不能采用同样的方法。近年来,语音信号处理技术的快速发展,为数字化语音录放系统提供了新的发展空间,对语音信号的采集、处理由以前的简单的波形编码变为参数编码、压缩,从而大大地减少了数据的存储量。比如说,原始的语音信号一般是采用8kHz抽样,16bits的线性PCM编码进行采集,一般的系统是直接将采集的数据直接进行存储;而如果采用参数编码对采集的数据进行压缩之后在存储,能够使存储量大大减少,当恢复信号时,则利用编码后的参数进行合成,可以得到满意的音质效果[2]。就现在来说,比较典型的语音器件有美国ISD公司生产的ISD系列语音芯片。它采用的是模拟数据在半导体存储器中直接存储的专利技术,即模拟信号直接存储,无需A\D或D\A转换,因此能够很好地再现语音效果,避免了一般固体语音电路因量化和压缩所造成的量化噪声和失真现象。另外,该芯片功能强大:能录能放、10万次的擦写寿命、语音可掉电保存、手动控制和CPU控制兼容、可多片级联、无需开发系统等,它为欲实现语音功能的单片机设计人员提供了解决方案。目前,市场上已有将AT89C2051单片机与ISD语音芯片组成的语音组合板,使用串口通信,芯片里能固话一些常用词汇,用户无需知道工作原理,只需通过串口按一定协议发送代码即可发送语音。1.3本文的主要内容及研究方法1.3.1本文主要内容本论文主要是在查阅相关国内外文献资料的前提之下,在了解和熟悉目前语音存储与回放系统结构、功能以及发展现状的基础上,完成语音存储与回放系统的设计与实现。设计步骤大致分为以下三个部分:第一,主要了解实物的具体组成部分,其中包括单片机AT89S52和语音芯片ISD4004具体功能和各个引脚的作用,两者之间如何连线。第二,程序的操作。怎样编写程序,如何进行仿真和写入程序。比如先是进行程序的写入,然后通过单片机对语音芯片的控制操作。第三,对于仿真方面,经过查阅资料选出了比较合适的程序编写和仿真软件Keil,当所有东西都做完后,选用了通过实物的调试来检验设计的完整性和实物的真实效果。1.3.2研究方法该系统要求实现的功能是语音的存储与回放,整个系统分为录音、暂停、回放、停止四种状态。身为模拟信号的语音信号,本身是不能完成数字化的处理的,需要借助于专用的语音芯片或者A/D和D/A转换,来完成模拟信号的处理工作。但这种数字化处理方法易产生信号失真的现象。为避免此现象,利用语音芯片有模拟量直接存储技术的特点,采用语音芯片来实现语音录放,单片机在其中起着主控作用,不需在外部进行语音信号的放大和滤波,语音芯片抗干扰能力强,可有效防止信号失真。语音芯片内部集成模拟存储阵列,无需外连存储器,这使得电路更加简单便于操作扩展。单片机要控制语音录音的开始和结束,设定信号的存储地址,并在播放时寻址播放空间并控制播放。

2语音存储与回放系统总体设计2.1设计要求1、设计一个语音存储与回放系统,能最少实现4分钟的录音时间并且播放音质清晰;2、根据单片机系统的原则,构建硬件电路;3、给出语音存储与回放系统的硬件电路设计图和模块程序流程图;4、编写源程序代码,制作印刷电路板、并制作实物。2.2实现方案的选择方案一:利用单片机及其外围电路(如A/D、D/A、存储器等),实现语音信号的数字化处理,完成语音的存储与回放。该方案声音通过MIC转换成微弱的电信号,经放大及滤波后之后,送入A/D转换进行模数转换,输出的数字化语音信号通过单片机的控制,写入片外数据存储器中[3]。回放时,单片机从存储器中将数据读出,送入D/A转换器,进行模数转换,转换后的模拟信号经滤波、功率放大后,实现语音回放。该方案的优点:能完成语音信号的数字化处理,实现语音信号的存储与回放。缺点是:语音信号容易受到外界干扰而失真,且信号的压缩存储比较复杂,硬件电路不易调试,因此该方案不是最佳选择。方案二:直接采用单片机与专用的语音芯片ISD4004来实现语音存储与回放,此方案可以实现语音的存储与回放[4]。而且优点是无需外扩存储器,外围电路简单,语音信号抗干扰能力强,存储方便,调试简单,还可以用此作为语音服务的子系统。本设计采用第二种方案,可以实现录音,循环放音,擦除等功能。2.3总体设计方案根据设计要求,本系统采用AT89S52单片机和ISD4004语音芯片来实现语音的存储与回放,系统总体设计框图如图2-1所示。由图可知,本系统分为七个部分:单片机控制电路、语音录入电路、语音处理电路、功放电路、按键控制电路、状态显示电路和电源电路。采用51单片机作为主控芯片,利用ISD4004实现语音信号的录放处理,采用LM386集成功放构成功放电路,用液晶1602构成工作状态显示电路,简单易行且控制方便。单片机单片机控制电路语音处理电路语音录入电路功放电路状态显示电路按键控制电路电源电路图2-1系统总体设计框图各模块介绍如下:单片机控制电路:完成硬件的初始化,响应用户键盘输入的命令,通过模拟SPI总线与语音芯片进行通信,给状态显示模块和语音处理模块发送命令;语音录入电路:采集语音信号,为语音芯片提供信号输入;语音处理电路:响应单片机发送来的命令,从而使语音芯片根据按键作相应的语音处理;功放电路:回放时对语音信号进行放大,播放出来;按键控制电路:为用户控制该系统的工作状态提供方便;状态显示电路:提醒用户此时该系统处于何种状态,使操作界面友好化;电源电路:为语音芯片、单片机等各电路模块提供合适的电源电压。

3语音录放系统的硬件设计3.1单片机控制电路设计3.1.1AT89S52单片机简介AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器和内部看门狗电路。该芯片使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程[5],亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式[6]。空闲模式下,CPU停止工作,允许RAM、定时器/计数器串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52单片机的主要性能参数如表3-1所示。表3-1单片机主要特征AT89S52单片机主要特征与MCS-51

指令系统兼容8K可反复擦写FlashROM32个双向I/O口三个16位可编程定时/计数器中断256*8bit内部RAM时钟频率0-24MHZ2个串行中断可编程UART串行通道2个外部中断6个中断源2个中断读写口线3级加密位低功耗的闲置和掉电模式片内振荡器和时钟电路数据来源:2007年《电子元器件手册》[J]单片机AT89S52的引脚图如图3-1所示。各引脚的功能及说明如下:VCC:接供电电压,+5V。GND:接地。P0口:P0口为一个8位漏极开路双向I/O口,即地址/数据通信总线复用口。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。P2口:P2口为一个内部上拉电阻的8位双向I/O口,同时它有转换控制部分。当它做I/O口时,会构成一个准双向口,这时的多路开关连接到锁存器的Q端口上。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入[7]。图3-1AT89S52的引脚图3.1.2晶振电路设计图3-2晶振电路单片机是一种时序电路,必须要为它提供时钟脉冲信号才能正常工作。系统的时钟信号是单片机内部各种操作的时间基准,为各种指令的执行提供时钟节拍。一般情况下,单片机可以通过内部震荡或者外部震荡两种方式得到系统的时钟信号。本系统中,采用的是12MHz的晶振,电容是用的22pF的陶瓷电容,其晶振原理图如图3-2所示。3.1.3复位电路设计在本次设计中,采用外部手动复位,当一个高电平加到RST引脚超过2机器周期时,单片机产生复位。复位电路图如图3-3所示。图3-3复位电路当任何一个复位信号产生时,C51的所有I/O端口都会立即复位成它们的初始值,并不需要时钟源处于运行状态。在复位信号撤销后,硬件系统将调用一个计数延时过程,经过一定的延时之后,才能进行系统内部的真正复位启动。采用这种形式的复位启动过程,保证了电源达到稳定后才使单片机进入正常的操作,复位启动的延时时间可以由用户通过对熔丝位的编程来定义。3.2语音录入电路设计3.2.1MIC简介此次毕业设计中,语音录入设置采用的是咪头,学名为传声器,是将声音信号转换成电信号的能量转换信号,是和喇叭正好相反的一个器件。当前应用比较广泛的是电容麦克风,和驻极体麦克风。考虑到驻极体形式的体积小巧,成本低廉,应用广泛,此次声音的录入,采用驻极体形式的麦克风。对于驻极体咪头,内部存在一个由振膜,垫片和极板组成的电容器,因为膜片上充有电荷,并且是一个塑料膜,因此当膜片受到声压强的作用,膜片要产生振动,从而改变了膜片与极板之间的距离,从而改变了电容器两个极板之间的距离,产生了一个微小的Δd的变化,因此由公式C=ε∙S/L可知,必然要产生一个ΔC的变化,由公式C=Q/V又知,由于ΔC的变化,充电电荷又是固定不变的,因此必然产生一个ΔV的变化。这个电压的变化量是由声压引起的,因此整个咪头就完成了一个声电的转换过程,其电压的输出范围是20-25mV[8]。咪头的实物图如图3-4所示。使用的时候要注意接口的正负极。图3-4咪头实物图3.2.2语音录入电路设计图3-5语音录入电路语音的录入电路主要是由麦克MK1及相关外围电路等构成。但由于语音芯片ISD4004内部集成有话筒前置放大,且该芯片采用的是模拟量直接存储技术,电压的输入范围是0-32mV,所以无需放大咪头的输出信号,经耦合后,可直接接于语音芯片的信号输入端。声音信号由MK1转换成电信号,经电容耦合,由ANAIN+引脚进入ISD4004,由ISD4004采样和保存。语音录入电路图如图3-5所示。3.3语音处理电路设计3.3.1ISD4004简介(1)ISD4004特征表3-2ISD4002/4003/4004芯片参数表型号存储时间(秒)可分段数信息分辨率(毫秒)采样频率(HZ)滤波器带宽(HZ)控制码+地址位ISD4002-1201206002008.0K3.4K5+11ISD4002-1801806003005.3K2.3K5+11ISD4002-2402406004004.0K1.7K5+11ISD4003-0424012002008.0K3.4K5+11ISD4003-0636012003005.3K2.3K5+11ISD4003-0848012004004.0K1.7K5+11ISD4004-0848024002008.0K3.4K8+16ISD4004-1696024004004.0K1.7K8+16数据来源:ISD4004数据手册ISD4004系列工作电压3.3V,单片录放时间8至16分钟,内置有微控制器串行通信接口,适用于移动电话及其他便携式电子产品中。芯片采用CMOS技术,内含振荡器、话筒前置放大、自动增益控制、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存贮陈列。该芯片的设计是基于所有操作必须由微控制器控制,操作命令可以通过串行通信接口(SPI或Microwire)送入。该芯片采用的是多电平模拟量存储技术,每个采样值是直接存储在片内闪烁存储器中,所以使用时能够非常真实、自然地再现语音信号,避免了一些没必要的噪声干扰。芯片在制作时,采用的是高质量、自然的语音还原技术,有自动静噪功能,使用的是多段信息处理存储。它的采样频率可为4.0、5.3、6.4、8.0kHz,频率越低,音质就会有所下降。片内信息存储于闪烁存储器之中,可以在断电的情况下保存信息100年,反复录放10万次[9]。芯片参数如表3-2所示。(2)ISD4004引脚电源(VCCA,VCCD):是该芯片的电源线,为了使噪声最小,芯片的模拟和数字电路使用不同的电源总线,并且分别引到外封装的不同管脚上,模拟和数字电源端最好分别走线,尽可能在靠近供电端处相连,而去耦电容也应该尽量靠近器件。地线(VSSA,VSSD):芯片内部的模拟电路和数字电路也应该使用不同的地线。同相模拟输入(ANAIN+):是录音信号的同相输入端,输入端的放大可用单端或差分驱动。单端输入时,信号由耦合电容输入,最大幅度的峰峰值是32mV,耦合电容和本端的3KΩ电阻输入阻抗决定了芯片频带的低端截止频率。差分驱动时,信号最大幅度的峰峰值16mV,与ISD3000系列的芯片相同。反相模拟输入(ANAIN-):在差分驱动的情况下,这是录音信号的反相输入端。信号通过耦合电容输入,最大幅度的峰峰值16mV。音频输出(AUDOUT):该引脚提供音频输出,可以驱动5KΩ的负载。片选(SS):该引脚低电平有效,即向该ISD4004芯片发送指令,两条指令之间为高电平。串行输入(MOSI):此引脚为串行输入端,主控制器要在串行时钟上升沿之前半个周期时,将数据放到本端,供ISD输入。串行输出(MISO):此引脚为ISD的串行输出端。ISD片选端无效时,本端呈高阻态。串行时钟(SCLK):此引脚为ISD的时钟输入端,由主控制器来产生,功能是用于同步MOSI和MISO的数据传输。数据在SCLK的上升沿锁存到ISD,在其下降沿移出ISD。中断(/INT):此引脚为漏极开路输出。ISD在任何操作(包括快进)中检测到EOM或OVF标志符时,该端变为低电平并保持。中断状态在下一个SPI周期开始时清除,中断状态也可用RINT指令读取。OVF标志——指示ISD的录、放操作已到达存储器的未尾。EOM标志——只在放音中使用,检测到内部的EOM标志时,此状态位才置1。行地址时钟(RAC):漏极开路输出端,每个RAC周期表示ISD存储器的操作进行了一行(ISD4004系列中的存储器共2400行)。该信号175ms保持高电平,低电平为25ms。快进模式下,RAC的218.75μs是高电平,31.25μs为低电平。该端可用于存储管理技术。外部时钟(XCLK):本端内部有下拉元件,芯片内部的采样时钟在出厂前已调校,误差在1%内。商业级芯片在整个温度和电压范围内,频率变化在+2.25%内。工业级芯片在整个温度和电压范围内,频率的变化范围较小,所以使用时要用到稳压电源。若要求更高精度,可从本端输入外部时钟。由于内部的防混淆及平滑滤波器已设定,故上述推荐的时钟频率不应改变。输入时钟的占空比无关紧要,因内部首先进行了分频。在不外接地时钟时,此端必须接地。自动静噪(AMCAP):当录音信号电平下降到内部设定的某一阈值以下时,自动静噪功能使信号衰弱,这样有助于养活无信号(静音)时的噪声。通常本端对地接1uF的电容,构成内部信号电平峰值检测电路的一部分。检出的峰值电平与内部设定的阈值作比较,决定自动静噪功能的翻转点。大信号时,自动静噪电路不衰减,静音时衰减6dB。1uF的电容也影响自动静噪电路对信号幅度的响应速度。当该引脚接VCCA时,则会禁止自动静噪[10]。ISD4004的引脚图如图3-6所示。图3-6ISD4004引脚图(3)ISD4004的SPI(串行外设接口)ISD4004是工作于SPI串行接口中的,SPI协议是一个同步串行数据传输协议,该协议是假定微控制器的SPI移位寄存器是在串行时钟(SCLK)的下降沿工作的,所以对ISD4004而言,在时钟的上升沿锁存MOSI引脚的数据,在时钟的下降沿将数据送至MISO引脚[11]。协议的具体内容为:=1\*GB3①所有串行数据传输开始于SS下降沿;=2\*GB3②SS在传输期间必须保持为低电平,在两条指令之间则保持为高电平;=3\*GB3③数据在时钟上升沿移入,在时钟下降沿移出;=4\*GB3④SS变低,输入指令和地址后,ISD才能开始录放操作;=5\*GB3⑤指令格式是(8位控制码)加(16位地址码);=6\*GB3⑥ISD的任何操作(含快进)如果遇到EOM或OVF,则产生一个中断,该中断状态在下一个SPI周期开始时被清除;=7\*GB3⑦使用“读”指令使中断状态位移出ISD的MISO引脚时,控制及地址数据也应该同步从MOSI端移入,因此要注意移入的数据是否能与器件当前进行的操作兼容。当然,也允许在一个SPI周期里,同时执行读状态和开始新的操作(即新移入的数据与器件当前的操作可以不兼容)。=8\*GB3⑧所有操作在运行位(RUN)置1时开始,置0时结束。=9\*GB3⑨所有指令都在SS端上升沿开始执行。其SPI通信工作时序图如图3-7所示。图3-7SPI通信工作时序图3.3.2语音处理电路设计本系统数码语音芯片选用的是单片语音录放集成电路ISD4004,它具有抗断电、音质好、使用方便,无需专用的开发系统等优点。语音处理电路图如图3-8所示。单片机的P1.0口接ISD的片选段,P1.1口接ISD的串行时钟端,P1.2、P1.3口分别接ISD的串行输入和串行输出端,单片机的P3.2/INT0接ISD的中断端。图3-8语音处理电路语音处理电路通过SPI接口与单片机之间进行通信,完成相应的语音存储与回放功能。3.4功放电路设计3.4.1LM386简介LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机等低电压消费类产品之中。为使外围元件最少,电压增益内置为20dB。但是,在1脚和8脚之间增加一只外接电阻和电容,便可以将电压增益调为任意值,直至200dB。通过查找386的数据手册,可知其电源电压是4-12V或5-18V(LM386N-4),静态消耗电流为4mA,电压增益是20-200dB,在1脚和8脚开路时,带宽是300kHz,输入阻抗50K,音频功率0.5W。尽管LM386的应用非常简单,但稍不注意,特别是器件上电、断电瞬间,甚至工作稳定后,一些操作(如插拔音频插头、旋音量调节钮)都会带来的瞬态冲击,在输出喇叭上会产生非常讨厌的噪声。为减小噪声,可以采用一下改进措施:(1)通过接在1脚、8脚间的电容(1脚接电容+极)来改变增益,断开时增益为20dB。因此用不到大的增益,电容就就可以不要接了,不光省了成本,还会带来好处——噪音减少;(2)PCB设计时,所有外围元件尽可能靠近LM386。地线尽可能粗一些;输入音频信号通路尽可能平行走线,输出亦如此;(3)选好调节音量的电位器,阻值不要太大,10K最合适;(4)第7脚(BYPASS)的旁路电容不可少!实际应用时,BYPASS端必须外接一个电解电容到地,起滤除噪声的作用。工作稳定后,该管脚电压值约等于电源电压的一半。增大这个电容的容值,减缓直流基准电压的上升、下降速度,有效抑制噪声。在器件上电、掉电时的噪声就是由该偏置电压的瞬间跳变所致,这个电容很必要!(5)减少输出耦合电容。此电容的作用有二:隔直+耦合。隔断直流电压,直流电压过大有可能会损坏喇叭线圈;耦合音频的交流信号。它与扬声器负载构成了一阶高通滤波器。减小该电容值,可使噪声能量冲击的幅度变小、宽度变窄;太低还会使截止频率(fc=1/(2π*RL*Cout))提高。分别测试,发现10uF/4.7uF最为合适。LM386与通用集成运放是相类似的,它是一个三级放大电路,第一级是差分放大电路,第二级是共射放大电路,增大放大倍数,第三级采用的是准互补输出级,消除交越失真。电路的内部构造,引入了深度电压串联负反馈,使得电路具有稳定的电压增益[12]。3.4.2功放电路设计图3-9功放电路该设计中,功放电路采用的是通用型音频功率放大器LM386,功放电路的连接图如图3-9所示。图中采用的是LM386的一般接法,也即可以调节LM386电压增益的一种用法,电路增益为20dB~200dB,连续可调,通过调节电阻R01的阻值,可以改变集成功放的电压增益,即调节音量。输出端接C5、R7串联电路,以校正喇叭的频率特性,防止高频自激。引脚7接220uF的去耦电容,以消除低频自激。为便于该功放在高增益情况下工作,这里不使用的引脚均接地。3.5按键控制电路设计该设计的按键功能控制键总共有四个,分别为控制录音键、放音键、录/放音暂停键、以及工作停止键,它们分别与单片机的P3.4、P3.5、P3.6、P3.7引脚相连,当响应按键按下时,单片机会响应响应命令,做相关工作。按键控制电路如图3-11所示。图3-10按键控制电路3.6状态显示电路设计3.6.1LCD1602简介LCD1602是工业字符型液晶,能够同时显示16x02即32个字符。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。1602采用标准的16脚接口,其中:管脚1:VSS为电源地;管脚2:VDD接5V电源正极;管脚3:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度);管脚4:RS为寄存器选择,高电平1时选择、低电平0时选择;管脚5:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作;管脚6:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令;管脚7~14:D0~D7为8位双向数据端;第15~16脚:悬空或背灯电源,15脚背光正极,16脚背光负极。其引脚图如图3-11所示。图3-11LCD1602的引脚图在单片机系统中应用液晶显示器作为输出器件有以下几个优点:(1)显示质量高。由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁[13]。(2)数字式接口。液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。(3)体积小、重量轻。液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。(4)功耗低。相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。考虑到如果使用数码管显示,需要在程序中不断扫描,这样的扫描会浪费CPU的时间,而且操作不便,要通过不断的扫描来显示一个数据。如果用液晶的话,它的内部有存储器,可以把数据存储起来直接发给液晶,无需多次扫描,操作方便。3.6.2状态显示电路设计在该设计中,为使操作界面友好化,添加了状态显示电路,主要是完成对系统当前工作状态的指示,是录音、放音、录/放音暂停、停止,响应工作状态就会有相应的约定显示。直接利用单片机I/O口中的P0.0—P0.7和P2.5、P2.6、P2.7来控制LCD1602,用程序约定其相应的显示。根据液晶的显示,可以判断系统工作于何种状态。状态显示电路图如图3-12所示。图3-12状态显示电路图3.7电源电路设计3.7.1AMS1117简介AMS1117是一个正向低压降稳压器,在1A电流下压降为1.2V。AMS1117有两个版本:固定输出版本和可调输出版本,固定输出电压为1.5V、1.8V、2.5V、2.85V、3.0V、3.3V、5.0V,具有1%的精度;固定输出电压为1.2V的精度为2%。AMS1117内部集成过热保护和限流电路,是电池供电和便携式计算机的最佳选择[14]。1117的引脚图如图3-13所示。图3-13xx1117引脚图3.7.2电源电路设计因为单片机的供电电源是5V,而语音芯片的供电电源要求是3.3V,所以需要一个电源电压的转换部分,此设计中,选择AMS1117-3.3V稳压芯片来将5V电源电压转换成3.3V电压。电源电路图如图3-14所示。图3-14电源电路图

4语音录放系统的软件设计软件的设计是以硬件为基础的,软件要实现的功能要以正常的硬件为前提,若硬件无法正常工作,再优秀的软件也无法完成设定的功能。同样,软件是硬件的灵魂,没有了软件,再强大的硬件也只是一部废铁。所以,在确定了设计要求所要实现的功能之后就是软件设计了。4.1主程序设计本系统采用的是51系列的单片机为硬件开发核心,在这章节里,结合具体的硬件电路来介绍各模块的软件设计。单片机的软件部分采用C语言开发,用符合C语言的KELLC51编译器[15]。系统初始化按键扫描系统初始化按键扫描开始 返回图4-1主程序框图4.2按键处理子程序设计4.2.1主要变量说明mode:表示当前机器的工作状态的全局变量,该全局变量起到保存当前机器工作状态的作用。mode=0:表示系统处于停止工作状态;mode=1:表示系统处于录音工作状态;mode=2:表示系统处于放音工作状态。play_suspend_flag:play_suspend_flag=0时,表示系统正在播放录入的语音信号;play_suspend_flag=1时,表示系统正处于放音暂停状态。该全局变量,为播放暂停的子程序编写提供方便。rec_suspend_flag:play_suspend_flag=0时,表示系统正在录入语音信号;rec_suspend_flag=1时,表示系统正处于放音暂停状态。该全局变量,为录音暂停的子程序编写提供方便。key_rec:表示录音按键变量,有0、1两种状态,当其为0时表示该按键按下。key_play:表示放音按键变量,有0、1两种状态,当其为0时表示该按键按下。key_suspend:表示录/放音暂停按键变量,有0、1两种状态,当其为0时表示该按键按下。key_stop:表示停止按键变量,有0、1两种状态,当其为0时表示该按键按下。4.2.2按键处理子程序设计本系统中,按键是用户实现控制系统的唯一渠道。在按键扫描子程序中,系统根据相应的功能按键执行相应的子程序,从而完成相应的语音操作及状态显示。按键处理子程序流程图如图4-2所示。4.3语音处理子程序设计4.3.1录音子程序设计当系统的录音功能键key_rec按下后,会执行相应的录音子程序,在编写的录音程序中有ISD4004的录音操作,和系统处于录音状态的液晶显示操作。录音子程序流程图如图4-3所示。4.3.2放音子程序设计当系统的放音功能键key_play按下后,会执行相应的放音子程序,在编写的放音子程序中有ISD4004的放音操作,和系统处于放音状态的液晶显示操作。放音子程序流程图如图4-4所示。全局变量设为录音模式全局变量设为录音模式全局变量设为放音模式执行录音子程序执行放音子程序执行停止子程序执行暂停子程序初始化扫描键盘否有键按下?是key_rec=0?key_play=0?key_stop=0?key_suspend=0?返回图4-2按键处理子程序流程图更新液晶显示lcd_wcmd更新液晶显示lcd_wcmd()发送ISD4004上电指令isd_powerup()发送录音起始地址指令isd_setrec()发送录音指令isd_rec()图4-3录音子程序流程图更新液晶显示lcd_wcmd更新液晶显示lcd_wcmd()发送ISD4004上电指令isd_powerup()发送放音起始地址指令isd_setplay()发送放音指令isd_play()图4-4放音子程序流程图4.3.3暂停子程序设计当系统的暂停功能键key_suspend按下后,会执行相应的暂停录/放音或恢复录/放音功能即暂停子程序,在其中会伴随有系统录放或恢复功能的执行,和系统处于何种状态的液晶显示。暂停子程序流程图如图4-5所示。mode=1录音mode=1录音mode=2放音mode=0停止rec_suspend_flag=1rec_suspend_flag=0play_suspend_flag=1play_suspend_flag=0发送停止指令isd_stop()发送上电指令isd_powerup()发送停止指令isd_stop()发送上电指令isd_powerup()读地址,停录音,更新液晶显示写地址,录音,更新液晶显示读地址,停放音,更新液晶显示写地址,放音,更新液晶显示系统处于哪种工作模式mode=? 返回 rec_suspend_flag=0?play_suspend_flag=0?是否是否放音图4-5暂停子程序流程图4.3.4停止子程序设计当系统的停止功能键key_stop按下后,会执行相应的停止录/放音子程序,在编写的停止录/放音子程序中有使ISD4004停止工作的操作,和系统处于停止状态时液晶的显示状况。停止子程序流程图如图4-6所示。更新液晶显示lcd_wcmd更新液晶显示lcd_wcmd()发送ISD4004停止指令isd_stop()图4-6停止子程序流程图

5电路仿真在此次设计中,由于条件和技术的有限,无法实现电路的全部仿真,所以在做实物前只是进行了部分的仿真,来验证电路连接以及程序编写的正确性[16]。5.1系统工作状态显示模块仿真为方便提醒用户系统所处于的工作状态,特为系统添加了液晶显示,编写相应程序,添加在单片机中,使得系统工作于相应状态时,有相应字母的显示。当系统上电时,液晶显示如图5-1所示:图5-1系统上电显示图当录音键按下时,系统工作于录音状态,液晶显示如图5-2所示:图5-2系统录音显示图之后按下暂停按键,系统工作于录音暂停状态,液晶显示如图5-3所示:图5-3系统录音暂停显示图之后按下停止按键,系统工作于录音停止状态,液晶显示如图5-4所示:图5-4系统录音停止显示图当按下放音按键时,系统工作于放音状态,液晶显示如图5-5所示:图5-5系统放音显示图之后按下暂停按键,系统工作于放音暂停状态,液晶显示如图5-6所示:图5-6系统放音暂停显示图之后按下停止按键,系统工作于放音停止状态,液晶显示如图5-7所示。图5-7系统放音停止显示图5.2系统输出放大模块仿真由于系统输出的语音信号比较微弱,要经过放大输出。在该系统中使用LM386功放放大,其仿真结果如图5-8所示。其中黄线(A通道,上线)代表经放大后输出信号图,白线(D通道,下线)代表输入信号图。图5-8功放仿真图

6系统的制作与调试6.1系统的制作6.1.1电路板布线本系统的硬件电路连接有以下特点:整体电路模块化。整体电路主要分为单片机控制模块和语音处理模块,这样做的好处是,便于调试时检查错误;在整体布线之前,先对元器件位置进行合理优化,这样就可以在布线时减少很多工作量,且有效的减少没必要的声音干扰;(3)在PCB布线时,使用手动布线,设置好线宽参数[17]这样可以方便焊接且减少相互干扰。6.1.2电路焊接焊接前先对着原理图熟悉各芯片引脚,然后先选择容易焊接的电容、电阻,每个引脚都要保证正确无误。焊接时要注意一些问题:(1)首先要把电路中各个器件的位置布局好,以免导致焊接的时候引起不必要的错乱;(2)因为成品要尽可能的美观,所以焊接时要注意排版,焊接技术要熟练,避免虚焊或温度过高而伤害板子。焊接的结果:电路中元器件没有漏焊或焊接错误的现象;焊接完成后,元器件没有正负极接反、没有出现功能不能呈现的现象;最终完成后,没有出现短路、断路或者虚焊等不良现象。6.2系统调试调试是最后的一个关键环节,决定着产品的功能是否能够正常实现,其中包括着硬件调试和软件调试。6.2.1硬件调试从实物调试过程中,总结硬件调试事项如下:(1)实物制作完成之后不应马上通电,还要做一些测试工作,如用万用表测试每一个模块,以确保每一根走线都是正常联通的。然后检查电源的正负极,避免因短路而造成元器件烧坏。(2)对于连接有上拉电阻的单片机端口,尽量不将它作为其他控制端口。原因是电流一旦流经电阻,电阻上就会承载着一定电压,造成电压损耗,输出的高电平可能会变成低电平,从而影响驱动效果。(3)由于硬件实物的制作是分模块化考虑的,所以在调试时,也是分模块化检测。首先,要将程序下载到单片机中,看程序是否能正常运行起来(看显示模块的工作情况),然后在测试语音模块的时候,无论是放音还是录音模式之下,都要通过示波器来检测ISD4004芯片的输入端语音波形是否正常。其次是看相应按键按下时,语音是否能正常录入,是否能经放大之后播放出来,通过电位器调节音量,且音质清晰。6.3.2软件调试首先是对系统工作状态的显示模块的软件进行测试,即对LCD1602的操作。然后对单片机主控系统对语音处理模块的处理程序进行测试。最后,进行综合测试,运行该语音录放系统,根据录音和放音的状态以及其状态显示,来判断系统运行是否正常。再根据所设置的情况,来观察系统在录放时是否能达到预先要求。在软件调试过程中,相应的按键消抖,中断设置以及ISD4004的工作时序,都需要特加注意,稍有不合适,就会影响工作效果。6.3.3调试结果通过对该系统的各项性能的综合测试表明本系统较成功地实现了预先要求的以下各项功能:(1)能够保证语音信号的准确录入和清晰回放,且音量可调。(2)系统易操作,易维护,界面友好。(3)系统具有良好的兼容性和扩展性,为功能的扩充和与其它系统的集成做准备。

结束语本文对语音存放系统进行了深入的研究,在参考了国内外一些资料的基础上,比较合理地选择了系统的设计方案,并对语音处理部分进行了详细的分析和介绍。本文设计根据设计要求、设计目的,选用了AT89S52单片机、语音芯片ISD4004、LCD1602液晶,来实现语音的完整录取、清晰回放和工作状态的显示。经实践证明,该语音录放系统,外围电路简单、易扩展、易调试,且语音真实自然。鉴于作者的能力、实验条件等因素的限制,有些特别好的创意和想法依然无法实现。尽管该语音存放系统的主要功能基本已实现,但要达到完全实用并且可以作为产品推出的话,还有很多地方有待进一步完善和提高。比如说液晶的显示可以更加丰富些,语音播报摆脱简单的定时固化而更加智能化等。当然,随着现代技术的日新月异和我们自己的不断学习,有足够的理由相信,对这一录放系统的设计有着更加完美更加人性化的设计。

致谢走的最快的总是时间,来不及感叹,大学生活已近尾声,四年多的努力与付出,随着本次论文的完成,将要划下完美的句号。首先,非常感谢我的论文指导老师李娜老师。她为人随和热情,治学严谨细心。从选题到开题报告,从写作提纲,到一遍又一遍地指出每稿中的具体问题,无不凝聚着李老师的心血和汗水。李老师要指导很多同学的论文,加上本来就有的教学任务,工作量之大可想而知,看着老师深夜给我发来的指导邮件,我不禁感慨自己真的好幸运,同时又责备自己不够认真!在闲聊中她总是能像知心朋友一样地鼓励我,给我指导,在论文的写作和措辞等方面她也总会以“专业标准”严格要求我们,从选题、定题,一直到最后论文的反复修改、润色,李老师始终认真负责地给予我深刻而细致地指导,帮助我开拓研究思路,精心点拨、热忱鼓励。没有李老师无私的帮助与热忱的鼓励,我不会这么顺利的完成毕业论文。在此向李娜老师表示深深的感谢和崇高的敬意。同时李娜老师的渊博的专业知识,精益求精的工作作风,严以律己、宽以待人的崇高风范,将一直是我工作、学习中的榜样。同时,我也很感谢我们学院的其它各位老师和身边的同学。我深知,该论文能顺利完成,是离不开他们的热情帮忙的,老师们不仅在课堂上传授我必要的专业知识,而且教会我了对于新知识的学习方法,这也是我大学学习的精髓。同学们的建议、资料使我打开思路,知道自己的不足在哪里。毕业论文的完成,意味着大学生活的基本结束,但我知道,我的专业学习生涯才刚刚开始。在大学四年,尤其是在毕业设计制作的这段时间里,我学到的不仅仅是老师传授给我的专业知识,更是遇到问题时的解决思路,遇到陌生点的学习方法。困难,是用来被解决的,而不是用来畏惧的,怕、躲避没有任何作用,而且更是无能的表现。在未来的工作和学习里,我会以更好的成绩来回报各位领导老师和父母。

参考文献[1]杨红军,石林.一种基于单片机的语音录放电路的设计[J].电子元器件应用,2008(03):4-7.[2]苏军.基于单片机的语音信息采集及处理系统设计[J].科技信息(学术版),2008(17):2-3.[3]谢自美,罗杰.电子线路设计·实验·测试[M].北京:电子工业出版社,2008(03):367-373.[4]彭为.单片机典型系统设计实例精讲[M].北京:电子工业出版社,2006(05):4-18.[5]周航慈.单片机程序设计基础[M].北京:北京航空航天大学出版社,1997(08):15-19.[6]周美娟.单片机技术及系统设计[M].北京:清华大学出版社,2007(03):6-17.[7]张洪润.单片机原理与应用[M].北京:清华大学出版社,2008(12):6-7.[8]李宗福.单片机在语音存储与回放中的应用[J].黄石高等专科学校学报,2000(01):56-60.[9]宋戈,黄鹤松等.51单片机应用开发大全[M].北京:人民邮电出版社,2012(05):194-206.[10]张常年.ISD4004语音芯片的工作原理及其在智能控制系统中的应用[J].电子元件与材料,2001(06):20-26.[11]冯志慧.一种基于单片机控制ISD4004语音芯片应用电路[J].微计算机信息,2003(07):3-5.[12]童诗白,华成英.模拟电子技术基础[M].北京:高等教育出版社,2000(08):496-501.[13]李昭静,韩超.基于AT89S52单片机的LED点阵显示屏设计[J].电脑知识与技术,2011(11):4-7.[14]LawrenceR.Rabiner,RonaldW.Schafer.Theoryandapplicationsofdigitalspeechprocessing[J].electronicindustrypress,2011(09):13-17.[15]Michael·Collie,SunXiujuan.Introductorymicrocontrollertheoryandapplications[J].ChinaUniversityofPetroleumPress,2008(06):30-35.[16]吴小花.Proteus的电子电路设计与实现[J].现代电子技术,2011(03):15-17.[17]左昉,李成泉,胡仁喜.Protel应用教程[M].北京:北京交通大学出版社,2008(01):168-210.

(附录)附录1原理图附录2PCB图

附录3工作图

附录4源程序ISD4004_drive.c如下:#include"ISD4004_drive.h"#include"usual.h"#include<intrins.h>/********SPI初始化函数********/ voidspi_init(void){ SS=1; SCLK=0; MOSI=1; MISO=1;}/*函数功能:SPI串口发送8位命令并同时接收8位数据的函数,接收的8位数据高位低位反向(P5|P4|P3|P2|P1|P0|EOM|OVF)*/ unsignedcharspi_8bit_tr(unsignedcharisd_cmd){unsignedcharisd_rxd=0;unsignedcharcount;SS=0;for(count=0;count<8;count++){isd_rxd=isd_rxd>>1;MISO=1;if(MISO){isd_rxd=isd_rxd|0x80;}if(isd_cmd&0x01){MOSI=1;} //先发低位再发高位,依次发送else{MOSI=0;}isd_cmd=isd_cmd>>1;SCLK=1; _nop_(); SCLK=0; _nop_();}SS=1; returnisd_rxd;}/*函数功能:SPI串行发送24位命令并同时接收24位数据的函数,接收的8位数据高位低位反向(*|*|*|*|*|P16|···P1|P0|EOM|OVF|0|0|0|0|0|0|0|0)*/unsignedlongspi_24bit_tr(unsignedcharisd_cmd,unsignedcharaddress_h,unsignedcharaddress_l){unsignedlongisd_txd=0;unsignedlongisd_rxd=0;unsignedcharcount;isd_txd=((((longint)isd_cmd)<<16)|(((longint)address_h)<<8)|((longint)address_l));SS=0;for(count=0;count<24;count++) {isd_rxd=isd_rxd>>1; MISO=1; if(MISO){isd_rxd=isd_rxd|0x;} if(isd_txd&0x01){ MOSI=1;} else{ MOSI=0;} isd_txd=isd_txd>>1; SCLK=1;_nop_(); SCLK=0;_nop_() ; SS=1;}returnisd_rxd;} /********以下是发送上电指令********/voidisd_powerup(void){spi_8bit_tr(0x20); delay_ms(50);}/********以下是发送play(播放)指令函数********/voidisd_play(void){spi_8bit_tr(0xf0);}/********以下是发送rec(录音)指令函数********/voidisd_rec(void){spi_8bit_tr(0xb0);}/********以下是发送stop(停止)指令函数********/voidisd_stop(void){spi_8bit_tr(0x30);delay_ms(50);}/********以下是发送setplay(放音起始地址)指令函数********/voidisd_setplay(unsignedcharadh,unsignedcharadl){spi_24bit_tr(0xe0,adh,adl); }/********以下是发送setrec(录音起始地址)指令函数********/voidisd_setrec(unsignedcharadh,unsignedcharadl){spi_24bit_tr(0xa0,adh,adl);}//函数功能:读取ISD4004的当前行地址(0x00|0|0|0|0|0|0|0|P16|P15|···P1|P0)unsignedlongisd_read_address(void){unsignedlongaddress=0;address=spi_24bit_tr(0x30,0x00,0x00);address =address>>10;address=address&0x0001ffff;returnaddress;}lcd.c如下:#include<lcd.h>#include<intrins.h>#include<usual.h>#include<reg52.h>bitlcd_bz(void)//LCD判断函数{bitresult; DATAPORT=0xff; LCM_RS=0; LCM_RW=1; _nop_(); LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); result=(bit)(P0&0x80); LCM_EN=0; returnresult;}//lcd1602写命令 voidlcd_wcmd(unsignedcharCMD){ while(lcd_bz()); LCM_RS=0; LCM_RW=0; LCM_EN=0; _nop_(); _nop_(); DATAPORT=CMD; _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=0;}//lcd1602写数据 voidlcd_wdat(unsignedchardataW){ while(lcd_bz()); LCM_RS=1; LCM_RW=0; LCM_EN=0; _nop_(); DATAPORT=dataW; _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=0;}/*初始化液晶函数*/voidlcd_init() //初始化LCD {lcd_wcmd(0x38);//设置显示的方式 delay_ms(20); lcd_wcmd(0x38); delay_ms(5); lcd_wcmd(0x38); delay_ms(5); lcd_wcmd(0x0c); //显示开关及光标设置 lcd_wcmd(0x06); //显示光标移动设置为当“读或写一个字符后地址指针加1,且光标加1” lcd_wcmd(0x01);//显示清屏 }function.c程序如下: #include"function.h"#include"ISD4004_drive.h"#include"usual.h"#include"lcd.h"/*定义液晶显示状况*/unsignedcharcodetab[]={"ISD4004TEST"};//定义第1行显示的字符unsignedcharcodeline1_data[]={"RecordingStart"};//定义第1行显示的字符 ,按下录音键unsignedcharcodeline2_data[]={"RecordingOver"};//定义第1行显示的字符 ,录音停止时unsignedcharcodeline3_data[]={"PlayingStart"};//定义第1行显示的字符 ,按下放音键unsignedcharcodeline4_data[]={"PlayingOver"};//定义第1行显示的字符 ,放音停止时unsignedcharcodeline5_data[]={"RecordingSuspend"};//定义第1行显示的字符 ,录音暂停时unsignedcharcodeline6_data[]={"PlayingSuspend"};//定义第1行显示的字符 ,放音暂停时unsignedcharmode=0;voidinit(void) //定义init函数{unsignedchari=0; lcd_init(); //液晶的初始化 spi_init(); //ISD4004初始化 lcd_wcmd(0x01); //液晶上显示初始字符 lcd_wcmd(0x80); while(tab[i]!='\0') {lcd_wdat(tab[i]);//液晶显示“ISD4004TEST” i++;} EX0=1; //中断初始化 IT0=1; IE0=0; EA=1;}voidkey(void) //读键盘函数{staticbitrec_suspend_flag=0;staticbitplay_suspend_flag=0;staticunsignedlongaddress=0;unsignedchari=0; if(!key_rec) //录音按键处理程序 { delay_ms(20); if(!key_rec){ while(!key_rec); rec_test(); //执行录音程序 mode=1; //全局变量设为录音模式 play_suspend_flag=0; rec_suspend_flag=0;} } if(!key_play){ //播放按键处理程序 delay_ms(20); if(!key_play){ while(!key_play); play_test(); //执行播音程序 mode=2; //全局变量设为播音模式 play_suspend_flag=0; rec_suspend_flag=0;} } if(!key_stop){ //停止按键处理程序 delay_ms(20); if(!key_stop){ while(!key_stop); stop_op(); //执行停止程序 } } if(!key_suspend){ //暂停按键处理程序 delay_ms(20); if(!key_suspend){ while(!key_suspend); switch(mode){ case1:if(!rec_suspend_flag){ //如果正在录音 rec_suspend_flag=1; //录音暂停 isd_stop(); //执行ISD暂停模式 delay_ms(500); address=isd_read_address(); //记下录音地址,将来继续录音的时候知道从哪里开始 lcd_wcmd(0x80); //更新显示 i=0; while(line5_data[i]!='\0') {lcd_wdat(line5_data[i]); i++; } lcd_wcmd(0xc0+16); } else{ rec_suspend_flag=0; isd_powerup(); //发送ISD上电指令 delay_ms(500); isd_powerup(); delay_ms(500); address=address-2; //记录地址 isd_setrec(((unsignedchar)(address>>8)),((unsignedchar)(address&0xff)));//发送录音地址指令setrec isd_rec();//发送rec指令 lcd_wcmd(0x80);//更新状态显示 i=0; while(line1_data[i]!='\0') {lcd_wdat(line1_data[i]); i++;} lcd_wcmd(0xc0+16); }break; case2:if(!play_suspend_flag){

温馨提示

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

评论

0/150

提交评论