![基于单片机的GPS定位信息显示系统设计毕业设计_第1页](http://file4.renrendoc.com/view11/M02/00/14/wKhkGWVyhwOAYma8AADdYIShAeU112.jpg)
![基于单片机的GPS定位信息显示系统设计毕业设计_第2页](http://file4.renrendoc.com/view11/M02/00/14/wKhkGWVyhwOAYma8AADdYIShAeU1122.jpg)
![基于单片机的GPS定位信息显示系统设计毕业设计_第3页](http://file4.renrendoc.com/view11/M02/00/14/wKhkGWVyhwOAYma8AADdYIShAeU1123.jpg)
![基于单片机的GPS定位信息显示系统设计毕业设计_第4页](http://file4.renrendoc.com/view11/M02/00/14/wKhkGWVyhwOAYma8AADdYIShAeU1124.jpg)
![基于单片机的GPS定位信息显示系统设计毕业设计_第5页](http://file4.renrendoc.com/view11/M02/00/14/wKhkGWVyhwOAYma8AADdYIShAeU1125.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学校代码:11059学号:0805070058Hefei毕业论文〔设计〕BACHELORDISSERTATION论文题目:基于单片机的GPS定位信息显示系统设计学位类别:__________工学学士________________年级专业〔班级〕:__08级自动化〔1〕班___作者姓名:________王致忠__________________导师姓名:________王庆龙_________________完成时间:_______2023年5月20日___________基于单片机的GPS定位信息显示系统设计中文摘要GPS全球定位系统在实际生活中被广泛应用,是当今信息时代开展中的重要组成局部。因其具有性能好、精度高、应用广的特点,使其成为了迄今为止最好的定位导航系统。本论文详细介绍了一种基于单片机、GPS接收模块、12864液晶显示模块等器件的GPS实时显示功能的实现。分别从硬件设计和软件设计等方面对其作了详细的阐述,并且结合硬件的特点研究了MCS-51系列单片机如何与GPS接收模块实现串行通信,该系统是根据GPS模块数据输出根本原理设计而成的。它是一台体积小巧、携带方便、可以独立使用的全天候实时的定位导航设备。关键词:GPS;单片机;GPS接收模块;12864液晶屏Microcontroller-basedGPSPositioningInformationDisplaySystemDesignABSTRACTGPSGlobalPositioningSystemiswidelyusedinreallife,isanimportantpartinthedevelopmentoftoday'sinformationage.Becauseofitsgoodperformance,highaccuracy,wideapplication,makingitbyfarthebestnavigationandpositioningsystem.ThisthesisisdescribedindetailbasedonmicrocontrollerGPSreceivermodule,12,864LCDdisplaysandotherdevicesGPSreal-timedisplayfunctionimplementation.Fromhardwareandsoftwareimplementationgaveadetailedexpositionofthedesign,andcombinedwiththehardwarefeaturesoftheMCS-51seriesmicrocontrollerGPSreceivermoduletoachieveserialcommunication,thesystemdesignisbasedonthebasicprincipleoftheGPSmoduledataoutput.Itisacompact,portable,andcanbeusedindependently,all-weatherreal-timepositioningandnavigationequipment.KEYWORD:GPS;microcontroller;GPSreceivermodule;12864LCD目录第一章绪论11.1课题背景及意义11.2论文主要内容2第二章GPS定位信息显示系统方案设计32.1GPS全球定位系统简介32.2GPS信号接收方案选择52.3GPS接收模块的研究52.4总体方案的设计6第三章基于单片机的GPS硬件电路设计83.1基于单片机的GPS硬件电路总体结构83.2基于单片机的GPS定位信息显示系统设计硬件电路简介83.2.1STC89C52简介83.2.2SiRFStarIIGPS信号接收模块123.2.312864液晶显示模块介绍133.3基于单片机的GPS硬件连接介绍15第四章基于单片机的GPS软件设计174.1NMEA-0183数据格式174.1.1输入语句174.1.2输出语句184.2基于单片机的GPS定位系统软件开发环境―KeiluVision2204.2.18051开发工具20uVision2集成开发环境204.2.3编辑器和调试器214.2.4测试程序224.2.5KeilC编译步骤234.3基于单片机的GPS软件设计思路254.4模块软件设计264.4.1液晶模块初始化模块264.4.2GPS数据接收模块28第五章系统调试与实验结果305.1硬件调试305.2软件调试305.3实验结果315.4实验结果分析32第六章总结33致谢34参考文献35附录36第一章绪论1.1课题背景及意义1978年2月22日第一颗GPS试验卫星的入轨运行,开创了以导航卫星为动态点的无线电导航定位的新时代。GPS卫星所发送的导航定位信号,是一种可供无数用户共享的空间信息资源[1]。陆地、海洋和空间的广阔用户,只要持有一种能够接收、跟踪、变换和测量GPS信号的接收机,就可以全天时、全天候和全球性的测量运动载体的七维状态参数和三维状态参数。其用途之广,影响之大,是其他无线电接收装置都望尘莫及的。不仅如此,GPSGPS技术的陆地应用GPS技术在陆地上的开发应用可以表达在许多方面,如:各种车辆的行驶状态监控;旅游者或旅游车的景点导游;应急车辆的快速引导行驶;高精度时间比对和频率控制;大气物理观测;地球物理资源勘探;工程建设的施工放样测量;大型建筑和煤气田的沉降检测;板内运动状态和地壳形变测量;陆地以及海洋大地测量基准的测定;工程、区域、国家等各种类型大地测量控制网的测量和建设等。GPS技术的海洋应用GPS技术在海洋方面有着极其重要的作用,比方:远洋船舶的最正确航线测定;远洋船队在途中航行的实时调度和监测;内河船只的实时调度和自主导航测量;海洋救援的搜索和定点测量;远洋渔船的结队航行和作业调度;海洋油气平台的就位和复位测定;海底沉船位置的精确探测;海底管道铺设测量;海岸地球物理勘探;水文测量;海底大地测量控制网的布测;海底地形的精细测量;船运货物失窃报警;净化海洋;海洋纠纷或海损事故的定点测定;港口交通管制;海洋灾难检测等。GPS技术的航空应用GPS技术在航空方面的应用主要表达在:民航飞机的在途自主导航;飞机精密着陆;飞机空中加油控制;飞机编队飞行的平安保护;航空援救的搜索和定点测量;机载地球物理勘探;飞机探测灾区大小和标定测量;摄影和遥感飞机的七维状态参数和三维姿态参数测量等。GPS技术的航天应用GPS技术在航天方面同样也有着很重要的作用:低轨道通讯卫星群的实时轨道测量;卫星入轨和卫星回收的实时点位测量;载入航天器的在轨防护探测;星载GPS的遮掩天体大小和大气参数测量;对地观测卫星的七维状态参数和三维状态参数测量[2]。由此可见,GPS技术已经延伸到各个领域的方方面面,但是要完成以上所述的各种用途,最根本的就是要具备能够接收GPS信号并且能够调制输出的设备,而这种设备最根本的功能就是能够显示当时所处地点的经纬度以及UTC标准时间。现在世面上已经有许多基于GPS接收模块所开发的产品,如GPS手持机、车载GPS导航仪等等,虽然其功能强大,但价格相对而言比拟昂贵,而且对于普通应用没有必要。所以基于这种情况下,本次设计针对普通用户使用GPS的切实需要,设计并制作基于单片机的GPS定位信息显示系统。1.2论文主要内容本次设计的主要任务是在GPS和单片机的理论知识根底上,选择适宜的单片机提取GPS接收模块接收的数据并且由液晶显示模块显示接收的数据。在此次设计过程中,主要熟悉所选用的GPS接收模块的性能指标,学习NMEA封包并懂得如何使用NMEA输出命令,结合单片机的相关知识能实现对GPS接收到的卫星信息进行提取,并在液晶显示器上选择性的显示需要的数据。第二章GPS定位信息显示系统方案设计2.1GPS全球定位系统简介全球定位系统(GPS)是本世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统。其主要目的是为陆、海、空三大领域提供实时、全天候和全球性的导航效劳,并用于情报收集、核爆监测和应急通讯等一些军事目的,是美国独霸全球战略的重要组成局部。全球定位系统由三局部构成:(1)地面控制局部,由主控站(负责管理、协调整个地面控制系统的工作)、地面天线(在主控站的控制下,向卫星注入寻电文)、监测站(数据自动收集中心)和通讯辅助系统(数据传输)组成。(2)空间局部,由24颗卫星组成,分布在6个轨道平面上。(3)用户装置局部,主要由GPS接收机和卫星天线组成[3]。这三局部的相互关系如图2.1所示。图2.1GPS全球定位系统组成1978年2月22日,第一颗GPS试验卫星的发射成功,标志着工程研制阶段的开始。1989年2月14日,第一颗GPS工作卫星的发射成功,宣告GPS系统进入了生产作业阶段。GPS系统经过16年的发射试验卫星,到开发GPS信号应用,进而发射工作卫星,终于在1994年3月建成了信号覆盖率到达了98%的GPS工作星座,它由24颗图2.2Block2卫星图全球定位系统有很多特点,其主要特点如下:(1)全天候;(2)全球覆盖;(3)三维定速定时高精度;(4)快速省时高效率;(5)应用广泛多功能。24颗GPS卫星在离地面2万公里的高空上,以12小时的周期环绕地球运行,使得在任意时刻,在地面上的任意一点都可以同时接收到6颗以上GPS卫星的定位信息。只要有4颗卫星的定位信息,GPS接收机就能向用户提供三维坐标、时间及移动速度等信息参数。由于卫星的位置精确可知,在GPS观测中,我们可得到卫星到接收设备的距离,根据三维坐标中的距离公式,利用3颗卫星,就可以组成3个方程式,解出观测点的位置(X,Y,Z)。考虑到卫星的时钟与接收机时钟之间的误差,实际上有4个未知数,X、Y、Z和钟差,因而需要引入第4颗卫星,形成4个方程式进行求解,从而得到观测点的经纬度和高程。由于卫星运行轨道、卫星时钟存在误差,大气对流层、电离层对信号的影响,以及人为的SA保护政策,使得民用GPS的定位精度只有100米。美国政府宣布从2000年起,在保证美国国家平安不受威胁的前提下,取消SA政策,GPS民用信号精度在全球范围内得到改善,利用C/A码进行单点定位的精度由100米提高到20米。为了到达更高的定位精度,往往还采用了差分GPS(DGPS)技术,建立基准站(差分台)进行GPS观测,利用的基准站精确坐标,与观测值进行比拟,从而得出一修正数,并对外发布。接收机收到该修正数后,与自身的观测值进行比拟,消去大局部误差,得到一个比拟准确的位置。实验说明,利用差分GPS2.2GPS信号接收方案选择要实现在液晶显示器上显示出接收到的GPS数据信息,首先要实现GPS信号的接收。在接收GPS信号方案上可以有两种选择。第一种方案是选择GPS接收芯片然后再根据芯片设计标准,设计外围电路和安装天线等,选择这个方案的优点是可以掌握到GPS接收局部的电路设计技术,但是这个方案的缺点也是显而易见的,首先实现的难度较大,不容易成功,其次由于GPS接收芯片一般都是厂商直接供货,单独采购价格会很高。第二种方案是选择成品的GPS接收模块,采用这个方案的优点是由于现阶段GPS接收模块的制造技术已经相当成熟,性能稳定并且使用非常方便,定位成功后直接就可以通过模块输出GPS相关信息。并且在经过大规模的商业化生产后价格已经能被我们所接受,这样的模块在市面上也能够容易的购置到。从上面的分析可以知道,选择GPS接收模块就能够很好的作为本次设计接收GPS定位信息的解决方案,因此我选择第二种方案来完本钱次设计。2.3GPS接收模块的研究GPS接收模块是接收机的关键局部,而且型号很多,功能各异,一般组成结构主要由低噪声下变频器、并行信号通道、CPU、储存器等组成。GPS接收模块通过它的接收天线获取卫星信号,经过变频、放大、滤波、相关、混频等一系列处理,可以实现对天线视界内卫星的跟踪、锁定和测量。在获取了卫星的位置信息和测算出卫星信号传播时间之后,即可计算出天线位置。用户通过输入输出接口,与GPS接收模块进行信息交换,实现功能。GPS接收模块内部结构如图2.3所示。图2.3GPS接收模块内部结构2.4总体方案的设计本次设计要求通过单片机控制GPS器件实现定位信息显示功能。在这里使用常见的MCS-51型单片机作为处理器,利用MCS-51单片机的串行接口接收SiRFStarIIGPS信号接收模块输出的数据信号,并通过软件方法筛选出其中有用的定位数据,最后通过单片机的并行接口输出至液晶显示模块显示的方案。该GPS定位信息显示系统硬件局部主要由以下几个局部组成:(1)接收局部:以SiRFStarIIGPS接收模块为核心的GPS接收机;(2)控制电路:由51单片机作为微处理器控制GPS信号;(3)显示局部:12864LCD液晶显示模块;(4)电源电路局部:用以提供系统工作时所必须的电。单片机系统:本次设计使用51单片机作为微处理器,控制GPS数据的读取和传输过程。利用其串行接口接收SiRFStarIIGPS接收模块输出的NMEA-0183语句数据,并将接收到的数据经过筛选和处理后发送到12864液晶显示器显示。外围电路:外围电路一局部是由GPS接收器件及其辅助电路组成,一局部是LCD液晶显示模块的电源电路和显示电路。SiRFStarIIGPS接收模块主要由变频器、信号通道、存储器、中央处理器和输入输出接口构成。它接收天线获取的卫星信号,经过变频、放大、滤波、相关、混频等一系列处理,可以实现对天线视界内卫星的跟踪、锁定和测量定位。单片机控制程序:编写程序,实现单片机控制系统的初始化,控制GPS器件完成数据的采集,进行相应的信号处理,并通过单片机接口输出至液晶显示模块显示必要的数据。由此可知:GPS接收模块将接收到的GPS卫星导航电文调制解码,转换为标准格式后,送给单片机,当单片机接收到GPS发送过来的导航电文后,经过片内程序的识别筛选,将筛选出来的导航电文送到显示模块,并且最后通过液晶显示器按照要求显示出来。第三章基于单片机的GPS硬件电路设计3.1基于单片机的GPS硬件电路总体结构根据总体设计方案,该基于单片机的GPS硬件电路设计主要由GPS信号接收局部〔SiRFStarIIGPS信号接收模块〕、控制芯片〔STC89C52单片机〕、显示局部〔12864LCD液晶显示模块〕这几局部构成。其大体结构框图如图3.1图3.1基于单片机的GPS硬件总体结构框图3.2基于单片机的GPS定位信息显示系统设计硬件电路简介STC89C52简介STC89C52是一个低电压,高性能CMOS8位单片机,采用40引脚双列直插封装方式。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容[4]。STC89C52引脚如图3.2所示:图3.2STC89C52引脚图其引脚说明如下:主电源引脚〔2根〕:VCC(Pin40):电源输入,接+5V电源;GND(Pin20):接地线。外接晶振引脚〔2根〕:XTAL1(Pin19):片内振荡电路的输入端;XTAL2(Pin18):片内振荡电路的输出端。控制引脚〔4根〕:RST(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位;ALE/PROG(Pin30):地址锁存允许信号;PSEN(Pin29):外部存储器读选通信号;EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平那么从内部程序存储器读指令。可编程输入/输出引脚〔32根〕:STC89C52单片机有4组8位的可编程I/O口,分别为P0、P1、P2、P3口,每个口有8根引脚,共32根。P0口〔Pin39~Pin32〕:8位双向I/O口线,名称为P0.0~P0.7;P1口〔Pin1~Pin8〕:8位准双向I/O口线,名称为P1.0~P1.7;P2口〔Pin21~Pin28〕:8位准双向I/O口线,名称为P2.0~P2.7;P3口〔Pin10~Pin17〕:8位准双向I/O口线,名称为P3.0~P3.7。STC89C52主要功能如表3.1所示。表3.1STC89C52主要功能主要功能特性兼容MCS51指令系统8K可反复擦写FlashROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能时钟电路STC89C52内部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由内部方式产生或外部方式产生。内部方式的时钟电路如图3.3(a)所示,在RXD和TXD引脚上外接定时元件,内部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.2~12MHz之间选择,电容值在5~30pF之间选择,电容值的大小可对频率起微调的作用[5]。外部方式的时钟电路如图3.3〔b〕所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片内时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。〔a〕内部方式时钟电路〔b〕外部方式时钟电路图3.3时钟电路(2)复位复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动[6]。除PC之外,复位操作还对其他一些存放器有影响,它们的复位状态如表3.2所示。表3.2一些存放器的复位状态存放器复位状态存放器复位状态PC0000HTCON00HACC00HTL000HPSW00HTH000HSP07HTL100HDPTR0000HTH100HP0-P3FFHSCON00HIPXX000000BSBUF不定IE0X000000BPCON0XXX0000BTMOD00HRST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。假设使用颇率为6MHz的晶振,那么复位信号持续时间应超过4us才能完成复位操作。整个复位电路包括芯片内、外两局部。外部电路产生的复位信号(RST)送至施密特触发器,再由片内复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到内部复位操作所需要的信号[7]。SiRFStarIIGPS信号接收模块该设计中GPS信号接收模块所选用的是SiRFStarIIGPS接收模块,该模块是由美国瑟孚科技所生产。主要使用到的引脚如图3.4所示。该模块具有12通道并行接收能力,所接收的GPS信号属于民用频段的L1信号〔1575.42MHz〕,在没有SA干扰的情况下平均定位误差为10米,动态速度误差为0.1米/秒,信号灵敏度到达-142dBm,冷启动定位时间为42秒,热启动时间为38秒,重新定位时间仅仅需要图3.4SiRFStarII引脚图GPS数据输出格式为标准的NMEA-0183标准,采集地理信息的更新速率为每两秒一次,地图坐标系为WGS-84坐标系[8]。该模块天线采用的是体积小、可靠性高、灵敏度高的微带天线,该天线封装在模块内部,更进一步的提高了整个模块的可靠性。该模块实物图如图3.5所示。图3.5GPS接收模块它的工作电压为2.7V-3.3V,工作电流仅为75mA,它由GSP2e数字IC、GRF2i射频IC和GSW2模块化软件组成。GSP2e主要集成了一个增强型GPS内核、一个50MHz的ARM7CPU、独立的内部总线和外部总线、1MbEDODRAM、高精度实时时钟、GPS接收机外部设备和2个UART。GRF2i主要由片内压控振荡器和基准振荡器、集成中频滤波器(IF)、集成LNA和数字接口等组成。GSW2模块化软件很容易集成到现有系统中,并提供功能强大的开发环境。SiRFStarII除增加了中央处理器和卫星信号追踪引擎,SiRFStarII在芯片组中集成了兆位存储器(DRAM),这个是其它同类产品的八倍。这使其不仅可执行各项GPS功能,还能为用户应用提供额外存储。将IF滤波器集成到射频芯片内而无需新增外部滤波器,从而进一步降低了元件的数目并增加了可靠性。该芯片的主要特征如表3.3所示。表3.3SiRFStarII主要特征SiRFStarII特点功能用处信号捕捉从有遮挡地区走出时快速重捕卫星信号在遮挡环境下提供更多的定位结果信号跟踪跟踪弱信号比正常信号信噪比低20dB改善信号可利用性,在信号衰减严重的地方也可定位单卫星定位在短暂的仅能收到一颗卫星的情况下定位在信号阻塞的地区也可定位,适于车载GPS多级消除误差减小GPS反射径带来的误差使GPS定位准确度提高到5m差分GPS周期〔大约30分钟〕更新星历和修正时间功率几乎变成了以前的20%,增加使用时间功率分配1s内有800ms的时间接收机不工作,仅仅有200ms的时间用于重捕、跟踪、定位工作在不想频繁给出定位结果的情况下,节省功耗3.2.312864液晶显示模块介绍(1)液晶显示模块概述12864液晶显示模块,可显示汉字及图形,内置8192个中文汉字〔16X16点阵〕、128个字符〔8X16点阵〕及64X256点阵显示RAM〔GDRAM〕。12864液晶显示模块引脚如图3.6所示。图3.612864液晶显示电路图主要技术参数和显示特性:电源:VDD3.3V~5V(内置升压电路,无需负压);显示内容:128列×64行;显示颜色:黄绿;显示角度:6:00钟直视;LCD类型:STN;与MCU接口:8位或4位并行/3位串行;配置LED背光;多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等;逻辑工作电压(VDD):4.5~5.5V;电源地(GND):0V;工作温度(Ta):0~60℃(常温)/-20~75℃〔宽温〕[9]。12864有20接口引脚,引脚说明如表3.4所示。表3.412864引脚说明引脚序号名称说明1CS1#U1片选。2CS2#U2片选。3VSS电源地。4VDD电源输入〔+5V〕。5VO液晶显示比照度调节。6DI数据输入。7R/W读写选择。R/W=1,读状态;R/W=0,写状态。8E读写使能。9-16D0-D7数据总线。17RST液晶模组复位。RST#=L,复位。18VEE液晶驱动电源。19VLED+LED电源正〔5.0V〕。20VLED-LED电源地。3.3基于单片机的GPS硬件连接介绍整个硬件设计要求GPS接收模块输出的信号通过单片机STC89C52、GPS信号接收模块、12864液晶显示模块、电源相连接实现系统功能。硬件电路设计如图3.7所示。图3.7GPS硬件电路图第四章基于单片机的GPS软件设计4.1NMEA-0183数据格式NMEA-0183是美国国家海洋电子协会〔NationalMarineElectronicsAssociation〕为海用电子设备制定的标准格式。它是在过去海用电子设备的标准格式0180和0182的根底上,增加了GPS接收机输出的内容而完成的。目前广泛采用的是Ver2.00版本。现在除少数早期的GPS接收机外,几乎所有的GPS接收机均采用了这一格式。此协议是为了在不同的GPS导航设备中建立统一的RTCM标准。这种格式的广泛使用使得GPS接收模块的通用化和互换性大大提高。这种格式所输出的语句采用的是ASCII字符码,包含了纬度、经度、速度、日期、时间、航向、以及卫星信号情况等信息。其串行通信默认参数为:波特率=9600bps,数据位=8bit,开始位=1bit,停止位=1bit,无奇偶校验。帧格式形如:$aaccc,ddd,ddd,…,ddd*hh<CR><LF>(1)“$〞:帧命令起始位;(2)aaccc:地址域,前两位为识别符,后三位为语句名;(3)ddd…ddd:数据;(4)“*〞:校验和前缀;(5)hh:校验和〔checksum〕,$与*之间所有字符ASCII码的校验和〔各字节做异或运算,得到校验和后,再转换16进制格式的ASCII字符。〕(6)<CR><LF>:CR〔CarriageReturn〕+LF〔LineFeed〕帧结束,回车和换行。输入语句NMEA-0183输入语句是指GPS接收模块可以接收的语句。输入语句包括初始位置,时间,秒脉冲状态,差分模式,NMEA输出间隔等设置信息。这些语句是GPS接收机可以接受的语句。一般情况下初始化信息语句为PGRMI。$GPRMI,<1>,<2>,<3>,<4>,<5>,<6>,<7>*hh<CR><LF><1>纬度ddmm.mmmm〔度分〕格式〔前面的0也将被传输〕;<2>纬度半球N〔北半球〕或S〔南半球〕;<3>经度dddmm.mmmm〔度分〕格式〔前面的0也将被传输〕;<4>经度半球E〔东经〕或W〔西经〕;<5>UTC日期,ddmmyy〔日月年〕格式;<6>UTC时间,hhmmss〔时分秒〕格式;<7>接收机命令,A=自动定位,R=机器重新启动。4.1.2SiRFStarII的输出语句有十余种,其主要语句有GPALM〔历书数据〕、GPGGA(GPS标准数据,定位数据)、GPGSV〔卫星状态〕、GPGSA、GPRMC、GPVTG、PGRME、PGRMF、PGRMT、PGRMV〔GARMIN定义的语句,3D速度信息〕、LCGLL、LCVTG〔NMEA标准语句〕等。可通过GPS串口调试软件发送相应的命令语句给SiRFStarII芯片,此后芯片会根据命令语句设置参数。几种常用的数据格式如下:〔1〕GPS标准数据〔GPGGA〕,其结构为:$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*<15><CR><LF><1>UTC时间,格式为hhmmss.sss;<2>纬度,格式为ddmm.mmmm〔前导位数缺乏那么补0〕;<3>纬度半球,N或S〔北纬或南纬〕;<4>经度,格式为dddmm.mmmm〔前导位数缺乏那么补0〕;<5>经度半球,E或W〔东经或西经〕;<6>定位质量指示,0=定位无效,1=定位有效;<7>使用卫星数量,从00到12〔前导位数缺乏那么补0〕;<8>水平精确度,0.5到99.9;<9>天线离海平面的高度,-9999.9到9999.9米<10>高度单位,M表示单位米;<11>大地椭球面相对海平面的高度,-999.9到9999.9米;<12>高度单位,M表示单位米;<13>差分GPS数据期限〔RTCMSC-104〕,最后设立RTCM传送的秒数量;<14>差分参考基站标号,从0000到1023〔前导位数缺乏那么补0〕;<15>校验和。〔2〕可视卫星状态输出语句〔GPGSV〕,其结构为:$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,...,<4>,<5>,<6>,<7>*<8><CR><LF><1>总的GSV语句电文数;<2>当前GSV语句号;<3>可视卫星总数,00至12;<4>卫星编号,01至32;<5>卫星仰角,00至90度;<6>卫星方位角,000至359度,实际值;<7>信噪比〔C/No〕,00至99dB;无表未接收到讯号;<8>校验和。〔3〕推荐最小GPS/TRANSIT数据〔GPRMC〕,其结构为:$GPRMC,<1>,<2>,<2>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>其中“GP〞为交谈识别符;“RMC〞为语句识别符;“hh〞为校验和,其代表了“$〞与“*〞之间所有字符的按位异或值〔不包括这两个字符〕。$GPRMC语句数据区的内容为:<1>定位点的协调世界时间〔UTC〕,hhmmss〔时分秒〕格式;<2>定位状态,A=有效定位,V=无效定位;<3>定位点纬度,ddmm.mmmm〔度分〕格式;<4>纬度半球,N〔北半球〕或S〔南半球〕;<5>定位点经度,dddmm.mmmm〔度分〕格式;<6>经度半球,E〔东经〕或W〔西经〕;<7>地面速率,000.0~999.9节;<8>地面航向,000.0~359.9度;<9>UTC日期,ddmmyy〔日月年〕格式;<10>磁偏角,000.0~180度;<11>磁偏角方向,E〔东〕或W〔西〕;<12>工作模式:A=自主,D=差分,E=评估,N=数据无效[10]。4.2基于单片机的GPS定位系统软件开发环境―KeiluVision24.2.18051开发工具KeiluVision2是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统C语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,它还能嵌入汇编,您可以在关键的位置嵌入。KeilC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保存了汇编代码高效,快速的特点。C51编译器功能的不断增强,使我们可以更加贴近CPU本身及其他的衍生品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包括:编译器,汇编器,实时操作系统,工程管理器,调试器。uVision2IDE可为它们提供单一而灵活的开发环境[11]。KeiluVision2与同类开发环境具有以下优点:(1)真正的集成调试环境,集成了编缉器、编译器、调试器;(2)众多强大软硬件调试手段,包括逻辑分析仪、跟踪器、逻辑笔、波形发生器、影子存储器、记时器、程序时效分析、数据时效分析、硬件测试仪、事件触发器;(3)所有类型的单片机集成在一个调试环境下,支持汇编、C、PL/M源程序混合调试;(4)支持软件模拟,支持工程管理;(5)支持点屏功能,直接点击屏幕就可以观察变量的值,方便快捷;(6)功能强大的观察窗口,支持所有的数据类型;(7)树状结构显示,一目了然;(8)在线直接修改、编译、调试源程序,错误指令定位[12]。uVision2集成开发环境(1)工程管理工程〔project〕是由源文件、开发工具选项以及编程说明三局部组成的。一个单一的uVision2工程能够产生一个或多个目标程序。产生目标程序的源文件构成“组〞。开发工具选项可以对应目标,组或单个文件。uVision2包含一个器件数据库(devicedatabase),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针(extradatapointer)或者加速器(mathaccelerator)的特性。uVision2可以为片外存储器产生必要的连接选项:确定起始地址和规模[13]。(2)集成功能uVision2的强大功能有助于用户按期完工。集成源极浏览器利用符号数据库使用户可以快速浏览源文件。用详细的符号信息来优化用户变数存储器;文件寻找功能:在特定文件中执行全局文件搜索;工具菜单:允许在V2集成开发环境下启动用户功能;可配置SVCS接口:提供对版本控制系统的入口;PC-LINT接口:对应用程序代码进行深层语法分析;Infineon的EasyCase接口:集成块集代码产生;Infineon的DAVE功能:协助用户的CPU和外部程序。DAVE工程可被直接输入uVision2。编辑器和调试器(1)源代码编辑器uVision2编辑器包含了所有用户熟悉的特性。彩色语法显像和文件辩识都对C源代码进行和优化。可以在编辑器内调试程序,它能提供一种自然的调试环境,使你更快速地检查和修改程序。(2)断点uVision2允许用户在编辑时设置程序断点〔甚至在源代码未经编译和汇编之前〕,用户启动V2调试器之后,断点即被激活。断点可设置为条件表达式,变量或存储器访问,断点被触发后,调试器命令或调试功能即可执行。在属性框(attributescolumn)中可以快速浏览断点设置情况和源程序行的位置,代码覆盖率信息可以让你区分程序中已执行和未执行的局部。调试函数语言uVision2中,你可以编写或使用类似C的数语言进行调试。内部函数:如printf,memset,rand及其它功能的函数;信号函数:模拟产生CPU的模拟信号和脉冲信号;用户函数:扩展指令范围,合并重复动作。变量和存储器用户可以在编辑器中选中变呈来观察其取值。双层窗口显示,可进行以下调整:当前函数的局部变量;用户在两个不同watch窗口页面上的自定义变量;堆栈调用(callstack)页面上的调用记录〔树〕(calltree);不同格式的四个存储区[14]。测试程序uVision2调试器具备所有常规源极调试,符号调试特性以及历史跟踪,代码覆盖,复杂断点等功能。DDE界面和shift语言支持自动程序测试。CPU和外设模拟装置uVision2为8051及衍生产品提供了高速CPU模拟功能和片上扩展口.在对话框内可直接观察和修改I/O值,也可以用预装的C-LIKE宏指令书写符号函数来提供动态输入。(2)目标监控器uVision2含一个可配置的监控器,可测试目标器件上的软件体。监控器用uVision2的调试器直接工作,可支持代码区。它要求目标系统具备6字节堆栈空间,6KB的代码ROM和256字节XdataRAM。(3)MCB517/251启开工具包在开始一项8051工程时,MCB启开工具会对你有很大帮助。每一个启开工具包括一套2K字节的开发工具和许多可快速运行的举例程序。用户可在检测8051性能的同时,查看开发工具的可行性。MCB517AC板含高性能InfineonC517A单片机,它提供标准8052外围设备和A/D转换器,PWM,搜索/比拟,8位数据指针,一个高速运算单元[15]。同时包含对81C90CAN控制器和代码区的支持。本次设计软件采用了C语言程序编写,并在KeiluVision2开发环境下编译、调试。KeilC编译步骤KeiluVision2C51软件是目前功能最强大的单片机C语言集成开发环境,这里介绍简单的编译步骤。运行Keilc51进入编辑界面,如图4.1所示。图4.1Keilc51编辑界面首先进入菜单project/newproject建立一个新工程,如图4.2所示。图4.2建立新工程选择要保存的路径,输入工程文件的名字,如图4-3所示。图4.3保存路径根据使用的单片机选择相应的型号,如图4.4所示。图4.4选择单片机型号(5)单击“Target1”前面的“+〞号,然后在“SourceGroup1”上单击右键,弹出如图4.5所示界面参加源文件。如还没有源文件请先进入菜单File/New生成一个图4.5参加源文件界面(6)进行输出文件设置,进入菜单project/optionsfortarget选择OUTPUT选项卡,勾选CrestHEXFile项,如图4.6所示。图4.6输出文件设置(7)程序编写完成后进入菜单Project/Buildtarget编译工程,如图4.7所示。生成的*.HEX文件即可作为下载程序使用[13]。图4.7生成文件4.3基于单片机的GPS软件设计思路该GPS设计的核心局部是GPS接收模块与单片机的通讯,以及单片机将收到的信息筛选编排显示位置后送到LCD液晶显示模块显示。在设计该软件时采用了模块化的思想,之所以采用模块化的设计思想,主要是想到了软件模块化前方便软件的调试,同时也方便了该软件的移植,在不同的硬件平台上运行该软件只需要更改相应的软件模块就可以实现。该软件模块设计分为液晶模块初始化模块,GPS数据接收模块,单片机模块这三个主要模块。其程序流程图如图4.8所示。图4.8软件程序流程图4.4模块软件设计4.4.1液晶模块初始化模块在该设计中所使用的是12864液晶显示模块,其初始化程序如下所示:#include"LCD.h"voidclr_screen(){Lcd_WriteCmd(0x34);//扩充指令操作delay(5);Lcd_WriteCmd(0x30);//根本指令操作delay(5);Lcd_WriteCmd(0x01);//清屏delay(5);}voidLcd_WriteCmd(ucharcmd){ LCD_RS=0; LCD_RW=0; LCD_EN=0; _nop_(); _nop_(); P0=cmd; DelayNOP();LCD_EN=1; DelayNOP(); LCD_EN=0;}voidLcd_WriteDat(uchardat){ LCD_RS=1; LCD_RW=0; LCD_EN=0;P0=dat; DelayNOP(); LCD_EN=1;DelayNOP(); LCD_EN=0;}voidLcd_Init(void){ LCD_PSB=1;//并口方式 Lcd_WriteCmd(0x34);//扩充指令操作 delay(5); Lcd_WriteCmd(0x30);//根本指令操作 delay(5); Lcd_WriteCmd(0x0C);//显示开,关光标 delay(5); Lcd_WriteCmd(0x01);//去除LCD的显示内容 delay(5);}voidLcd_SetPos(ucharX,ucharY){ucharpos;if(X==0){X=0x80;}elseif(X==1){X=0x90;}elseif(X==2){X=0x88;}elseif(X==3){X=0x98;}pos=X+Y;Lcd_WriteCmd(pos);//显示地址}voidLcd_DispLine(ucharline,ucharpos,uchar*str){ inti=0; Lcd_SetPos(line,pos); while(str[i]!='\0') { Lcd_WriteDat(str[i]); i++; }}4.4.2GPS数据接收模块首先要对GPS接收模块是否有信号发送给单片机进行识别,而且由于GPS接收模块发送出来的数据不是我们全部需要的,所以有必要再对语句进行识别,然后取入我们所需要的语句GPRMC。其识别程序如下:if(GPS_RMC_Parse(rev_buf,&GPS))//解析GPRMC{RMC_YES;GPS_DisplayOne(); //显示GPS信息error_num=0;gps_flag=0;rev_stop=0;}else{error_num++;if(error_num>=20)//如果数据无效超过20次{RMC_NO;error_num=20;GPS_Init();//返回初始化}gps_flag=0;rev_stop=0;REV_NO;}程序代码详见附录。第五章系统调试与实验结果完成了系统的硬件设计、制作和软件编程之后,要使系统能够按照设计意图正常运行,必须进行硬件和软件系统调试。5.1硬件调试硬件调试的主要任务是排除硬件故障,其中包括设计的错误和工艺性故障等。检查所设计的硬件电路板所有的器件和引脚是否正确。第一步,我用数字万用表进行了逐一对点的检查,检查各导线间是否有短路与开路的故障。第二步测输入5V电源〔0V地〕线是否与电路中的对应点的电源〔地〕线相连接是否正确;及检查开关是否正常,是否连接正确。测芯片管座与芯片管座之间用导线连接起来的对应脚是否导通和截止。(2)将仿真插头插入单片机插座进行调试,检查各接口是否满足设计的要求。(3)将程序代码经过Keil软件仿真生成的〔.hex〕文件,用编程器将生成的文件导入单片机STC89C52中。(4)将写入程序的单片机插入硬件电路单片机管座,查看液晶显示器12864显示结果是否符合设计要求。5.2软件调试软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序的错误,同时也能发现硬件的故障。软件调试是一个模块一个模块进行的,首先单独调试各子程序是否能够按照预期的功能,接口电路的控制是否正常,最后调试整个程序,尤其注意的是各模块间能否正确的传递参数。(1)检查12864液晶显示模块程序,观察在液晶显示器上是否能够显示相应的字符。(2)检查GPS模块程序,通过观察12864液晶显示情况理解GPS信号接收状况。(3)通过GPS模块程序和12864液晶显示模块程序的结合,观察12864液晶显示器上的GPS显示信息。5.3实验结果经过软件局部和硬件局部的调试,最后实现了其功能。GPS初始化如图5.1所示。图5.1GPS初始化时间、经纬度显示结果如图5.2所示。图5.2时间、经纬度显示结果5.4实验结果分析图5-2所示的实验结果是我在合肥学院竹苑A座419寝室测试的结果。谷歌地图显示这个位置的经纬度如图5.3所示。图5.3谷歌地图显示结果GPS定位显示系统设计所测量出来的结果中,时间是很精确的,但是经纬度有所差异,根据我的装置显示的结果是北纬31度45分15秒,东经117度14分51秒。谷歌地图上显示的结果是北纬31.7505度,东经117.2530度。经过单位换算可知,谷歌地图显示的结果是北纬31度45分18秒,东经117度15分10秒。由于我所选用的GPS接收模块的版本比拟低,而且在实验过程中有其他因素干扰,比方天气方面和电离层的影响,以及在谷歌地图上点选的位置有误差,最终使得我所测量的结果与谷歌地图之间有些许误差,但是误差是能够被接受的,因此,本次试验结果是可靠、有效的,满足设计要求。第六章总结随着GPS的应用越来越广泛,GPS设备普及速度也将大大加快,在我们国内GPS产业才刚刚起步,GPS产业的兴起势必也将大大的推进GPS在民间的应用。GPS已在各个领域发挥了重要的作用,为促进人类开展作出了不可估量的奉献。不过由于专业GPS设备价格昂贵,普通消费者难以承受,所以也限制了GPS在民间的大量应用,现在各个GPS厂商的当务之急便是降低GPS的制造本钱,削减一些普通消费者平时用不到的专业功能,保存一些根本的实用功能,以加快GPS在民间普及的速度。本次毕业设计,主要是了解GPS的原理,熟悉GPS接收机的工作原理及其各局部工作流程。GPS信号处理模块由SiRFStarII实现,通过SiRFStarII与MCS-51兼容系列单片机相连,配备了所需的外围电路,同时配有液晶显示器,可以显示字符,并详细介绍了该GPS接收机的硬件和软件设计。毕业设计是本科学习阶段一次非常重要的理论与实际相结合的时机,通过本次比拟完整的设计,我摆脱了单纯的理论知识学习状态,通过理论和实际相结合,锻炼了我的综合运用所学知识的能力,以及解决实际工程的能力,同时也提高了我查阅文献资料、设计手册、设计标准以及绘图的水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都能使我的能力得到提升,经验得到丰富。顺利如期的完本钱次毕业设计给了我很大的信心,让我了解专业知识的同时也对本设计的开展前景充满信心。提高是有限的但也是全面的,正是这一次设计让我积累了无数实际经验,使我的头脑更好地被知识武装起来,让我在未来的工作学习中有更好的应变能力,更强的沟通力和理解力。由于水平有限和时间问题,有许多缺乏。本设计只是GPS入门级的设计,不能满足现在市场上日益剧烈的竞争环境,实用性还有待提高,功能也有待完善。总之,在做这次毕业设计的过程中,既复习了已学的专业知识,又学到了实际经验,是我人生中一次难得的学习经历,更是对自己综合能力的考验和提高。致谢本课题是在王庆龙老师的悉心指导下完成的,论文从选题到写作及最后成稿,王老师都给予了我精心的指导和极大的帮助。王老师渊博的科学知识、远见卓识的科学创新和严谨的治学态度给了我深远的影响,同时王老师随和的性格更让我感到亲切。在设计阶段,王老师在资料搜集、程序调试、论文写作等方面都给予我严格的要求和关键性的指导,在此衷心感谢几个月来王老师对我的关心和指导。感谢电子系所有老师在毕业设计期间为我们提供良好的实验环境。此外,我还要对在这次设计中,帮助和支持我的同学,表示感谢!王致忠2023年5月于合肥学院参考文献[1]刘基余.GPS卫星导航定位原理与方法[M],北京:科学出版社,2003.[2]刘基余,李征航.全球定位系统原理及其应用[M],北京:测绘出版社,1993.[3]王惠南.GPS导航原理与应用[M],北京:科学出版社,2003.[4]潘永雄.新编单片机原理与应用[M],西安:西安电子科技大学出版社,2003.[5]张鹏.单片机原理及应用[M],成都:电子科技大学出版社,2004.[6]张立科.单片机典型模块设计实例导航[M],北京:人民邮电出版社,2000.[7]余锡存,曹国华.单片机原理及接口技术[M],西安:西安电子科技大学出版社,2023.[8]刘晓,伍小东,姚军光,等.基于单片机采集GPS数据系统的设计[J],青岛科技大学学报,2006,27(2):172-175.[9]姚敏,郭庆.基于MCS-51系列单片机的GPS独立定位设备的研究[J],计算机与信息技术,2006,2(8):79-82.[10]李勇军,杨青,庞树杰,等.基于OEM板的GPS接收机设计[J],农机化研究,2006,5(12):109-111.[11]王丙祥,李建海.基于89C52的GPS板电路设计与实现[J],西安文理学院学报:自然科学版,2007,10(3):98-101.[12]AnnaM.Murphy,ShinichiTsutsumi,PererGaussen.ALow-Power,Low-CostBipolarGPSReceiverChip[J],IEEEJOURNALOFSOLID-STATECIRCUITS.1997,4(4):587-591.[13]李洪涛.GPS应用程序设计[M],北京:科学出版社,1999.[14]许进,周宁.GPS接收机的单片机通讯接口[J],电子器件,1999,22(3):23-26.[15]索明何,饶运涛,邢海霞,等.基于单片机的液晶显示系统设计[J],科技广场,2023,7(2):22-24.附录主程序//定义头文件,函数和变量#include<reg52.h>#include<stdio.h>#include<string.h>#include"GPS.h"#include"LCD.h"#include"display.h"charxdatarev_buf[80];//接收缓存ucharxdatarev_start=0;//接收开始标志ucharxdatarev_stop=0;//接收停止标志ucharxdatagps_flag=0;//GPS处理标志ucharxdatachange_page=0;//换页显示标志ucharxdatanum=0;voidUart_Init(void){ TMOD=0x21; //00100001 PCON=0X00; TH0=0x3c; TL0=0xb0; TH1=0xFA; //11111010 TL1=0xFA; //11111010 TR1=1;//开启定时器1 REN=1;//允许接收数据 SM0=0; SM1=1; TI=0; RI=0; EA=1;//开总中断 ES=1;//串口1中断允许 ET0=1;//定时器1中断允许}voidmain(void)//主函数{ ucharerror_num=0; Lcd_Init(); //初始化LCD GPS_Init();//初始化GPS rev_stop=0; REV_NO; while(1) { if(rev_stop)//如果接收完一行 { TR0=1;//开启定时器 REV_YES;if(GPS_RMC_Parse(rev_buf,&GPS))//解析GPRMC{RMC_YES;GPS_DisplayOne(); //显示GPS信息 error_num=0;gps_flag=0;rev_stop=0;}else{error_num++;if(error_num>=20)//如果数据无效超过20次{RMC_NO;error_num=20;GPS_Init();//返回初始化}gps_flag=0;rev_stop=0;REV_NO;}}}voidtimer0(void)interrupt1{ staticucharcount=0; TH0=0x3c; TL0=0xb0; count++; if(count==200)//2*5秒钟 { count=0; change_page++;//换页 if(change_page==10) change_page=0; } }voidUart_Receive(void)interrupt2{ ucharch; ES=0; if(RI) { ch=SBUF; if((ch=='$')&&(gps_flag==0))//如果收到字符'$',便开始接收 { rev_start=1; rev_stop=0; } if(rev_start==1)//标志位为1,开始接收 { rev_buf[num++]=ch;//字符存到数组中 if(ch=='\n')//如果接收到换行 { rev_buf[num]='\0'; rev_start=0; rev_stop=1; gps_flag=1; num=0; } } } RI=0; //RI清0,重新接收 ES=1; }SiRFStarIIGPS接收模块程序#include"GPS.h"#include"LCD.h"#include<string.h>ucharcodeinit1[]={"GPS显示终端"};ucharcodeinit3[]={"GPS初始化"};ucharcodeinit4[]={"搜索定位卫星"};staticucharGetComma(ucharnum,char*str);staticdoubleGet_Double_Number(char*s);staticfloatGet_Float_Number(char*s);staticvoidUTC2BTC(DATE_TIME*GPS);voidGPS_Init(void){ Lcd_DispLine(0,0,init1); Lcd_DispLine(1,0,init3); Lcd_DispLine(2,0,init4);}intGPS_RMC_Parse(char*line,GPS_INFO*GPS){ ucharch,status,tmp; floatlati_cent_tmp,lati_second_tmp; floatlong_cent_tmp,long_second_tmp; char*buf=line; ch=buf[5]; status=buf[GetComma(2,buf)]; if(ch=='C')//如果第五个字符是C,($GPRMC) { if(status=='A')//如果数据有效,那么分析 { GPS–>NS=buf[GetComma(4,buf)]; GPS–>EW=buf[GetComma(6,buf)]; GPS->latitude=Get_Double_Number(&buf[GetComma(3,buf)]); GPS->longitude=Get_Double_Number(&buf[GetComma(5,buf)]); GPS->latitude_Degree=(int)GPS->latitude/100;//别离纬度 lati_cent_tmp=(GPS->latitude-GPS->latitude_Degree*100); GPS->latitude_Cent=(int)lati_cent_tmp; lati_second_tmp=(lati_cent_tmp-GPS->latitude_Cent)*60; GPS->latitude_Second=(int)lati_second_tmp; GPS->longitude_Degree=(int)GPS->longitude/100; //别离经度 long_cent_tmp=(GPS->longitude-GPS->longitude_Degree*100); GPS->longitude_Cent=(int)long_cent_tmp; long_second_tmp=(long_cent_tmp-GPS->longitude_Cent)*60; GPS->longitude_Second=(int)long_second_tmp; GPS->D.hour=(buf[7]-'0')*10+(buf[8]-'0');//时间 GPS->D.minute=(buf[9]-'0')*10+(buf[10]-'0'); GPS->D.second=(buf[11]-'0')*10+(buf[12]-'0'); tmp=GetComma(9,buf); GPS->D.day=(buf[tmp+0]-'0')*10+(buf[tmp+1]-'0');//日期 GPS->D.month=(buf[tmp+2]-'0')*10+(buf[tmp+3]-'0'); GPS->D.year=(buf[tmp+4]-'0')*10+(buf[tmp+5]-'0')+2000; UTC2BTC(&GPS->D); return1; } } return0;}intGPS_GGA_Parse(char*line,GPS_INFO*GPS){ ucharch,status; char*buf=line; ch=buf[4]; status=buf[GetComma(2,buf)]; if(ch=='G')//$GPGGA { if(status!=',') { return1; } } return0;}staticfloatStr_To_Float(char*buf){ floatrev=0; floatdat; intinteger=1; char*str=buf; inti; while(*str!='\0') { switch(*str) { case'0': dat=0; break; case'1': dat=1; break; case'2': dat=2; break; case'3': dat=3; break; case'4': dat=4; break; case'5': dat=5; break; case'6': dat=6; break; case'7': dat=7; break; case'8': dat=8; break; case'9': dat=9; break; case'.': dat='.'; break; } if(dat=='.') { integer=0; i=1; str++; continue; } if(integer==1) { rev=rev*10+dat; } else { rev=rev+dat/(10*i); i=i*10; } str++; } returnrev;}staticfloatGet_Float_Number(char*s){ charbuf[10]; uchari; floatrev; i=GetComma(1,s); i=i-1; strncpy(buf,s,i); buf[i]=0; rev=Str_To_Float(buf); returnrev; }staticdoubleStr_To_Double(char*buf){ doublerev=0; doubledat; intinteger=1; char*str=buf; inti; while(*str!='\0') { switch(*str) { case'0': dat=0; break; case'1': dat=1; break; case'2': dat=2; break; case'3': dat=3; break; case'4': dat=4; break; case'5': dat=5; break; case'6': dat=6; break; case'7': dat=7; break; case'8': dat=8; break; case'9': dat=9; break; case'.': dat='.'; break; } if(dat=='.') { integer=0; i=1; str++; continue; } if(integer==1) { rev=rev*10+dat; } else { rev=rev+dat/(10*i); i=i*10; } str++; } returnrev;}staticdoubleGet_Double_Number(char*s){ charbuf[10]; uchari; doublerev; i=GetComma(1,s); i=i-1; strncpy(buf,s,i); buf[i]=0; rev=Str_To_Double(buf); returnrev; }staticucharGetComma(ucharnum,char*str){ uchari,j=0; intlen=strlen(str); for(i=0;i<len;i++) { if(str[i]==',') j++; if(j==num) returni+1; } return0; }staticvoidUTC2BTC(DATE_TIME*GPS){ GPS->second++; if(GPS->second>59) { GPS->second=0; GPS->minute++; if(GPS->minute>59) { GPS->minute=0; GPS->hour++; } } GPS->hour=GPS->hour+8; if(GPS->hour>23) { GPS->hour-=24; GPS->day+=1; if(GPS->month==2||GPS->month==4||GPS->month==6||GPS->month==9||GPS->month==11) { if(GPS->day>30) { GPS->day=1; GPS->month++; } } else { if(GPS->day>31) { GPS->day=1; GPS->month++; } } if(GPS->year%4==0) { if(GPS->day>29&&GPS->month==2) { GPS->day=1; GPS->month++; } } else { if(GPS->day>28&&GPS->month==2) { GPS->day=1; GPS->month++; } } if(GPS->month>12) { GPS->month-=12; GPS->year++; } }}voidInt_To_Str(intx,char*Str){ intt; char*Ptr,Buf[5]; inti=0; Ptr=Str; if(x<10) //当整数小于10时,转化为"0x"的格式 { *Ptr++='0'; *Ptr++=x+0x30; } else { while(x>0) { t=x%10; x=x/10; Buf[i++]=t+0x30; //通过计算把数字转化成ASCII码形式 } i--; for(;i>=0;i--) //将得到的字符串倒序 { *(Ptr++)=Buf[i]; } } *Ptr='\0';}12864液晶显示模块程序#include"LCD.h"voidclr_screen(){Lcd_WriteCmd(0x34);//扩充指令操作delay(5);Lcd_WriteCmd(0x30);//根本指令操作delay(5);Lcd_WriteCmd(0x01);//清屏delay(5);}voidLcd_WriteCmd(ucharcmd){ LCD_RS=0; LCD_RW=0; LCD_EN=0; _nop_(); _nop_(); P0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电极氧化镁粉项目可行性研究报告
- 割管机行业市场发展及发展趋势与投资战略研究报告
- 2025年度公司单位向个人提供自驾租车服务合同
- 2025年度公路运输合同车辆维护保养协议
- 2025年度汽车销售代理佣金支付合同
- 2025年工业产品市场推广合作合同模板
- 2025年度房地产开发项目招投标及合同风险评估
- 2025年度国际贸易货物检验检疫采购合同样本
- 2025年度公路运输合同违约责任及赔偿标准
- 2025年度城市轨道交通运营维护咨询合同
- 26个英文字母书写(手写体)Word版
- GB/T 13813-2023煤矿用金属材料摩擦火花安全性试验方法和判定规则
- 动物检疫技术-动物检疫的方法方式(动物防疫与检疫技术)
- DB31 SW-Z 017-2021 上海市排水检测井图集
- 日语专八分类词汇
- GB/T 707-1988热轧槽钢尺寸、外形、重量及允许偏差
- GB/T 33084-2016大型合金结构钢锻件技术条件
- 高考英语课外积累:Hello,China《你好中国》1-20词块摘录课件
- 茶文化与茶健康教学课件
- 降水预报思路和方法
- 虚位移原理PPT
评论
0/150
提交评论