图11 统软件流程图
图12 选音播放子程序流程图
对于ISD4004而言,由于两次要放音的内容在存储器里不一定是相邻的两段,所以涉及到对语音芯片的分段提取语音的控制,而不只是简单的放音操作。对于这种情况,如果在知道每一语音段首地址的情况下,可以直接采用“发送该段首地址并从当前地址开始放音”的命令来实现,由于在实际录音过程中,录音设备不一定提供每一语音段的物理地址(一般只是显示对应的段数),所以在提取楼层对应的语音段的问题上,就必须采取另外的方法,在这里我们是采取控制语音芯片连续快进的方式来实现的。因此,选音播放子程序包括下列步骤:
(1) 根据电梯最近目标楼层设置快进次数计数器;
(2) 从首地址处开始快进一次(本系统一楼不要求语音服务);
(3) 向语音芯片发送从当前语音段地址开始快进的命令;
(4) 检测是否到达电梯最近目标楼层的语音段地址,若否则返回步骤(3);
(5) 若步骤(4)中的检测结果为是,则播放语音。
本文重点给出选音播放子程序如下:
FANGYIN:MOV 34H,33H
;设置33H为计数器并将当前播音楼层作一备份
SETMC:CLR SS
MOV R1,#0E8H
;发送从首地址开始快进命令
MOV A, #00H
ACALL SEND
MOV A, #00H
ACALL SEND
MOV A, R1
ACALL SEND
SETB SS
SETMC1: CLR SS
MOV R1, #0F8H
;发送从当前地址开始快进命令
MOV A, R1
ACALL SEND
ACALL DELAY125U
;调用12.5微秒延时子程序
SETB SS
ACALL DELAY125U
JB INT,$
;一段快进结束则接收到低电平信号
DJNZ 33H,SETMC1
;判断快进次数是否达到要求, 是则往下执行
ACALL PLAY ;调用放音子程序
MOV 33H,34H
;保存播音楼层为当前楼层
RET
PLAY:CLR SS
MOV R1,#0F0H
;发送从当前地址开始放音命令
MOV A, R1
ACALL SEND
;调用发送子程序进行发送
SETB SS
JB INT, $
;放音结束则接收到低电平信号
RET
由于篇幅所限,相关子程序并未全部给出。
5 结束语
本文所介绍的电梯语音系统已在某大医院门诊部大楼的多台电梯中投入使用,整个系统工作稳定,功耗小,音量可调,输出的语音清晰,音色优美,实现了电梯语音服务的智能化和自动化,用户评价良好。