毕业设计(论文)-基于STM32的公交车语音报站系统设计.doc_第1页
毕业设计(论文)-基于STM32的公交车语音报站系统设计.doc_第2页
毕业设计(论文)-基于STM32的公交车语音报站系统设计.doc_第3页
毕业设计(论文)-基于STM32的公交车语音报站系统设计.doc_第4页
毕业设计(论文)-基于STM32的公交车语音报站系统设计.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

苏州大学本科生毕业设计(论文)应用技术学院本 科 毕 业 论 文题目:基于STM32的公交车语音报站系统设计年 级: 12级 专 业: 电子信息科学与技术 学 号: 学生姓名: 指导教师: 职 称: 论文提交日期:2015年12月17日 34目 录摘 要4Abstract5前 言5第一章 总体设计6第1.1节 系统概述6第1.2节 方案选择6第1.3节 总体方案8第二章 硬件模块介绍9第2.1节 控制电路设计模块9第2.2节 GPS电路设计模块11第2.3节 语音播报电路设计模块14第2.4节 显示电路设计模块15第2.5节 按键电路设计模块16第三章 系统软件设计17第3.1节 主程序17第3.2节 GPS数据解析程序18第3.3节 串口屏驱动程序19第3.4节 语音合成驱动程序20第3.5节 按键程序20第四章 测试分析20第五章 总结与展望21参考文献22致 谢23附 录24附录一:GPS数据解析源代码24附录二:串口屏驱动程序源代码29附录三:语音合成驱动程序源代码29附录四:按键程序源代码31全套设计加扣3012250582 基于STM32的公交语音报站系统设计苏州大学 应用技术学院 XX班级(学号#) 姓名 【摘要】:现阶段虽然国内已经有些大中城市的公交车上已经采用了基于GPS定位系统的自动报站方式,但其昂贵的成本,目前难以实现普及。针对目前公交车常见报站方式的主要缺陷,探索设计出一种物美价廉的公交报站器。本设计是一种基于GPS模块和STM32单片机设计的自动语音报站系统。利用STM32F103C8T6串行口通信接收GPS模块输出的经纬度信息,通过对比存储经、纬度数据和相应的站点名字。确认公交车是否进入设定站台范围内,以达到自动报站的目的;再设计的过程中给出硬件电路的设计方案、主要软件流程图、数据处理及其程序设计的方法。本设计解决了以住公交车报站系统人工操作不便、误报站多、故障时不报站等问题。测试结果表明其硬件电路性能稳定,可以满足公交智能报站的需求。 【关键词】:公交语音报站、GPS、STM32、单片机 Abstract : Although at this stage the country has some buses cities have adopted auto-stop mode GPS-based positioning system , but its high cost , is difficult to achieve universal access . For the main shortcomings of the current bus stops common way to explore design an inexpensive bus-stop device . This design is automatic speech -stop system based on GPS module and STM32 microcontroller design. Use STM32F103C8T6 serial port communication module receives GPS latitude and longitude information output by contrast storing latitude and longitude data and appropriate site name. Confirm whether to enter the bus station within a set range , in order to achieve the purpose of automatic station ; the redesign process given hardware circuit design, the main software flow chart , a method of data processing and programming. This design solves the live bus stations to the system inconvenient manual operation , false station and more, when the fault is not reporting stations and other issues. Test results show that the hardware circuit stable performance, to meet the needs of intelligent bus -stop . Key words: Public Transportation Voice Station, GPS, STM32, MicrocontrollersWritten by Zhu BiweiSupervised by Peng Jingyu 前 言 随着我国国民经济快速增长,人民生活水平不断提高,工业化、城镇化、机动化进程深入推进,公交车因其方便、快捷、价格低廉、运载量大、能耗低、低污染等特点逐渐成为了广大人民出行首选的交通工具。近些年来手动按键报站方式仍然是公交车上比较普遍采用的报站方式,但其报站不准确,并且报站时需要由驾驶员进行手动操作,这给行驶中的车辆带来了一定的安全隐患。现阶段虽然国内有些大中城市的公交车上已经采用了基于GPS定位系统的自动报站方式,但其昂贵的成本,目前难以实现普及。针对目前公交车常见报站方式的主要缺陷,本设计探索出一种基于GPS卫星定位以及利用语音合成技术实现的公交自动报站系统。该系统可以实现公交车进站和出站都可以自动播报相应的站名以及一些服务用语,精准、实时性好、不需要依靠人工干预,实现公交车自动报站系统的完全智能化。这是改善了当前公交车语音报站器的一些不完善的地方,这是给公交车的管理人员和乘客带来的福音,成功实现公交车语音自动报站系统的完全智能化。 第一章 总体设计第1.1节 系统概述 该系统采用了更先进的卫星定位技术和语音合成技术相结合的办法,以前,必须有司机操控,公交车语音报站器才可以工作,现在本系统的实现改善了这一环节,能够实现自动播报站名及服务用语,进站和出站,且及时、准确、不要靠人工介入,实现了公交车报站器的完全智能化。本设计采用GPS卫星定位技术,可以自动地、准确地播报当前所到达的站名、服务用语以及广告;该系统能够与显示屏直接连接,同步显示报站点信息、当前经纬度位置以及速度;同时可存储多条线路,方便公交车临时更换运营线路。第1.2节 方案选择主控芯片: 方案一:采用STM32F103C8T6芯片。STM32F103C8T6是一款由ST公司设计,是一个低能耗、集成度较高的32位RISC处理器,它采用64 脚LQFP 封装,为移动设备和手持式设备提供了性价比高、低能耗、高性能小型微控制器的设计方案。STM32F103C8T6的最大的特点是其CPU核心为一个32位的CORTEX-M3处理器。而且提供完备的系统外围设备,STM32F103C8T6可大大减少整体设计系统的成本,不需要为系统配置额外器件。方案二:使用STC89C52单片机作为主控芯片。STC89C52宏晶科技公司是一个低功耗,高性能的八位CMOS微处理器,片上Flash存储器8K在线编程。STC89C52单片机为核心采用MCS -51指令与MCS- 51完全兼容,但做了升级,使MCU芯片具有许多传统的微控制器51不具备的功能。但是引脚少,所能提供的外设功能较少。GPS模块: 方案一:采用SIRF公司最新SiRFstarIV GSD4e WLCSP 芯片。CPU内核为ARM7内核处理架构。采用ROM48通道“全视野”追踪卫星,提供最准确的定位数据。采用3.3V CMOS 通用串行接口,UART波特率默认4800bps, 最高1.25Mbps可调,预留 I2C 接口,方便扩展DR 功能,可通过外接GPS 天线实现 NMEA 输出模块定位精度高,-163dbm的灵敏度采用标准NMEA0183码,支持DGPS协议:WAAS,EGNOS 方案二:采用ublox公司GPS接收模块。LEA-4H/LEA-4S是目前u-blox推出的小型化的第四代GPS接收模块定位产品本年度主力品种,模块体积非常的小,以较低功耗就能竟达到-158db的高感度信号追踪,最大的特点是它可以支持无源和有源天线两种方式,入股采用陶瓷无源天线整体就可以做到非常小,甚至可以内置于手机当中,若要扩展更强的外围信号,只需要外接有源天线,各项性能指标在同类GPS模块都较为优秀.显示模块:方案一:采用LCD1602液晶显示屏。LCD1602液晶又叫LCD1602字符型液晶。液晶显示功能强大,可以同时显示出16*2即32个字符,可包括数字、字母、符号、或者自定义字符。LCD1602液晶显示器中的每一个字符都是由5*7的点阵组成。LCD1602采用并行数据传输也可以采用串行数据传输,控制简单,和市面上的大多基于HD44780液晶的控制原理完全相同。 方案二:采用串口屏。串口屏是由液晶屏+单片机+存储器三部分构成的,由计算机将图片和汉字点阵通过GpuMaker程序预先存储到串口屏的存储器中,然后由单片机通过串口发送指令调用显示就可以,单片机部分的编程就会变得异常简单。且显示内容丰富,内置强大的显示素材库,都提供了API调用。语音合成模块: 方案一:采用语音合成芯片SC8065 。SC8065是一款单芯片CMOS一次性可编程语音芯片,该语音芯片采用最新的架构EPROM OTP(一次性可编程),具有输入PWM脚和两个I/O引脚,拥有准确性和抗干扰性,只有一组PWM输出的,因此无需多余的外部电路。 方案二:采用SYN6288语音合成模块。 SYN6288语音合成芯片是由北京宇音天下科技有限公司设计并发布的,其最大的特点是支持异步串口的通信方式,上位机可以通过命令帧的方式来控制此款芯片,芯片内提供了强大的命令功能,完全满足设计的需求,语音合成功能强大,能够识别多音字以及一些姓氏,也能够合成英文单词和一些数学符号,更重要的是可以很方便地调整语音播报的音量大小。一般用在车载地图、电子自行车、电子地图、手机、智能玩具等设备中,语音合成自然度好、可懂度更高。综合上述的描述,最终根据本设计中的功能要求和成本考虑主控芯片采用STM32F103XC8T6,其强大的外设功能可以满足本次设计的需求,GPS模块采用Ublox公司GPS模块,精度较高,效果出众 ,显示模块采用串口屏以及语音合成模块采用SYN6288模块较合理,都是以命令帧的方式来控制,使用方便,功能强大,无需占用CPU的计算资源。第1.3节 总体方案本设计通过GPS模块获取GPS工作卫星的导航数据,通过对接收到的数据分析从而计算出公交车当前的经纬度信息、速度等数据;根据GPS定位数据计算出公交车的实时坐标,将其与站点坐标相比较,当公交车驶入站点一定距离范围内时,不用进行人工的干预,系统可以自动为乘客报站。将位置信息与此前在单片机中设定好的经纬度阈值比较,根据公交车位置的不同,显示屏上显示不同的站点信息等。在离站、到站阈值范围内语音提示的同时,在显示屏上显示同类信息,也可通过按键设置播报音量的大小。本设计由硬件和软件两部分组成。硬件是以STM32F013处理器核心,配合电源、主控芯片、语音合成模块、按键模块、GPS模块和显示屏模块。图1-3 公交车自动报站系统原理图第二章 硬件模块介绍第2.1节 控制电路设计模块2.1.1主芯片介绍核心处理器STM32F103系列是由ST公司采用ARM CORTEX-M3内核设计的一款32位低功耗处理器,其主频可达72M,ST公司为其添加了很多外设功能例如SRAM、12位ADC、USART、I2C、SPI等等,其芯片引脚有48、64、100三种。封装格由LQFP和BGA两种。同时ST公司还为其增加了32-128Kbyte大小的Flash存储器以及6-20kbyte大小的SRAM。还具有7通道的DMA功能,支持外设SPI、定时器、ADC、I2C和USART,此DMA功能可以为单片机节省很多计算资源。STM32F103系列还有多大7个的定时器,其中两个为32位高级定时器,两个16位看门狗定时器以及四个个16位普通定时器,支持6通道PWM输出,还带有一个24位的时钟滴答定时器。考虑成本和功能需求,本次设计选用了STM32F103C8T6作为主控芯片,在本次设计的GPS自动报站系统中,需要用到三个USART串口以及一个内部定时器,两个外部中断,此芯片足够满足相应的需求,且具有较好的扩展性。2.1.2控制电路设计 单片机最小系统需要有电源电路时钟电路和复位电路组成,在此次设计中,采用USB供电的方式,时钟电路由一个8M晶振和两个30pf的起振电容组成,复位电路可实现上电复位和按键复位两种模式。最小系统原理图如下所示:图2-1-2 控制电路原理图本设计将PA9和PA10引脚连接GPS的RX和TX端,单片机通过TX引脚给GPS发送指令,GPS模块由RX引脚反馈数据给单片机,单片机通过串口中断的方式接收。PA2和PA3引脚分别连接SY6288语音模块的RX和TX端,也同样单片机由TX端发送指令给语音合成模块从而完成语音播报的控制,RX端则负责处理反馈的数据。另外,还有PA4和PA5两个引脚连接了两个按键,代表音量的增高和降低,通过外部中断的方式触发并处理数据,以达到音量的控制。第2.2节 GPS电路设计模块Ublox公司通过使用其他厂商的GPS芯片设计生产GPS模块的方式打入GPS行业,主攻车载GPS市场。小有成就之后,开始涉足芯片设计。此后和Atmel公司合作,U- blox公司提供GPS接收算法,Atmel则负责芯片的设计生产。这次合作使得U- blox成功转型为GPS芯片供应商,并采用自己的芯片继续生产GPS模块,在欧洲车载GPS市场获得巨大成功。当时的Atmel也非常看好U- blox,并考虑过收购U- blox,但当时由于价钱没谈拢,没有成功。转眼间U- blox已经成了一个壮汉,显然不再甘心芯片设计生产再受Atmel约制,开始自己设计芯片,2006成功推出U- blox5系列芯片组,不但能兼容美国GPS卫星系统引擎,还可一兼容欧盟伽利略卫星系统引擎,数据刷新频率可小于1秒,具有超低的50毫瓦功耗和较高的-160 dBm跟踪灵敏度等,其性能领先,终成霸业。如今,U- blox是GPS行业的标杆,是欧洲汽车GPS导航委员会及伽利略委员会委员,参与制定欧洲汽车GPS导航专业标准制定及修正。2.2.1 GPS芯片介绍 GPS模块内部由两个功能部分组成:射频(RF)和基带(Baseband)部分。RF前端包括输入匹配元件、SAW(声表面波)带通滤波器、u-blox 6 RF-IC(带集成的LNA)和频率源。基带部分,包括u-blox 6基带处理器、RTC晶体振荡器和附加的元件如:用于扩展编程和灵活性的可选FLASH内存。其详细结构如下图所示:图2-2-1 GPS内部结构图 GPS模块与单片机的连接只需一个RX端即可,用来接收GPS模块发送的数据,GPS模块的VCC和GND端分别接电源正极和电源地。其电路原理图如图2-2-2所示:图2-2-2 GPS电路原理图第2.3节 语音播报电路设计模块 SYN6288语音合成芯片是由北京宇音天下科技有限公司设计并发布的,其最大的特点是支持异步串口的通信方式,上位机可以通过命令帧的方式来控制此款芯片,芯片内提供了强大的命令功能,完全满足设计的需求,语音合成功能强大,能够识别多音字以及一些姓氏,也能够合成英文单词和一些数学符号,更重要的是可以很方便地调整语音播报的音量大小。一般用在车载地图、电子自行车、电子地图、手机、智能玩具等设备中,语音合成自然度好、可懂度更高。 在与单片机连接的时候,选取单片机USART1端口作为通信端,所以芯片的TX端连接单片机的USART1_RX端,芯片的RX端连接到USART1_TX端,VCC和GND端分别接电源正极和电源地。由于此次的设计对语音芯片的功能需求较少,RX端可以不接,所以与单片机通信只需一根线即可,既单片机只需给语音芯片发送命令即可。减少了单片机引脚的占用,节省资源。其电路原理图如图2-3-1所示图2-3-1 SYN6288电路原理图第2.4节 显示电路设计模块2.4.1 串口显示介绍 串口是单片机中最普遍的一种接口,几乎99%的单片机系统都支持串口,串口开发在单片机开发中成为一种基础中的基础,具有广泛的用户基础和资料普及度;而另一方面,TFT彩色液晶屏的控制显示却复杂的多,不仅每家甚至每种屏接口都不一致,且还需要自己处理汉字点阵以及图形点阵,您看到的彩色界面实际上是一个点一个点绘制出来的,需要高档的单片机才能做到,且实现是非常复杂的;常言道,把复杂的事情变简单就是价值,串口屏正遵循了这个原则,您只需要通过串口发送一个命令字符串,比如CLS(1); 就可以将屏幕清成红色;同样发送其他的命令就可以完成汉字以及图片的显示。2.4.2 串口屏原理串口屏是由液晶屏+单片机+存储器三部分构成的,由计算机将图片和汉字点阵通过GpuMaker程序预先存储到串口屏的存储器中,然后由单片机通过串口发送指令调用显示就可以,单片机部分的编程就会变得异常简单;图2-4-2 串口屏原理图其电路原理图如图2-4-3所示:图2-4-3 串口屏电路原理图第2.5节 按键电路设计模块此次设计需要两个按键来控制语音播报的音量,采用高电平触发外部中断的方式,由STM32F103C8T6的PA4和PA5管脚控制,当按键没有被按下的时候,引脚信号为低电平,当按键被按下后,引脚上有高电平信号,触发了芯片外部中断,再通过100ms的延时消抖便可实现按键的检测,其电路设计如下图所示。图2-5 按键电路原理图第三章 系统软件设计第3.1节 主程序 系统的软件流程下图所示。上电后,首先完成控制系统的初始化任务,然后再创建检测GPS信号的任务,并进入此任务执行GPS信号检测以及对接收到的GPS数据的解析,同时监测是否有GPS报站中断产生。若有中断产生,则启动更新GPS数据在显示屏上显示并且有语音合成模块播报站名;若没有,则检测是否有按键中断产生。若有中断,则进入人机交互界面;否则继续检测GPS数据是否到达站点,同时检测、解析GPS信号以及按键中断信号。图3-1 主程序流程图第3.2节 GPS数据解析程序在给GPS模块上电后,GPS模块通过串口TX端会每隔一段时间给单片机发送数据包,GPS的数据包格式是以$为开头,接下来是信息类型,后面是数据以逗号隔开,最后一位是校验码,每种信息类型的数据包长度都不同,总共有6中不同的信息类型,分别是GPGSV:可见卫星信息、GPGLL:地理定位信息、GPRMC:推荐最小定位信息、GPVTG:地面速度信息、GPGGA:GPS定位信息、GPGSA:当前卫星信息。这里我们只需要最小定位信息既GPRMC,其数据包共有12位数据,第一位是UTC时间,时分秒的格式;第二位是定位状态,A为有效定位,N为无效定位;第三位是纬度数据,格式是度分;第四位是纬度半球信息,南半球S或北半球N;第五位是经度,格式为度分;第六位是经度半球信息,南半球S或北半球N;第七位是地面速度,单位是节;第八位是地面航向;第九位是UTC日期,格式是日月年;第十位是磁偏角,单位是都;第是十一位是磁偏角方向,E(东)或W(西);第12位是模式指示;对GPS数据包解析的步骤为:第一步判断数据帧头$,若出现$字符,接下来在遇到第一个逗号之前的数据便是信息类型,这里我们只需要GPRMC的数据,因此我们需要对信息类型进行筛选,也就是字符串匹配,如果信息类型符合字符串GPRMC,则继续接受数据,否则过渡到下一个数据包。如果确定为GPRMC数据后,没碰到一个逗号之前都是一组完整的数据,数据存储的格式必须严格按照GPS数据包的格式,否则将发生错误,GPRMC的数据包中一共会有13个逗号,判断是否满足13个逗号后便可判断是否将数据接收完成。第3.3节 串口屏驱动程序显示屏与单片机通过串口的方式通信,单片机在控制串口屏的时候只需要发送相应的命令帧。在本次设计中使用STM32单片机的USART1作为与串口屏的通信端,并对串口发送函数进行了封装,封装成GPU_Send()函数,只需要将需要显示的字符按照下表3-3的GPU命令格式以字符串的形式发送给串口屏即可实现相应的命令控制,若需要变量的加入可以使用sprintf函数来实现。表3-3 GPU命令命令说明示例CLS(c);用c颜色清屏CLS(0);SCC(c,n);自定义c颜色,颜色值n由上位机提供计算SCC(15,65535);SBC(c);设置背景色C,显示汉字等时无点阵时填的颜色SBC(1);PS(x,y,c);在(x,y)的地方画一个颜色c的点PS(100,100,1);PL(x1,y1,x2,y2,c);从(x1,y1)用颜色c画一条直线到(x2,y2)PL(0,0,100,0,2);SPG(n);显示第n个批界面SPG(1);DS16(x,y,显示内容字符串,c);在(x,y)处用颜色c显示一行16点阵字DS16(0,0,显示字符串,1);DS24(x,y,显示内容字符串,c);在(x,y)处用颜色c显示一行24点阵字DS24(0,0,显示字符串,1);DS32(x,y,显示内容字符串,c);在(x,y)处用颜色c显示一行32点阵字DS32(0,0,显示字符串,1);DS48(x,y,显示内容字符串,c);在(x,y)处用颜色c显示一行48点阵字DS48(0,0,显示字符串,1);DS64(x,y,显示内容字符串,c);在(x,y)处用颜色c显示一行64点阵字DS64(0,0,显示字符串,1);DRn设置屏幕显示的方向;n为03,分别对应屏的4个方向,可以使用此调整横竖屏显示;另外此命令不清屏,因此可以显示在横屏下显示部分竖显汉字。DR0;横屏显示DR1;竖屏显示DR2;横屏倒立DR3;竖屏倒立第3.4节 语音合成驱动程序单片机是通过串口传输的方式与SYN6288语音合成模块进行通信,单片机一命令帧的格式对语音合成模块进行控制,SYN6288芯片提供了多种控制命令,例如1、 语音合成播放命令:用来合成本次发送的文本2、 改通讯波特率命令:改变之后的通讯波特率3、 停止合成命令:停止当前的合成动作4、 暂停合成命令:暂停正在进行的合成5、 恢复合成命令:继续合成被暂停的文本6、 芯片状态查询命令:查询当前芯片的工作状态:上位机可通过“芯片状态查询命令”来判断TTS模块是否正常工作,以及获取相应参数,返回0x4E,表明芯片仍在合成中,返回0x4F,表明芯片处于空闲状态。上位机以命令帧的格式向SYN6288模块发送命令。SYN6288模块根据命令帧进行相应操作,并向上位机返回命令操作结果。接收到控制命令帧,芯片会向上位机发送1个字节的状态回传,上位机可根据这个回传来判断芯片目前的工作状态。SYN6288模块在初始化成功时会发送一个字节的“初始化成功”回传。SYN6288模块收到命令帧后会判断此命令帧正确与否,如果命令帧正确返回“接收成功”回传,如果命令帧错误则返回“接收失败”回传。SYN6288模块收到状态查询命令时,如果芯片正处于播音的工作状态则返回“正在播音”回传,如果芯片处于空闲状态则返回“芯片空闲”回传。在一帧数据合成完毕后,芯片会自动返回一次“芯片空闲”的回传。第3.5节 按键程序按键程序应用到STM32芯片的外部中断,首先初始化PA4、PA5管脚为上拉输入,配置两个管脚的外部中断,且由下降沿触发,然后配置嵌套向量中断控制器的优先级。最后重载两个中断函数,中断被触发时先由延时100ms消抖再分别控制保存音量值的变量vol_level。第四章 测试分析经过系统硬件上电测试,系统能够正常运行,显示屏、语音莫夸以及GPS初始化成功,外部按键可以控制语音播报的音量大小,GPS需要在室外才有信号,室内时GPS无法正常工作,设置站点信息后,在到达站点的经纬度范围后语音可以进行语音播报。并且从GPS所接受到的经纬度数据以及UTC时间都会不断更新并显示在串口屏上,再到达站点后也会更新站点到达状态。第五章 总结与展望通过一学期的毕业设计,我从中受益匪浅,不仅仅是技术上的,还锻炼了我的实践能力、自主学习能力、解决问题的能力。在毕业设计过程中,我可以把这大学所学的理论知识和实践联系起来,在所要开发的程序中渐渐融会贯通。虽然我们对这些知识还运用得还不是很熟练,但是相信在现在和今后的学习中会得到更加牢固的掌握。经过反复的调试和改进,通过最后的测试,基于STM32的公交语音报站系统在减少外围器件,成本大大降低的情况下,系统基本功能可以实现,不过系统的运行的稳定性还有很大程度的提高,各种提示语音清晰度还不够。设计过程是漫长和繁琐的,是一个考验人耐心的过程,不能有丝毫的急躁,首先要保证电路设计的正确性,要从系统的整体考虑,不能有丝毫的差错,否则后期的设计很难进行。本设计的主芯片采用的是STM32F0103C8T6,音频解码芯片采用的是SYN6288,在满足需求的同时也节约了成本。在系统软件设计时需要采取一种合理的方案,SYN6288的设置十分的重要,参数的设置不合理将会导致解码的错误。以上的问题刚开始也是不怎么清楚,但通过查找资料,思考,请教老师,和同学讨论,不断地调整设计思路,基本上算是完成了设计目标。当然,此次设计的于STM32的公交语音报站系统设计报站语音信息的播放及总体设计系统也有不足,就是可以实现的扩展功能太少、系统的稳定性并不是十分的理想。系统还有许多可以扩充的功能需要进一步探索,例如在特殊情况下可以切换为手动报站,可以连接车内LED大屏显示广告以及站台信息,该系统可以和GPRS通讯系统连接,实现实时监控公交车运行请况等等。参考文献1 权建军,邹益民.GPS全自动公交语音报站器的研究.电子设计工程,2009(09).2孙戈,汪亚东,李培煊.基于GPS的嵌入式公交自动报站系统.电子技术应用,2007(11):3437.3胡力刚,许伟明,焦阳.基于S3C2410A和UDA1341TS的嵌入式音频系统设计.计算机测量与控制,2009(12).4黄会雄.基于UDA1341数字音频接口嵌入式电路的设计.山西电子技术,2007(1).5邹玲,刘进.基于ARM9处理器的嵌人式音频系统设计.微计算机息,2007(14).6 黄志明.单片机公交车到站语音播报与液晶显示控制的研制J.厦门集美大学,2006.7 黄艳国,许伦辉,眭相林.基于GPS公交车自动报站系统的设计.交通信息与安全,2009(01).8 杨瑞霞.GPS公交车智能报站系统的实现.电子技术,2006(11).9 高建华,王殊.基于S3C2410型微处理器和UDA1341型立体声音频编解码器的嵌入式音频系统设计.国外电子元器件,2006(06).10黄智伟.全国大学生电子设计竞赛系统设计.北京:北京航空航天大学出版社,2006(6).11邹玲,刘进.基于ARM9处理器的嵌人式音频系统设计J.微计算机信息,2007(23).12于明,范书瑞,曾祥烨.ARM9嵌入式系统设计与开发教程M.北京:电子工业出版社,2006.13吴明晖.基于ARM的嵌入式系统开发与应用M.北京:人民邮电出版社,2005.14郑灵翔.嵌入式系统设计与应用开发M.北京:北京航空航天大学出版社,2006.15徐睿,李斐,王申康.基于IIS总线的嵌入式音频系统设计.计算机应用,2004(4):79.16 16周立功.ARM嵌入式系统设计试验M.北京:北京航空航天大学出版社,2006.致 谢为期两个多月的毕业设计就要画上句号了,这一路经历了很多的东西,有过悲伤失落也有过开心骄傲,两个多月说长不长说短也不短,也感悟了很多。从一开始的拿到课题的茫然,到查阅书籍资料的半知半解,再到动手操作的乱七杂八,最后到完成毕业课题的激动欣喜。这一路我要感谢的认真的太多,没有大家的帮忙就不会有今天实物的完成。首先我特别要感谢我的指导老师彭静玉老师的耐心的指导,在我没有思想方向的时候,她用她丰富的经验给我诸多的指引,在面对困难的时候鼓励我们勇往直前,这不仅在我的毕业设计甚至是在以后人生道路上都对我影响深刻。没有她不厌其烦的谆谆教导就没有我今天完成的毕业设计,不断给我的论文提出修改和改进的意见才使得我的论文能够达标,在此我衷心感谢我的指导老师彭老师,谢谢您的无私奉献。还有就是要感谢这一路支持与帮助我的家人与朋友,没有你们的支持也不会有今天的硕果累累,还有就是要感谢引用专著的学者们,没有你们的启发和帮助也没有我的论文。附 录附录一:GPS数据解析源代码#include gps.h#include stdlib.h#include string.h#include usart.h#include syn6288.hchar GPS_BUF50;char InputBuffer50;u8 rev_start = 0;GPS_INFO GPS_DATA;Site_Typedef Site1,Site2,Site3;u8 cnt=0;u8 Judge_Arrive(void)if(Site1.latitude_Min GPS_DATA.latitude_Degree & GPS_DATA.latitude_Degree Site1.latitude_Max)& (Site1.longitude_Min GPS_DATA.longitude_Degree & GPS_DATA.longitude_Degree Site1.longitude_Max)return 1;if(Site2.latitude_Min GPS_DATA.latitude_Degree & GPS_DATA.latitude_Degree Site2.latitude_Max)& (Site2.longitude_Min GPS_DATA.longitude_Degree & GPS_DATA.longitude_Degree Site2.longitude_Max)return 2;if(Site3.latitude_Min GPS_DATA.latitude_Degree & GPS_DATA.latitude_Degree Site3.latitude_Max)& (Site3.longitude_Min GPS_DATA.longitude_Degree & GPS_DATA.longitude_Degree Site3.longitude_Max)return 3;return 0;void Print_Data(void)GpuSend(CLS(1);rn);sprintf(InputBuffer,DS16(80,4,GPS数据,15);rn);GpuSend(InputBuffer);sprintf(InputBuffer,DS16(5,24,日期:,15);rn);GpuSend(InputBuffer);sprintf(InputBuffer,DS16(5,44,UTC时间:,15);rn);GpuSend(InputBuffer);sprintf(InputBuffer,DS16(5,64,经度:%d%d%d ,15);rn,GPS_DATA.latitude_Degree,GPS_DATA.latitude_Cent,GPS_DATA.latitude_Second);GpuSend(InputBuffer);sprintf(InputBuffer,DS16(5,84,纬度:%d%d%d ,15);rn,GPS_DATA.longitude_Degree,GPS_DATA.longitude_Cent,GPS_DATA.longitude_Second);GpuSend(InputBuffer);sprintf(InputBuffer,DS16(5,104,速度:%f,15);rn,GPS_DATA.speed);GpuSend(InputBuffer);sprintf(InputBuffer,DS16(5,124,到达站点情况,15);rn);GpuSend(InputBuffer);switch(Judge_Arrive()case 1:sprintf(InputBuffer,DS16(5,144,到达站点一,15);rn);GpuSend(InputBuffer);sprintf(InputBuffer,v%d到达站点一,vol_level);syn6288_SpeakStr(InputBuffer,0);break;case 2:sprintf(InputBuffer,DS16(5,144,到达站点二,15);rn);GpuSend(InputBuffer);sprintf(InputBuffer,v%d到达站点二,vol_level);syn6288_SpeakStr(InputBuffer,0);break;case 3:sprintf(InputBuffer,DS16(5,144,到达站点三,15);rn);GpuSend(InputBuffer);sprintf(InputBuffer,v%d到达站点三,vol_level);syn6288_SpeakStr(InputBuffer,0);break;default:sprintf(InputBuffer,DS16(5,144,未到达,15);rn);GpuSend(InputBuffer); break;int GetComma(int num,char *str) int i,j=0; int len=strlen(str); for(i=0;ilen;i+) if(stri=,) j+; if(j=num) return i+1; return 0;/将获取文本信息转换为double型double Get_Double_Number(char *s) char buf128; int i; double rev; i=GetComma(1,s); strncpy(buf,s,i); bufi=0; rev=atof(buf); return rev;/将获取文本信息转换为float型float Get_Float_Number(char *s) char buf128; int i; float rev; i=GetComma(1,s); strncpy(buf,s,i); bufi=0; rev=atof(buf); return rev;int GPS_RMC_Parse(char *line) u8 ch, status, tmp; float lati_cent_tmp, lati_second_tmp; float long_cent_tmp, long_second_tmp; float speed_tmp; char *buf = line; ch = buf5; status = bufGetComma(2, buf); if (ch = C) /如果第五个字符是C,($GPRMC) if (status = A) /如果数据有效,则分析 GPS_DATA.NS = bufGetComma(4, buf); GPS_DATA.EW = bufGetComma(6, buf); GPS_DATA.latitude = Get_Double_Number(&bufGetComma(3, buf); GPS_DATA.longitude = Get_Double_Number(&bufGetComma(5, buf); GPS_DATA.latitude_Degree = (int)GPS_DATA.latitude / 100; /分离纬度 lati_cent_tmp = (GPS_DATA.latitude - GPS_DATA.latitude_Degree * 100); GPS_DATA.latitude_Cent = (int)lati_cent_tmp; lati_second_tmp = (lati_cent_tmp - GPS_DATA.latitude_Cent) * 60; GPS_DATA.latitude_Second = (int)lati_second_tmp; GPS_DATA.longitude_Degree = (int)GPS_DATA.longitude / 100; /分离经度 long_cent_tmp = (GPS_DATA.longitude - GPS_DATA.longitude_Degree * 100); GPS_DATA.longitude_Cent = (int)long_cent_tmp; long_second_tmp = (long_cent_tmp - GPS_DATA.longitude_Cent) * 60; GPS_DATA.longitude_Second = (int)long_second_tmp; speed_tmp = Get_Flo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论