模拟公交车报站系统设计毕业作品.docx
《模拟公交车报站系统设计毕业作品.docx》由会员分享,可在线阅读,更多相关《模拟公交车报站系统设计毕业作品.docx(25页珍藏版)》请在冰豆网上搜索。
![模拟公交车报站系统设计毕业作品.docx](https://file1.bdocx.com/fileroot1/2023-5/17/3b0cc655-27ab-4f1b-95d2-02cf38400b21/3b0cc655-27ab-4f1b-95d2-02cf38400b211.gif)
模拟公交车报站系统设计毕业作品
模拟公交车报站系统设计
摘要:
本文采用SPCE061A单片机设计了一款公交车播报系统,系统硬件由61单片机控制电路、键盘电路、FLASH4096存储电路和发声电路构成;软件系统采用C语言编程,使用unSPIDE开发环境对软件编译调试,通过软硬联调实现了公交车播报功能。
关键词:
SPCE061A单片机;存储;语音
TheDesignofBusStopsSimulationSystem
Abstract:
Inthispaper,Abroadcastbussystemisdesigned,thesystemhardwareiscomposedof61singlechipcontrolcircuit,thekeyboardcircuit,FLASH4096memorycircuitandthevoicecircuits;softwaresystemusingCprogramminglanguage,theuseofunSPIDEcompilerdevelopmentenvironmentforsoftwaredebugging,bysoftwareandhardwarejointdebuggingtoachievethebusbroadcastfunction.
Keywords:
SPCE061A;Memory;Voice
1绪论
1.1设计的背景和设计的意义
设计的背景:
随着社会的发展,城市的规模不断加大,人们的生活步伐的不断加快,公共交通工具也得到了极快的发展。
从最早的蒸汽式公共汽车到电动汽车,再到现在天然气的汽车和混合动力汽车,自二十世纪初汽车工业的发展,汽车越发成为了人们出行不可必少的交通工具,每天在人们的生活中扮演着重要的角色。
当公共资源越来越被人重视的时候,自然越来越多的公共汽车在城市中出现,是人们的进步必然趋势,这也是人类快速发展的反应。
一个司机加上一个售票员就是最初的公交车上面就标准配置。
售票员的工作不只是光光需要负责售票的工作,还要承担准确的为乘客报站的工作。
但是,每一个地区都有其独特的风味,而作为代表一个地区的公交站行业,售票员多用带有地方口音的不正规普通话报站,一个外地人有时很难听的懂售票员的报站,从而引起很多的麻烦,带给乘客很多不满。
而且售票员一天下来的不断的报站,不停的招呼,很难准确的为乘客们报站,会带来一个各种的矛盾,使得乘客对公交服务不满意。
设计的意义:
一个高科技高速发展的时期,人们在生活中都感受到了科技给我们带来的方便。
现在的城市里的公交车都装上了语音报站系统,为市民提供了更加人性化的服务的同时,也提高人们的工作效率。
科学技术的日益发展和不断进步,大多数城市居民又对现有的死板的公交报站系统产生不满,公共交通事业的硬件设施跟不上居民日益增加的满足感。
公交车报站器在公交系统中占有举足轻重的地位,间接影响到公交车的服务质量。
因此现在就迫切需要有种技术,为我们的公交车配上更好的报站功能[1]。
正是由于科技的巨大进步给我们的生活带来了巨大的改变,人们的生活方式和工作模式都得到了巨大的改变,本文正是一个研究如何利用单片机来设计一种适合在公交车上用的语音报站系统.对此的研究我们不仅能够对公交车行业的发展起到一个非常重要的作用,还能够为我们的社会进步作出一定的贡献。
1.2设计总体方案及设计方案论证
方案一:
根据设计要求,选用MCS51单片机作为主控芯片,外部适当的扩展RAM组成最小系统。
在外围扩展K9F1208FLASH芯片作为存储语音资源的存储器,外扩专用语音处理芯片。
考虑到MCS51的I/O口资源,在外部使用专用8279芯片管理键盘、显示器件。
框图如下:
图1-1方案一系统框图
方案二:
根据设计要求,选用SPCE061A单片机作为主控芯片,由于这颗芯片是SOC使用较少的外围器件就能实现最小系统。
SPCE061A芯片集成A/D、D/A功能,配合语音函数库可以实现语音功能。
外围扩展键盘、显示器件,扩展SPR4096FLASH芯片存储语音资源。
框图如下:
图1-2方案二系统框图
方案二与方案一相比具有较大优势。
SPCE061A单片机是SOC的,只需使用较少的外围器件即可组成最小系统,大大简化了系统的复杂性,提高了稳定性。
使用凌阳的专用语音函数库使得语音的实现更加简单。
SPCE061A外扩SPR4096FLASH作为存储芯片,由于两者都具有SIO接口,使得程序设计大大简化。
SPR4096是4Mbit的NORFLASH,可以存储设计要求的语音资源,而三星的K9F1208是大容量的NANDFLASH,在存储空间上严重浪费,而且NANDFLASH在操作起来比较复杂,增加了开发难度。
通过方案一与方案二的论证比较,选择方案二进行开发。
本毕业设计的公交报站系统是以凌阳SPCE061A为核心,再外扩一个键盘显示模块来实现的,可以划分为键盘输入、SPR4096资源存储与语音播放这几个部分。
系统设置了17个站名,通过按键方式依次播报存储在存储器中的语音队列[2]。
SPCE061A单片机作为整个系统的核心控制,还能负责语音的输出。
SPR4096模快作为语音资源的存储介质,可擦出和烧录目标语音信息,并且SPR4096芯片可以存储512K(byte)的数据资源。
键盘操作模块作为人机互动控制播放音输出的开关与用户控制设备[4]。
2模拟公交车报站系统概述
2.1系统设计要求
利用SPCE061A单片机、SPR4096模块,键盘操作模块制作简易公交车报站器,要求具有下述功能:
1.使用本系统可以完整地播放一条公交线路的站名,包括上行线路与下行线路,以实现公交车的语音自动报站,即在进站、出站时候自动播报语音提示信息及服务用语。
2.使用本系统简单操作即可以进行语音播报,使报站器更人性化,。
2.2模块功能分析
系统主要包括SPCE061A精简开发板、SPR4096FLASH存储芯片、1×4键盘。
SPCE061A是整个设计的核心控制器件,负责语音资源的播报和键盘信息的采集输入。
键盘主要作用是人机交互的作用,报站器报站的控制开关,可以方便地利用4个按键实现不同的操作。
根据设计要求规划如图:
图2-1硬件系统框图
IOB0与SPR4096的SCK相接,IOB1与SPR4096的SDA相接;IOB8-11与1×4键盘相接,作为人机控制交互;DAC1与声音播放器上的DAC1相接,控制外放喇叭
各键盘的功能作用分配如下:
KEY1:
“上行”,用于跳站和对设置的内容进行递增,逐次播放上行各站提示语,每按一次按顺序播放一次;
KEY2:
“下行”,用于跳站和对设置的内容进行递减,逐次播放上行各站提示语,每按一次按顺序播放一次;
KEY3:
“喊话器”,用于喊话器的开关控制,播放警告用语“车辆拐弯,请注意安全”;
KEY4:
“喊话器”,用于喊话器的开关控制,播放提示语“车上有老弱病残孕乘客,请让座”;
3模拟公交车报站系统硬件电路设计
本方案直接使用SPCE061A单片机,利用SPCE061A的语音处理功能,以及其强大的处理能力,再配合SPR4096模块,扩大存储容量,很容就可以实现公交车报站器。
SPCE061A是凌阳科技研发生产的性价比很高的一款十六位单片机,使用它可以非常方便实现复杂的数据处理,包括基本的加减运算和复杂的乘积运算处理,该芯片拥有8路10位精度的ADC,其中一路为音频转换通道,另外7路可作为普通的AD转换通道。
另外单片机支持标准C语言,可以实现C语言与凌阳汇编语言的互相调用,并且,提供了语音录放的库函数,只要了解库函数的使用,就会很容易完成语音录放,这些都为软件开发提供了方便的条件[3]。
SPCE061A的内部模块主要分为:
CPU、存储模块、定时器/计数器、ADC、I/O接口、电源电路模块、音频电路。
其内核结构图如图所示:
图3-1内核结构图
SPCE061A性能简介:
16位μ’nSP微处理器
工作电压(CPU)VDD为3.0~3.6V,(I/O)VDDH为3.0~5.5V
CPU时钟:
0.32~49.152MHz
内置2K字SRAM
内置32K字FLASH
可编程音频处理
晶体振荡器
系统处于备用状态下(时钟处于停止状态),耗电仅为2uA/3.6V
2个16位可编程定时器/计数器(可自动预置初始计数值)
2个10位DAC(数/模转换)输出通道
32位通用可编程输入/输出通道
14个中断源可来自定时器A/B、时基、2个外部时钟源输入和键唤醒
具备触键唤醒的功能
使用凌阳音频编码SACM_S480可以播放压缩的语音资源
锁相环PLL振荡器提供系统时钟信号
32768Hz实时时钟
7通道10位电压模/数转换器(ADC)和单通道声音模/数转换器
声音模/数转换器输入通道内置麦克风放大器,并具有自动增益控制(AGC)功能
具备串行设备接口
具备低电压复位功能和低电压检测功能
内置在线仿真电路接口
具有WatchDog功能
3.1单片机最小系统设计
61单片机电路设计主要是完成SPCE061A单片机的最小系统设计[6],其包括SPCE061A芯片及其外围的基本模块,其中外围的基本模块有晶振输入模块(OSC)和复位电路(RESET)如图所示:
图3-2最小系统原理图
3.2键盘电路设计
键盘输入电路分析:
由于采用1×4键盘,键盘操作模块上的4个按键都有使用。
其输入电路如下图:
图3-3键盘输入电路图
使用按键功能时需检测获取按键信息的相应IO端口状态。
例如,将1×4键盘接口中的控制ROW1的IO口设置成低电平输出,然后获取按键信息COL1~COL8的IO端口设置成高电平输入口,当有键按下,相应的IO口将得到一个低电平,通过得到的低电平即可判断是哪个按键按下[7]。
3.3FLASH存储电路设计
SPR4096存储器是一个高性能的4M位FLASH存储,分为256个扇区,每个扇区为2K字节。
SPR4096还内置一个4K×8位的SRAM。
SPR4096串行接口的工作频率可达到5MHz。
SPR4096有两个电源输入端VDDI和VDDQ,VDDI是给内部FLASH和控制逻辑电路供电的,VDDQ是专门为I/O供电的。
VDDI供电电压为2.25V-2.75V,VDDQ供电电压为2.25-3.6V,通过SCK与SDA与外界相连[8]。
SPR4096存储器的工作电路如图:
图3-4SPR4096工作电路
3.4放音电路设计
SPCE061A单片机自身具有强大的语音处理功能,能够更方便更简单地满足用户的需要。
其内置的2路10位精度的DAC,只需要外接功放电路即可完成语音的播放。
SPCE061A单片机内置的SPY0030A芯片,功能相当于LM386,但是比LM386音质好,它可以工作在2.4~6.0V范围内,最大输出功率可达700mW(LM386必须工作在4V以上,而且功率只有100mW)。
SPY0030A音频功放电路如图所示:
图3-5放音电路
3.5电源电路设计
SPCE061A电压要求为3.3V,但I/O端口的电压可以选择3.3V也可以选择5V。
当直流3.3V电压为61单片机进行供电,此时整个板子只有3.3V电压,I/O端口电压此时只有一种选择。
而5V电压为61单片机进行供电时,5V直流电压直接通过SPY0029(相当于一般3.3V稳压器)稳压到3.3V,为61单片机提供5V和3.3V两种电平的电压。
可以用3节电池来也可以直接外接5V的直流稳压源供电,都是利用SPY0029把5V电压稳压到3.3V。
图3-6SPCE061A单片机电源模块
上图中的VDDH3为SPCE061A的I/O供电,VDD_P为PLL的锁相环电源,接SPCE061A的7脚;VDD是数字电源,接SPCE061A的15脚,VDD_A是模拟电源,接SPCE061A的36脚;VSS是数字地,接SPCE061A的38脚,AVSS1是模拟地,接SPCE061A的24脚,AVSS2是音频输出电路的地线。
4模拟公交车报站系统软件设计
在进行系统的软件设计之前,先简单了解下单片机的指令系统和开发环境,为接下来的设计打好铺垫。
指令系统:
(1)指令的格式
SPCE061A指令的组成格式不是以字节为单位,而是以16位的字为一个单位,有单字指令和双字指令两种格式,结构较为紧凑。
根据操作数的数目又可区分出0、1、2、3四种格式。
其指令可分为5大类:
数据传送类指令;算术运算类指令;逻辑操作类指令;控制转移及设置指令;伪指令。
(2)寻址方式
寻址方式象语言中的方言,在不同地方的要表达同一个意思可能会通过不同的腔调,也就是对不同的地点的操作数完成同一类操作可能需用不同的寻址方式。
寻址方式包括:
立即数寻址;寄存器寻址;直接寻址;寄存器间接寻址;变址寻址;PC相对寻址;
开发环境:
是否具有对高级语言HLL的支持已成为衡量微控制器性能的标准之一。
显然,与汇编级上的编程相比在HLL平台上编程,代码清晰易读,易维护易形成模块化,便于重复使用而增加代码的开发效率,因此具有诸多优势。
在HLL中又因为C的可移植性最佳所以成为首选。
因此,支持C语言几乎是所有微控制器设计的一项基本的要求,用C语言编程的优点有寄存器分配、数据类型等由编译器管理,编程及调试的时间减少,大大缩短开发周期,明显增加软件可读性,便于改进和扩充。
而SPCE061A指令的设计就着重考虑了对C语言的支持。
用C语言可以很方便地对SPCE061A进行编程。
凌阳公司提供了一种支持凌阳16位单片机系列的集成开发环境,即USPIDED。
它支持汇编语言和C语言混合编程进行程序开发,它同时集程序的编辑、编译、链接、调试以及仿真等功能为一体,具有友好的交互界面、下拉菜单、快捷键和快速访问命令列表,使编程调试工作更加方便和高效。
4.1主函数程序设计
简单了解了单片机的指令系统及开放环境后,进入程序设计部分。
正如硬件的模块区分一样,软件设计也是分模块进行的.主程序是用C语言编写的,是整个软件系统的核心所在。
它是在各个子程序模块编好以后再根据设计要求编制的。
主要包括以下部分的程序:
主程序、音频输出子程序、存储子程序、按键控制子程序。
各子程序由主程序(main.c)调用,组成一个整体。
为了能够体现设计的思路,每个功能都将从原理、程序流程图以及所用函数等几个方面分别介绍。
系统主程序设计流程图如下图,开机后系统首先初始化局部变量并进行所有模块的初始化,之后播报所有站台和行车路线。
然后进行按键扫描,判断键值后进入相应的功能,执行完毕后返回继续判断键值。
图4-1主程序流程图
根据主程序流程图,在执行其他模块程序之前,先要把模块初始化,SPR4096存储器与键盘的初始化分别入下图所示:
图4-2SPR4096初始化图4-3键盘初始化
程序关键代码如下:
intmain(void)
{
unsignedintuiKey;//键盘值
unsignedintuiKey1_Count;//key1按下次数
unsignedintuiKey2_Count;//key2按下次数
unsignedintuiflag;//按键key1、key2的奇偶标志
unsignedintuiTemp;//临时变量
uiOn_Off=0;//局部变量初始化
uiKey1_Count=0;
uiKey2_Count=16;
uiflag=0;
SP_SIOInitial();//初始化SPR模组,SPR4096
DIG_Init();//初始化数码管
Key_Init();//初始化键盘
Broadcast(52);//播放站点
}
}
4.2键盘控制程序设计
键盘采用的是1×4键盘。
键盘扫描的原理为:
先输出高电平,从IOB8~11读回状态值,如果有健按下,相应“行”对应的位就会被置为高电平,得到“行”位置;马上进入“列”扫描,先从IOB12输出一个高电平,再从IOB8~11读回值,判断是否为高电平,是,则得到“列”位置,否则扫描第二“列”,如此类推,通过“行”位置和“列”位置得到确定按键位置。
通过编码,返回键值。
键盘扫描子程序流程图如图所示:
图4-4键盘操作子程序流程图
附上键盘控制程序,因本文用到四个键盘,其中KEY1与KEY2的程序相似、KEY3与KEY4的程序类似,故只解释其中KEY1和KEY3的程序,本子程序代码如下:
uiKey=Key_Get();//取得键值
switch(uiKey)
{
caseKEY1:
uiA2000_S480=0;
uiKey=0;
if(uiflag<1)
{
uiKey1_Count++;
NextStation(uiKey1_Count);//播放提示下一站
uiflag=1;
}
else
{
uiflag=0;
ComingStation(uiKey1_Count);//一次下来某站到站
}
if(uiKey1_Count==16)//判断是否行车到达终点站,终点站需重新开始初始化
{
uiKey1_Count=0;
}
break;
caseKEY2:
uiA2000_S480=0;
if(uiflag==0)
{
uiKey2_Count--;
NextStation(uiKey2_Count);//播放提示下一站,因跟KEY1基本一致,不做详解
uiflag=1;
}
else
{
uiflag=0;
ComingStation(uiKey2_Count);
}
if(uiKey2_Count==0)
{
uiKey2_Count=16;
}
break;
caseKEY3:
uiA2000_S480=0;
PlaySnd_S480(65,3);//播放语音提示语
break;
caseKEY4:
uiA2000_S480=0;
PlaySnd_S480(67,3);
break;
default:
break;
}
4.3语音录放程序设计
由于语音资源存储在外廓的存储器SPR4096存储器上面,要实现语音播放必须采用手动方式。
需要获得语音资源,关键解决语音资源的起始地址,然后通过读取函数获得语音资源。
函数流程图如下:
图4-5语音录放子程序
放音程序以播放公交车整体线路为例,程序代码如下:
voidBroadcast(unsignedintNum)
{
if(Num==52)
{
PlaySnd_S480(22,3);//乘坐本次公交车,本车沿途停靠
Delay(0xffff);
Delay(0xffff);
Delay(0xffff);
PlaySnd_S480(25,3);//起点站
Delay(0xffff);
Delay(0xffff);
Delay(0xffff);
PlaySnd_S480(26,3);//下一站
Delay(0xffff);
Delay(0xffff);
Delay(0xffff);
PlaySnd_S480(27,3);
Delay(0xffff);
Delay(0xffff);
Delay(0xffff);
。
。
。
}
}
5系统调试
5.1USPIDED61单片机控制程序调试
是凌阳科技公司最新推出的单片机模拟仿真软件,功能强大,安装简单,使用方便的优点。
与KEIL软件相比较,unSPIDE在编译优化、代码查错定位等方面都有了一定的优势,而且,该软件在同时编译多个软件方面的功能是其他同类软件无法比拟的。
正因为的优势,所以我们采用该软件对无线语音通信系统进行系统调试。
软件的调试必须在开发系统的支持下进行。
我们应用软件对程序进行调试,先分别调试通过各个模块程序,然后调试中断服务程序,最后调试主程序。
将各部分连接进行调试。
调试的范围可以由小到大、逐步增加,必要的中间信号可以先作设定。
通常交叉使用单步运行、断点运行、连续运行等多种方式,每次执行完毕后,检察CPU执行现场、RAM的有关内容、I/O接口的状态等。
发现一个问题,解决一个问题,直至全部通过。
程序编译界面如图5-1所示:
图5-1程序编译界面
程序下载界面如图5-2所示:
图5-2程序下载界面
5.2ResWriter语音处理程序的调试
ResWriter工具是将语音、字模等数据资源(二进制文件)烧录到SPR1024/4096FlashMemory的烧录工具,其对SPR4096/SPR1024进行烧写的硬件电路主要起到控制SCK、SDA信号的作用,通过74HC244可以控制SDA信号的通与断,这样可以使用ResWriter工具发出符合烧写芯片的时序信号,完成对芯片的数据擦除、烧录写入数据与校验写入数据是否正确的功能。
此外,该工具还具有文件整合功能,把多个小文件按照指定的格式生成索引表,然后将索引表与所有的小文件整合成一个大文件作为烧录Flash的数据资料,这方面本毕业设计不做展开。
现将录制好的音频文件(wav格式)通过ResWriter工具写入SPR4096存储器,按步骤操作,自动烧录如图所示:
图5-3ResWriter自动烧录过程
图5-4ResWriter自动烧录完成
5.3系统调试中所遇到问题及解决方案
(1)接好电池盒,电源指示灯不亮。
未将开关置于“ON”的状态。
(2)调试61板有时会电源反接,烧录有时会忘记把23接口短接。
老师提醒后改正。
(3)调试61板时出现电压不稳负载电流过大的问题。
查明因由电池电压过低造成,并及时更换电池。
(4)喇叭有强的杂音。
喇叭自激的原因,按住MIC能减小噪音。
(5)在烧录语音程序时,发生错误,被自检出来,烧录失败。
后重新烧录,成功。
(6)板子焊好了,在测试时写入自检程序后,测试IOB0口和IOB1口,发现本该是高电平的IOB0为低电平。
焊接时IOB0与地之间有短接,已跟正。
6总结
从前期的查找资料、整理文献综述,到之后开始写开题报告等,再到最后开始正式写毕业论文。
经历了从难到易,从烦到清的心路历程,也学习了包括protel99,软件在内的软件知识。
知道最后经过反复的调试和改进,公交车报站器在结构简单,成本不高的情况下,系统依然稳定性地运行;各种提示语音正常播放,声音清晰,报站明确播报,达到预计目标。
一步步走来离不开老师的知道和同学的帮助,很感谢所有为我带来方便,帮助过我的人们!
公交车报站器给乘客和司机提供了方便。
SPCE061A的结构特点及其相关的开发平台,为我们开发带语