公交车语音报站器的设计.docx
- 文档编号:3559266
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:24
- 大小:90.72KB
公交车语音报站器的设计.docx
《公交车语音报站器的设计.docx》由会员分享,可在线阅读,更多相关《公交车语音报站器的设计.docx(24页珍藏版)》请在冰点文库上搜索。
公交车语音报站器的设计
院(系):
电子与信息工程学院教研室:
通信工程教研室
学号
学生姓名
专业班级
课程设计(论文)题目
公交车语音报站器的设计
课程设计(论文)任务
主要技术指标及要求:
1、设计一个单片机控制的公交车语音报站器;
2、公共汽车车到达A站时,司机按键,扬声器发出“A站到了,请从后门下车”的语音信号,当监测到汽车启动信号时,扬声器发出“车辆启动,请站稳扶好,下一站B站”的语音信号;
3、报站点可达16个;
设计内容:
1、分析设计要求,明确性能指标;查阅资料、设计方案分析对比。
2、论证并确定合理的总体设计方案,绘制总体结构框图,分析工作原理。
3、完成各单元具体电路的设计:
单片机最小系统、语音电路、显示等电路。
包括元器件选择、工作原理分析。
4、写出程序流程图及汇编源程序。
5、完成课程设计说明书。
指导教师评语及成绩
平时成绩(20%):
论文成绩(60%):
答辩成绩(20%):
成绩:
指导教师签字:
年月日
摘要
由于现在的公交车上大部分都采用投币的购票方式,不再设乘务员。
如何方便、准确地指示乘客到站的以成为当务之急。
虽然随着单片机的出现,早有设计出的语音自动报站器投入使用,但实践证明,只有语音的报站器并不能满足所有乘客的需要,比如在噪音比较大的场合或者聋哑人乘车时,就有可能因听不见语音报站而导致坐过站,为乘客带来不便。
因此,我们研制这个具有汉字显示功能和语音输出功能的报站器单片机系统,以满足这个需要。
本设计主要解决如何方便、准确地指示乘客到站的问题,具有模拟人声进行报站和预报站,对所报站数和站名进行文字显示和站名语音信息录放及站名选择控制等功能。
系统包括微控制器模块,语音录放电路,站数、站名显示模组,键盘接口电路,复位电路及电源等。
系统使用51单片机来控制语音合成芯片和液晶显示模组。
语音合成芯片ISD4004,采用模拟数据半导体存储器直接存储的专利技术,即将模拟语音数据直接写入单个存储单元,不需经过A/D、D/A转换,因此能够较好地真实再现语音的自然效果,避免了一般固体语音电路因为量化和压缩造成的量化噪声和失真现象。
配合液晶屏显示,就使得该报站系统更加实用。
关键字:
单片机,语音提示,文字显示,公交报站
目录
摘要II
第1章设计方案论证1
1.1设计的应用意义1
1.2设计方案的选择2
1.3总体设计方案框图分析2
第2章硬件电路设计3
2.1单元电路设计与原理分析3
第3章4
第4章程序设计7
3.1程序流程图7
3.2源程序清单8
第5章设计总结16
第6章参考文献17
附录1:
18
附录2:
19
第1章设计方案论证
1.1设计的应用意义
由于现在的公交车上大部分都采用投币的购票方式,不再设乘务员。
如何方便、准确地指示乘客到站的以成为当务之急。
虽然随着单片机的出现,早有设计出的语音自动报站器投入使用,但实践证明,只有语音的报站器并不能满足所有乘客的需要,比如在噪音比较大的场合或者聋哑人乘车时,就有可能因听不见语音报站而导致坐过站,为乘客带来不便。
因此,我们研制这个具有站点显示功能和语音输出功能的报站器单片机系统,以满足这个需要。
本系统使用AT89C51单片机作为CPU,由CPU来控制语音合成芯片ISD4004,使其工作在CPU控制模式下。
当系统进行语音再生时,由CPU控制语音合成电路中的语音芯片来读取存储器内部的语音信息,并合成语音信号,再通过语音输出电路,进行语音报站和提示。
语音是众多信息载体中具有最大信息容量的信号,具有很高的智能水平,人们在提高计算机系统智能化水平时,在人机对话方面就是寻求最好的语音信息交换手段。
人们对语音发声的物理机能有了深刻的理解,便希望使机器能够用语音报告有关信息,这种人机界面上的渴求,促进了语音合成技术的商品化的通用化。
语音合成芯片的问世,是数字技术发展的结晶。
人们只要利用大规模集成电路再配置少部分外围电路,如分力元件,就可以构成语音系统。
LR3683语音合成芯片,是Sharp公司推出的比新的语音合成集成电路,它包括波形编码系统,可定时抽取语音数据样本,以供系统作量化和编码之用。
LR3683语音合成芯片只是代表了一种语音合成芯片发展的形式。
由于语音合成按其使用目的和约束条件等可分为多种合成方式,语音合成的数字方法也因编码方法的多样性而且类型结构不一致。
因此,语音芯片的种类很多,规格很丰富。
世界有许多厂商研制开发语音芯片,我们就有了较多的选择余地。
如美国ISD(InformationStorageDevices)公司的ISD系列芯片采用直接模拟存储专利技术,把语音信号以原始的模拟形式直接存储在片内EEPROM存储器中,无需进行A/D转换和压缩处理等,从而减少了失真、大大提高了录放音质量,并具有抗断电、音质好、使用方便、可反复录放、无需专用的语音开发工具、能随意更改内容和耗电省等优点,很适合于现场录放音系统。
本系统就是采用ISD4004语音合成芯片。
1.2设计方案的选择
本设计有很多方案可供选择,在本设计中选择了两种方案。
方案一:
采用七段数码管做为显示部分,依次显示站的编号,本设计需要三个按键作为控制,第一个按键用来控制站数点加一同时播放录音提示,第二个按键控制站点数复位,第三个按键控制单片机复位。
语音提示模块选用ISD4004系列语音芯片,外接话筒和音箱组成语音录制和播放电路。
其中,音箱由音频功率放大器LM386驱动。
方案二:
采用LCD1602液晶显示器显示站点信息。
采用矩阵键盘控制站点信息显示和语音播放。
语音部分采用ISD4004系列语音芯片,外接话筒和音箱组成语音录制和播放电路。
其中,音箱由音频功率放大器LM386驱动。
综合比较,由于方案一显示部分不能有效显示站点信息只能显示出站数,不便于乘客掌握到站信息,因次,本实验采用方案二来设计。
因为方案二可以显示出站名,方便乘客出行。
1.3总体设计方案框图分析
总体方案框图如图1.1所示:
图1.1总体方案框图
如图1.1所示,核心部件是单片机,晶振用来提供机器周期,复位电路时用来复位单片机,使其回到初始状态,语音其实模块采用ISD4004,文字显示模块采用LCD1602来显示,键盘采用矩阵键盘。
第2章硬件电路设计
2
2.1单元电路设计与原理分析
第一部分为时钟部分,片内晶振电路输入线(XTAL1和XTAL2)用来外接石英晶振和微调电容,即用来连接8031片内OSC的定时反馈回路。
石英晶振起振后,能在XYAL2线上输入一个3V左右的正弦波,使得8031片内的OSC电路按与石英晶振相同的频率自激振荡。
为了使8031和外部存储器同步从而可靠工作,8031的访存时间必须大于所用外部存储器的最大存取时间。
Intel2764的读出时间为200~450ns,然而,从8031向外部存储器发出地址码和读写信号到从P0口选通读出数据或保存写入数据所需要的时间,至少需要两个时钟周期以上。
所以,我们选取振荡器频率为12MHz。
其电路如图2.1所示。
图2.1时钟电路
如图2.1所示,晶振与电容C
和C
构成时钟电路,给单片机的XTAL1与XTAL2提供时钟周期。
第二部分为复位电路,复位操作可以是单片机摆脱“锁死”和“飞跑”状态。
单片机复位口(RST)高电平时可以使8031处于复位(即初始化)工作状态。
通常,8031的复位有自动上电复位和人工按钮复位两种。
在单片机应用系统中,除单片机本身需要复位以外,外部扩展I/O接口电路等也需要复位。
因此,我们需要一个包括上电和按钮复位在内的系统同步复位电路。
按键与电容C和电阻R构成复位电路,在本设计中采用上电复位方式,当复位键按下达到2个机器周期以上,单片机复位,四个I/O口均为高电平。
在复位状态时单片机内部RAM的状态不受复位的影响。
复位电路电路图如图2.1所示。
图2.2复位电路
第三部分为键盘部分,本设计采用4*4的矩阵键盘作为键盘输入,电路如图2.3所示:
第3章
图2.3键盘电路
键盘分两大类:
编码键盘和非编码键盘,独立式按键属于非编码键盘,只简单地提供键盘的行列与矩阵,其他操作如键的识别,决定按键的读数等仅靠软件完成,故硬件较为简单,但占用CPU较多时间。
非编码键盘的键输入程序应完成的基本任务1.监测有无键按下;2.判断是哪个键按下;3.完成键处理任务。
矩阵式键盘适用于按键数量较多的场合,由行线和列线组成,按键位于行列的交叉点上。
节省I/O口。
行线通过上拉电阻接到+5V上。
无按键时,行线处于高电平状态,有键按下,行线电平状态将由与此行线相连的列线电平决定。
列线电平为低,则行线电平为低;列线电平为高,则行线电平为高。
第四部分为显示部分,本设计采用LCD1602作为显示器,该显示器为双行显示,显示到站信息。
第五部分为语音模块部分,该部分电路以LSD4004为语音核心模块,电路如图2.4所示。
图2.4语音模块
ISD4004系列语音芯片工作电压为+3V,单片录放时间8到16分钟,音质好,适用于移动电话及其他便携式电子产品中。
芯片采用CMOS技术,内含振荡器、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存储陈列。
芯片设计是基于所有操作必须由微控制器控制,操作命令可通过串行通信接口(SPI或Microwire)送入。
芯片采用多电平直接模拟量存储技术,每个采样值直接存储在片内闪烁存储器中,因此能够非常真实、自然地再现语音、音乐、音调和效果声,避免了一般固体录音电路因量化和压缩造成的量化噪声和金属声。
采样频率可以是4.0,5.3,6.4或8.0kHz,频率越低,录放时间越长,而音质则有所下降,片内信息存于闪烁存储器中,可在断电情况下保存一百年(典型值),可反复录音十万次。
操作规则如下:
(1)串行外设接口ISD4000系列语音芯片工作于SPI串行接口。
SPI协议是一个同步串行数据传输协议,设定微控制器的SPI移位寄存器在SCLK的下降沿将数据送至MISO引脚。
以ISD4004为例,协议的具体内容如下:
①所有串行数据传输开始于
下降沿。
②
在传输期间必须保持低电平,在两条指令之间则保持高电平。
③数据在时钟上升沿移入,在下降沿移出。
④
变低,输入指令和地址后,ISD4004才能开始录/放操作。
⑤指令格式是(八位控制码)加(十六位地址码)。
⑥ISD4004的任何操作如果遇到EOM或OVF,则产生一个中断,该中断状态在下一个SPI周期开始时被清除。
⑦使用“读”指令使中断状态位移出ISD4004的MISO引脚时,控制及地址数据也应同步从MOSI端移入。
因此,要注意移入的数据是否与器件当前进行的操作兼容。
当然,也允许在一个SPI周期里,同时执行读状态和开始新的操作(即新移入的数据与器件当前的操作可以不兼容)。
⑧所有操作在运行位(RUN)置1时开始,置0时结束。
⑨所有指令都在
端上升沿开始执行。
(2)信息快进用户不必知道信息的确切地址就能快进跳过一条信息。
信息快进只用于放音模式,放音速度是正常的1600倍,遇到EOM后停止,然后内部地址计数器1,指向下一条信息的开始处。
(3)上电顺序器件延时TPUD(8KHz采样时,约为25ms)后才能开始操作。
因此,用户发完上电指令后,必须等待TPUD,才能发出下一条操作指令。
第4章程序设计
3
3.1程序流程图
本设计采用C语言编写程序。
其流程图如图3.1所示。
无
有
图3.1程序流程图
3.2源程序清单
#include
#include
#include
sbitRS=P3^5;
sbitRW=P3^6;
sbitE=P3^7;
sbitBF=P2^7;
#defineucharunsignedchar
#defineuintunsignedint
ucharkey1,key;
unsignedcharcodekey_code[]={
0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
unsignedcharcodestring[]={"Thisstation:
"};
unsignedcharcodestring1[]={"Nextstation:
"};
unsignedcharcodestring3[]={"ABCDEFGHIJKLMNOP"};
/*****************************************************
函数功能:
延时1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
***************************************************/
voiddelay1ms()
{
unsignedchari,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++);
}
/*****************************************************
函数功能:
延时若干毫秒
入口参数:
n
***************************************************/
voiddelay(unsignedcharn)
{
unsignedchari;
for(i=0;i delay1ms(); } /***************************************************** 函数功能: 判断液晶模块的忙碌状态 返回值: result。 result=1,忙碌;result=0,不忙 ***************************************************/ unsignedcharBusyTest(void) { bitresult; RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1;//E=1,才允许读写 _nop_();//空操作 _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 result=BF;//将忙碌标志电平赋给result E=0;//将E恢复低电平 returnresult; } /***************************************************** 函数功能: 将模式设置指令或显示地址写入液晶模块 入口参数: dictate ***************************************************/ voiddelayms(uintms) { uchart; while(ms--) { for(t=0;t<120;t++); } } voidWriteInstruction(unsignedchardictate) { while(BusyTest()==1);//如果忙就等待 RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲, //就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_();//空操作两个机器周期,给硬件反应时间 P2=dictate;//将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令 } /***************************************************** 函数功能: 指定字符显示的实际地址 入口参数: x ***************************************************/ voidWriteAddress(unsignedcharx) { WriteInstruction(x|0x80);//显示位置的确定方法规定为"80H+地址码x" } /***************************************************** 函数功能: 将数据(字符的标准ASCII码)写入液晶模块 入口参数: y(为字符常量) ***************************************************/ voidWriteData(unsignedcharx) { while(BusyTest()==1); RS=1;//RS为高电平,RW为低电平时,可以写入数据 RW=0; E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲, //就是让E从0到1发生正跳变,所以应先置"0" P2=x;//将数据送入P0口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平 //当E由高电平跳变成低电平时,液晶模块开始执行命令 } /***************************************************** 函数功能: 对LCD的显示模式进行初始化设置 ***************************************************/ voidLcdInitiate(void) { delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间 WriteInstruction(0x38);//显示模式设置: 16×2显示,5×7点阵,8位数据接口 delay(5);//延时5ms ,给硬件一点反应时间 WriteInstruction(0x38); delay(5); WriteInstruction(0x38);//连续三次,确保初始化成功 delay(5); WriteInstruction(0x0c);//显示模式设置: 显示开,无光标,光标不闪烁 delay(5); WriteInstruction(0x06);//显示模式设置: 光标右移,字符不移 delay(5); WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除 delay(5); } voiddelay0(ucharx) { uchari; while(x--) { for(i=0;i<13;i++){;} } } ucharkeyscan() { ucharscan1,scan2,keycode,j; P1=0xf0; scan1=P1; if((scan1&0xf0)! =0xf0)//判键是否按下 { delayms(30);//延时30ms scan1=P1; if((scan1&0xf0)! =0xf0)//二次判键是否按下 { P1=0x0f; scan2=P1; keycode=scan1|scan2;//组合成键编码 for(j=0;j<=15;j++) { if(keycode==key_code[j])//查表得键值 { key=j; return(key); } } } } elseP1=0xff; return(key); } /********************************************************** 判键是否按下子函数 **********************************************************/ voidkeydown() { P1=0xf0; if(P1! =0xf0) { key=keyscan(); key1=key+1; } } /***************************************************** 函数功能: 主函数 ***************************************************/ voidmain(void) { unsignedcharl=8,i;//定义变量i指向字符串数组元素 LcdInitiate();//调用LCD初始化函数 delay(10);//延时10ms,给硬件一点反应时间 WriteAddress(0x00);//从第1行第3列开始显示 i=0;//指向字符数组的第1个元素 while(string[i]! ='\0') { WriteData(string[i]); i++;//指向下字符数组一个元素 } WriteAddress(0x40);//从第1行第3列开始显示 i=0;//指向字符数组的第1个元素 while(string1[i]! ='\0') { WriteData(string1[i]); i++;//指向下字符数组一个元素 } while (1)//无限循环 { keydown(); WriteAddress(0x0f); WriteData(string3[key]); WriteAddress(0x4f); WriteData(string3[key+1]); } } 第5章设计总结 目前,在公交车报站方面,由传统的人工报站,逐渐改变为使用微电脑控制的语音文字报站系统。 本文设计了实现公共汽车的语音自动报站以及汉字提示的功能的系统。 具体将整个系统分为几个大的模块,对每个模块进行详细的设计,系统基本上完成设计要求。 最终所用的这些芯片均是常见的并且价格比较便宜的,其制作过程也是不很复杂的,整个系统高科技含量大,并很实用,所以有很好的发展前景。 在设计制作过程中利用普通的元件,在短期内便可以开发出来,所以很适合大批量生产。 由于时间、条件等各方面的限制,系统本身还是有一些不尽完美之处。 键盘和显示比较简单,采用线选式键盘,键数较少,使一些功能受到限制,设计中还可以增加日期时间及文明宣传语等功能。 这些方面,还是希望在以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 公交车 语音 报站 设计