DIY编程器网

标题: 基于SLH89F5162单片机的公交车语音报站系统 [打印本页]

作者: admin    时间: 2014-10-10 07:17
标题: 基于SLH89F5162单片机的公交车语音报站系统
一、项目设计背景及概述
       
        随着城市化的进展和经济的快速发展,城市“乘车难”、“行车难”的局面在加剧,很多城市建议人们出门乘坐公交车。但是在天气恶劣或视线不好的时候,乘客乘坐公交车的时候往往无法清楚的分辨到达的站牌,导致没有正常下车或错误下车,给出行带来不必要的麻烦。传统的报站方式是由售票人员进行人工报站,这个售票人员多的工作不仅需要负责售票工作,还要准确的为乘客报站,作为一个地区的公交车站行业,有一定的地方特色,他们报站时多采用地方口音,作为一个外地人有时候很难听懂报站,从而引起很多麻烦。
       
        本系统设计的公交车语音报站系统,利用科大讯飞的语音软件对语音进行词组和句子划分,合成wav文件,然后装载到WT588D语音芯片里面,然后通过深联华SLH89F5162单片机进行控制语音播放相关信息。系统通过四个按键进行司机对起点站、上一站、下一站、终点站声音播放的选择,通过一个128*64的液晶屏显示当前信息,利用LM386功放芯片将声音信号放大,驱动喇叭进行声音的输出。本系统结构简单、性能优良、价格低廉,十分适合大面积推广使用。
       
        二、项目设计原理
       
        1、原理概述
       
        本系统的原理是利用深联华SLH89F5162单片机,使用单线传输协议控制WT588D进行语音播报,系统通过四个按键进行司机对起点站、上一站、下一站、终点站声音播放的选择,以播放对应的声音,通过一个128*64的液晶屏显示当前信息,利用LM386功放芯片将声音信号放大,驱动喇叭进行声音的输出。
       
        2、硬件设计原理
       
        2.1 SLH89F5162单片机小系统设计
       
       
        图2.1.1 SLH89F5162管脚图
       
        SLH89F5162是一种高边高效率8051兼容单片机,具有很好的加密性能和高速的处理速度,本系统使用SLH89F5162单片机作为处理芯片,具有很好的实验效果。SLH89F5162管脚图如图2.1.1所示。
       
        SLH89F5162单片机小系统设计如图2.1.2所示,系统通过四个按键进行司机对起点站、上一站、下一站、终点站声音播放的选择,系统设计了串口下载端口和系统复位按键,电源由一个手机充电器提供标准的5V输入。
       
       
        图2.1.2 SLH89F5162单片机小系统原理图
       
        2.2 WT588D语音模块电路设计
       
        WT588D是广州唯创公司生产的一款功能强大的可重复擦除和烧写的语音芯片。WT588D让语音芯片不再为控制方式而寻找合适的外围单片机电路,高度集成的单片机技术足于取代复杂的外围控制电路。配套WT-APP上位机操作软件可随意更换WT588D语音单片机芯片的任何一种控制模式,把信息下载到SPI-Flash上即可。软件操作方式简洁易懂,撮合了语音组合技术,大大减少了语音编辑的时间。完全支持在线下载,即便是WT588D通电的情况下,一样可以通过下载器给关联的SPI-Flash下载信息,WT588D电路复位一下,就能更新到刚下载进来的控制模式。其管脚图如图2.2.1所示。
       
       
        图2.2.1 WT588D的管脚图
       
        WT588D语音芯片的特点如下:
       
        支持插入静音模式,插入静音不占用SPI-Flash内存的容量,一个地址位可插入10ms~25min的静音;
       
        MP3控制模式下,完全迎合市场上MP3的播放/暂停、停止、上一曲、下一曲、音量+、音量-等功能;
       
        按键控制模式下触发方式灵活,可随意设置任意按键为脉冲可重复触发、脉冲不可重复触发、无效按键、电平保持不循环、电平保持可循环、非电平保持可循环、单键向前不循环、单键向后不循环、单键向前可循环、单键向后可循环、音量+、音量-、播放/暂停、停止、播放/停止等15种触发方式,最多可控制10个按键触发输出;
       
        3×8按键组合控制模式下能以脉冲可重复触发的方式触发24个地址位语音,所触发地址位语音可在0~219之间设置;
       
        并口控制模式最多可用8个I/O口进行控制;
       
        一线串口控制模式可通过发码端控制语音播放、停止、循环播放和音量大小,或者直接触发0~219地址位的任意语音,发码速度600us~2000us;
       
        三线串口控制模式和三线串口控制I/O口扩展输出模式之间可通过发码切换,三线串口控制模式下,能控制语音播放、停止、循环播放和音量大小,或者直接触发0~219地址位的任意语音,发码速度40us~4000us可调,三线串口控制I/O口扩展输出可以扩展输出8位,在两种模式下切换,能让上一个模式的最后一种状态保持着进入下一个模式。
       
        PWM和DAC输出方式,PWM输出可直接推动0.5W/8Ω的扬声器,DAC输出外接功放,音质好。应用范围广,几乎可以涉及到所有的语音场所,如报站器、报警器、提醒器、闹钟、学习机、智能家电、治疗仪、电子玩具、电讯、倒车雷达以及各种自动控制装置等场所,工艺上达到工业应用的要求。
       
        WT588D的电路设计如图2.2.2所示。单片机通过单线连接模式和WT588D进行通信,WT588D的语音信号通过DAC输出方式输出。
       
       
        图2.2.2 WT588D语音模块的电路图
        2.3 LM386功放电路设计
       
        LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为20.但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至200.其管脚图如图2.3.1所示。
       
       
        图2.3.1 LM386芯片的引脚图
       
        本系统用LM386构成了声音信号放大器,将WT588D输出的DAC信号进行放大输出,驱动喇叭发出声音,电路设计如图2.3.2所示,通过调节R3的10K的电阻可以调节放大音量的大小。
       
       
        图2.3.2 LM386构成的放大器电路图
       
        2.4液晶显示电路设计
       
        本系统采用一块128*64的LCD液晶屏作为信息的输出界面,配合语音信息,一起方便司机师傅进行调试和选择,LCD液晶屏的实物图如图2.4.1所示。液晶屏的驱动电路采用官方的驱动电路,利用单片机来控制液晶屏的显示和刷新,液晶屏显示电路设计图如图2.4.2所示,可以通过调节R4的10K电阻调节液晶屏显示的对比度。
       
       
        图2.4.1 LCD液晶屏的实物图
       
       
        图2.4.1 LCD液晶屏的显示驱动电路
        3、软件设计原理
       
        本系统的软件设计分为两部分,WT588D的语音库下载和SLH89F5162单片机程序下载。
       
        3.1 WT588D的语音库下载程序
       
        首先利用科大讯飞的语音软件《文语通》进行语音合成,合成需要的站台信息和提示声音,利用词语分组和句子划分,让语音通顺流畅,最后生成wav文件,如图3.1.1所示。然后利用WT588D的处理软件WT588D VoiceChip V-B进行语音文件的编译处理,如图3.1.2所示,最后下载到WT588D里面。
       
       
        图3.1.1文语通的CSSML Editor语音生成界面
       
       
        图3.1.2 WT588D VoiceChip V-B语音编译与下载界面
       
        3.2单片机的SLH89F5162程序设计
       
        单片机的程序是用KEIL4编制的,主要是按键的识别、液晶屏的显示、语音芯片WT588D的单线通信程序三部分。主要程序如下,详情见附件。
       
        void main(void)
       
        {
       
        uint block_n;
       
        uint updata;
       
        uint key_flag;
       
        uchar flag_hold;
       
        initinal(); //调用LCD字库初始化程序
       
        delay(50); //大于100uS的延时程序
       
        flag_key=0;
       
        flag_hold=0;
       
        beep1(2-1);
       
        block_n=2;
       
        updata=1;
       
        Display_hanzi(0,0,“公交报站系统”,8);
       
        Display_hanzi(0,2,“本站:”,3);
       
        Display_hanzi(0,1,“上站:”,3);
       
        Display_hanzi(0,3,“下站:”,3);
       
        Display_hanzi(3,2,Station[block_n],5);
       
        Display_hanzi(3,1,Station[block_n-1],5);//上一站
       
        Display_hanzi(3,3,Station[block_n+1],5);//下一站
       
        Display_hanzi(0,1,“本站:”,3);
       
        Display_hanzi(0,2,“上站:”,3);
       
        Display_hanzi(0,3,“下站:”,3);
       
        while(1)
       
        {
       
        delay(200);
       
        if(K1==0
       
        key_flag=0;
       
        updata=1;
       
        block_n=1;
       
        beep1(block_n-1);
       
        }
       
        else if(K2==0
       
        key_flag=0;
       
        updata=1;
       
        block_n=block_n+1;
       
        if(block_n》10)
       
        block_n=10;
       
        beep1(block_n-1);
       
        }
       
        else if(K3==0
       
        key_flag=0;
       
        updata=1;
       
        block_n=block_n-1;
       
        if(block_n《1)
       
        block_n=1;
       
        beep1(block_n-1);
       
        }
       
        else if(K4==0
       
        key_flag=0;
       
        updata=1;
       
        block_n=10;
       
        beep1(block_n-1);
       
        }
       
        if(K1!=0
       
        {
       
        key_flag=1; ///标志,当按键按下,动作一下,按键松开后才能再次按下响应,防止连续动作
       
        }
       
        if(updata==1){
       
        updata=0;
       
        if(block_n==1){
       
        Display_hanzi(3,1,Station[block_n],5);
       
        Display_hanzi(3,2,Station[block_n],5);//上一站
       
        Display_hanzi(3,3,Station[block_n+1],5);//下一站
       
        }else if(block_n==10){
       
        Display_hanzi(3,1,Station[block_n],5);
       
        Display_hanzi(3,2,Station[block_n-1],5);//上一站
       
        Display_hanzi(3,3,Station[block_n],5);//下一站
       
        }else{
       
        Display_hanzi(3,1,Station[block_n],5);
       
        Display_hanzi(3,2,Station[block_n-1],5);//上一站
       
        Display_hanzi(3,3,Station[block_n+1],5);//下一站
       
        }}}}
        三、项目设计框图
       
        1、硬件设计框图
       
       
       
        2、软件设计框图
       
       
       
        四、测试结果
       
       
        系统的PCB板实物图
       
       
        系统调试好的实物图
       
        经过仔细认真的焊接和调试,最终完成了系统的实物系统,经过调试,系统稳定可靠。性能指标如下:
       
        1、系统功率小于5W.
       
        2、能够通过按键操作,进行起始站、上一站、下一站、终点站的语音报警和液晶屏显示,当按键按下时,液晶屏显示相应的信息,语音输出响应的信息。
       
        3、语音的声音输出清晰,流畅,普通话标准,声音最大能够输出60分贝。
       
        4、显示屏采用128*64的汉字显示屏,能够显示字母、数字、汉字。




欢迎光临 DIY编程器网 (http://diybcq.com./) Powered by Discuz! X3.2