基于AT89C51的语音数字电压表设计
一、概述
本文引用地址:http://www.amcfsurvey.com/article/235603.htm在众多测量仪表中,数字电压表应该是比较先进的一类表,工作人员在测量电路电压时,其测量值能通过液晶显示器直观地读出而不需工作人员再认真仔细地察看测量档次,换算及估计测量值,但在观察使用过程中, 仍可发现工作人员在测量过程中因要注意测量点而无法顾及显示器的现象。而本文介绍的语音电压表则能较好地解决上述问题, 它在工作人员测量电压时, 能用标准的汉语读出测量值,这样就大大方便了工作人员操作过程。
二、设计方案
语音电压表的组成框图见图1.
图1语音电压表的组成框图
它是以AT89C51 单片机为核心, 由ICL7126 31/2 位数字电压表、语音电路、功放电路、电源等组成。
设计中, 先将语音电压表需用的"0、1、2?? 十、百、点、伏、负、超量程"等十几个音节的特征语音信号通过语音电路录音,生成十几段数据语音块,以此作为读出电压值的音源。输入的模拟信号经过数字表中A/D 转换进入单片机, 由单片机进行分析判断,找出语音块中对应的音源, 送到功放电路进行放大输出, 读出电压值, 从而实现智能测量。
三、硬件设计
(一) 单片机
单片机采用AT8951 型, 它是一种带4K 字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS8 位微处理器, 它与工业标准的MCS- 51 指令和输出管脚相兼容, 由于将多功能CPU 和闪烁存储器组合在单个芯片中, 因而AT89C51 是一种高效微控制器, 为很多嵌入控制系统所采用。
(二) A/D 转换电路
A/D 转换电路由两部分组成。
1.量程转换电路是用7126 组装构成的四量程数字电压表实用电路。四个量程分别是:200mV、2V、20V、200V.电压量程的选择是通过双刀五掷转换开关S1 来控制的, 当S1 打到哪一量程端时,如200V 端,则该数字电压表的测量范围就确定了为0- 200V.
2.A/D 电路用ICL7126 芯片作为A/D 电路的核心元件。被测电压输入后,经ICL7126 内部电路进行数模转换、译码驱动后,送至液晶显示器显示被测电压的电压值。
(三) 语音电路
语音电路采用ISD1420 芯片,其最大特点是:采用了直接模拟量存贮技术DAST,完成语音的录入,存贮以及分段调出,而无需像其他语音电路那样,要经过A/D、D/A 转换,数字压缩和语音合成等复杂的数字量信息处理及变换环节,因而可以较好地保留模拟量中的有效成分减少失真, 提高录放音质量。它使用方便,无需专用语音开发系统,由麦克风录入存贮; 可随意改写删除; 有多种信息取址方式供用户选择; 分段灵活,抗干扰能力强。当89S51 判断出某个数字时,只要把该数字对应的地址码送到单片机的P1 口, 产生一个中断,于是该数字的语音便放了出来。
四、软件设计
(一) 主程序
初始化工作主要是对累加器A 和P1 口清零, 然后等待报数启动键SB 按下。采样程序是将显示驱动信号变换为段选数据锁存起来,并读入片内RAM.由于被测值的变化,在采样瞬间可能因显示数字的跳变"空显"而造成报数出错,在程序中防止空显出错的方法是,只有个位、十位和百位全有显示(非00H)或全无显示(均为00H)才确认正常,否则返回重新采样。根据使用要求,每报完一遍被测值应间隔2S,以便于改换下一个被测点并使读数稳定。在2S 延时内,有重报请求就再调用一次放音子程序,否则转向重新采样。
(二) 语言编辑子程序
这一程序是对段选数据和小数点进行判断后,散转到各个编辑处理程序,再按照"智能化"报数的要求,将所要发出的语音地址码送P1 口,通过ISD1420 发音。
汉语报数的"智能化"是指对所显示的数值能够自动插入或删去数位语音,以适合人们的读数习惯。例如:对显示值220, 应报为"二、百、二、十".对显示值"10.05"应报为"十、点、零、五".所以在每个编辑程序中,是通过对各位数据的逐次判"0"来确定是否要插入或删去其数位语言,并编好发音顺序。部分程序如下:
功能: 发音子程序
TALK:MOVR7, ARL A
MOVDPTR, #FYTIME
MOVC A, @A+DPTR
MOVR6, AINC R6
MOVA, R7RL ANC AMOVC, @A+DPTR
MOVR5, AINC R5
MOVA, R7MOVDPTR, #FYADRR
MOVC A, @A+DPTR
MOVR7, ALCALL PLAY
MOVR7, #30
WAIT: LCALL DELAY1ms
DJNZ R7,WAIT RET
(三) 放音子程序PLAY
在进入该程序后再调用延时程序DELAY1 , 当所有语音放完后,通过判断发出停止信号,返回主程序。部分程序如下:
入口; R7( 开始地址) , R6( H) R5( L) 为放音时间
PLAY;MOVP1, R7 CLR PLL
PLAY1: LCALL DELAY1ms
JNB RECLED,PLAY2
DJNZ R5, PLAY1
DJNZ R6, PLAY1
PLAY2:SETB PLLRET
(四) 延时程序
延时程序是利用循环来编写的, 延时1ms.
入口: R4 功能: 延时1ms
DELAY1ms:MOVR4, #0FAH
NOPNOP
DJNZ R4,DELAY1ms
五、结束语
本设计方案关键部分在语音芯片, 它的质量决定了发音效果,所以要选用优音质、高智能的语音芯片。
评论