基于STC89C51RD的语音录放系统设计单片机/语音芯片/C语言编程引言近年来,语音电路发展极为迅速,应用也越来越广范。用语音接口芯片作为输出时,主要作为系统运行、结果、操作过程及故障等状态的提示和报警功能;作为输入时,主要用于对语音的记录、语言库的建立和语音识别等功能。语音系统一般都必须具有如下特点:(1)输出词汇基本确定的,且数量有限,如故障提示、操作提示、运行报告结果等;(2)能根据系统的实时状态结果,选择合适的语音词汇或语言段随时组合输出;(3)写入后不易遗失,修改方便。(4)工作过程--语音经A/D转换后存入内存中,放音时取出再经D/A转换输出。2系统硬件设计本系统以芯片ZY1420A为接口芯片,STC89C51为主控芯片实现语音录放系统的硬件组成,利用软件完成对系统的录音放音过程[1]。2.2系统原理图原理图包含电源、STC89C51单片机、ZY1420A、喇叭、麦克风等电路。ZY1420A使用时只需按住录音按键REC,使之保持低电平,电路自动进入录音状态且录音指示LED亮,若REC变高或录音存储器录满时,电路退出录音状态进入准备状态。轻按PLAYE,引脚为低电平脉冲电路进入触发放音状态直到放音结束。按下PLAYL,使之保持低电平,系统为放音状态直到PLAYL变高或放音结束。电路重新进入准备状态注意REC的优先级大于PALYE和PLAYL[1][4]。2.3本系统中关键部分硬件说明2.3.1主控芯片STC89C51使用说明在STC89C51单片机中,有些允许用高电压编程方式编程。有些允许用低电压编程方式编程。各自芯片面上的型号和特征字节的内容不同。STC89C51的程序存储器阵列是采用字节写入方式编程的,即每次写入一个字节。要对片内的EEPROM程序存储器写入任何一个非空字节,都必须用片擦除方式将整个存储器的内容清除。对Flash存储器编程时,STC89C51编程的步骤如下[1][2]:(1)在地址线上要输入编程单元的地址。(2)在数据线要上输入写入的数据字节。(3)激活相应的控制信号。(4)在采用高电压编程方式时,将EA/VPP端的电压加到12V。(5)每对Flash存储阵列写入一个字节或每写入一个程序加一位,加一个ALE/PROG编程脉冲。(6)改变编程单元的地址和要写入的数据,重复上面的操作,直到全部文件编程完毕。(7)每个字节写入周期自动定时的,一般不大于1.5ms。2.3.2语音芯片ZY1420的说明ZY1420A内部使用ISD1420作为主控芯片,且具备ISD1420的全部优良性能,如大容量的EEPROM存储器,消噪的话筒放大器,自动增益调节AGC电路,专用语音滤波电路,高稳定性的时钟震荡电路和语音处理电路。除此以外,ZY1420A还对ISD1420的标准外围电路作了优化并全部集成于模块内部。ZY1420A在系统中的应用方法:(1)复杂操作方法:根据A6A7的电平不同,电路可以进入两种不同的工作模式:地址模式和操作模式。如果A7A6至少有一位为低电平,则电路认为A0-A7全部为地址位,A0-A7的数值将作为本次录音或放音操作的起始地址。A0-A7全部为纯输入引脚,不会象操作模式中A0-A7还可能输出内部地址信息。输入的A0-A7的信息在PALYE,PLAYL或REC的下降沿被电路锁存到内部使用。(2)地址模式:当A7A6至少有一位为0时,器件进入地址模式。在地址模式中,A0-A7由低位向高位排列,每位地址代表125毫秒的寻址,160个地址覆盖20秒的语音范围(160*0.125s=20s)。(3)操作模式:当A7A6全部为1时,器件进入操作模式。ZY1420A内部具备有多种操作模式,并能以最少的组件实现较多的功能,下面将详细描述。操作模式的选择使用地址管脚来实现,但实际的地址在ZY1420A的有效地址外部。当地址的最高两位A7A6为高电平时,其余的地址位将成为状态标志位而不再是地址位。在使用操作模式时必须注意两点。第一,所有的操作开始于地址0,也就是ZY1420A。以后的操作根据操作模式的不同可以从其它地址开始。另外,在操作模式中当A4=1,从录音变换到放音而不是从放音到录音。第二,操作模式的执行必须是A7A6为高电平,在PALYL,PLAYE或REC变为低电平时开始执行。2.4语音录放系统操作说明对于语音芯片的使用,用户一般是采用一段录音放音的方法,这样ZY1420A能为用户提供最长20秒的录音和放音时间。当开始录音时,RECLED脚变为低电平,可以下拉电流驱动一个LED显示。ZY1420内部已经设计了一个LED位置。接通电源后,电路自动进入节电准备状态。(1)录音:按住录音按键(REC保持低电平),电路进入录音状态(录音指示LED亮),当REC变高或录音内存录满时,电路退出录音状态进入准备状态。REC的优先级大于PALYE和PLAYL。(2)放音:放音具有触发放音和电平放音两种方式,触发放音:按一次PLAYE按键,这样给PLAYE脚一个低电平脉冲,电路进入放音状态,直到放音结束。电平放音:按下PLAYL按键(PLAYL脚保持为低电平),电路进入放音状态,直到PLAYL变高或放音结束,电路重新进入准备状态。3系统的软件设计3.1编程思路ZY1420A主要有三个功能录音、电平控制放音、脉冲触发放音,那我们可以分别编写三个子程序[3]。3.1.1录音子程序控制录音主要有两个数据:录音的开始地址和录音的时间,把这两个数据都控制了就可以控制录音时把声音录到那几段里头。注意REC信号将被延迟50ms防止开关抖动引起重复触发。3.1.2电平控制放音子程序电平控制放音中开始地址和播放时间也是必不可少的只要控制了这两个参数才可以确定播出内容。不过需要注意的是播放的时候总是从一段的开头开始播放的,当需要分段播放控制时,每一个内容的开头必须从一个小段的开头开始。3.1.3脉冲触发放音子程序与电平放音子程序基本相同。3.2程序流程图如图3所示。3.3程序清单本系统的全部程序暂未列出,有需要可以联系。4结束语本系统在完成硬件和软件设计后进行了制板、调试和测试。经过测试,语音录放系统可以进行最长20秒的录放音或分段录放音。系统中程序的设计采用C语言[3][5],通过利用PC机及keil3集成开发环境,完成了软件的调试。根据应用的需求,则可对ZY1420进行扩展级联,满足实际应用。张战鸣尹耕钦