基于单片机的GPS时间校准设计(63页).doc
-基于单片机的GPS时间校准设计-第 62 页 请输入学校名称请输入专业 基于单片机的GPS时间校准设计 姓 名: 请输入姓名 学 号: 请输入学号 指导教师:请输入指导教师 2022年8月28日摘 要:2Abstract4第一章 概述51.1实时时钟研究的背景及意义51.2论文主要研究内容51.2.1 系统设计实现的目标51.2.2 系统的总体设计5第二章 硬件电路设计72.1单片机控制部分72.2 DS1302时钟芯片部分102.3 LCD1602液晶显示部分122.5.2 1602引脚功能说明122.5.3 1602LCD的指令说明及时序132.5.4 1602LCD的RAM地址映射及标准字库表142.5.5 1602LCD的一般初始化(复位)过程162.4.6 1602LCD的电路连接162.4 GPS模块VK2828U7G5LF部分17第三章 软件部分设计213.1 按键程序流程图21结束语30致谢词31参考文献32附录33硬件原理图与PCB图33源程序:35摘 要:本文介绍了基于STC89C52单片机的多功能电子万年历的硬件结构和软硬件设计方法。本设计由数据显示模块、GPS模块、时间处理模块和按键输入模块四个模块组成。系统以STC89C52单片机为控制器,以DS1302时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。GPS模块采用了VK2828U7G5LF,万年历采用直观的数字显示,数据显示采用1602液晶显示模块,可以在LCD1602上同时显示年、月、日、周日、时、分、秒,和GPS模块的工作模式。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。关键字:单片机,时钟芯片, 温度传感器, 1602液晶显示器Abstract This paper introduces the hardware structure of the electronic calendar based on STC89C52 single-chip microcomputer and the hardware and software design method.This design by the dSTCa display module, GPS module, time processing module and key input module of four modules.System with STC89C52 single-chip microcomputer as the controller, with DS1302 clock chip DS1302 calendar calendar and time, it can be for years, months, days, hours, minutes, seconds time, also has a leap year compensSTCion and other.Key words: single chip, the clock chip, temperSTCure sensor, 1602 liquid crystal display第一章 概述1.1实时时钟研究的背景及意义在现实我们生活中每个人都可能有自己的时钟,光阴在永不停息的流逝,有了时钟人们就能随着时间有计划的过着每一天。然而现在绝大部分的时钟有的需要不断地跟换电池,有些时钟需要外接电源,如果一旦电池没电或者外接电源无法供电,时钟就会停止计时了。而美国DALLAS 公司的新型时钟日历芯片DS1302就能解决这一问题。该器件能提供实时时钟(RTC)/日历、定时闹钟。少于31天的月份,月末日期可自动调整,其中包括闰年补偿。该器件还可以工作于24小时货代/PM指示的12小时格式。一个精密的温度补偿电路用来监视Vcc的状态。还有就是一旦时间数据出现错误,我们总是手动的进行调整时间数据,比较麻烦,那么,一款不用手动调整,自动校准的实时时钟势必在行。本时钟还具有环保、走时无噪音、低功耗等非实时时钟不具有的功能。该实时时钟不但可以作为家用,而且更可以在公共场合使用,如车站、码头、商场等场所。1.2论文主要研究内容1.2.1 系统设计实现的目标 本文是以实时时钟芯片DS1302和STC89C52单片机为主要研究对象,着重进行51单片机控制系统的设计研究和如何读取DS1302内部时钟信息的研究。以及运用GPS模块进行时间数据与卫星的自动同步。主要内容包括:1.年月日星期时分秒显示;2.手动年月日星期时分秒调整;3.自动年月日星期时分秒调整;1.2.2 系统的总体设计采用STC89C52作为主控单片机,时钟模块选用DS1302作为时钟芯片,温度模块选用DS18B20作为温度传感器,显示模块选用LCD1602,设置部分选用按键电路。STC89C52与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、 全静态操作:0Hz33Hz 、 三级加密程序存储器 、 32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符 。DS1302 实时时钟芯片功能丰富,可以用来直接代替IBM PC 上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887 相兼容。由于DS1302 能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS1302 中自带有锂电池,外部掉电时,其内部时间信息还能够保持10 年之久;对于一天内的时间记录,有12 小时制和24 小时制两种模式。用户还可对DS1302 进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。GPS模块就是集成了RF射频芯片、基带芯片和核心CPU,并加上相关外围电路而组成的一个集成电路。目前GPS模块的GPS芯片大部分还是采用全球市占率第一的SiRFIII系列为主。由于GPS模块采用的芯片组不一样,性能和价格也有区别,采用SIRF三代芯片组的GPS模块性能最优,价格也要比采用MTK或者MSTAR等GPS芯片组的贵很多。第二章 硬件电路设计本次设计主要有单片机主控部分、DS1302时钟芯片部分、LCD1602液晶显示部分、GPS模块、按键输入部分。整体硬件框图如下:本系统以STC89C52单片机为核心,本系统选用11.0592MHZ的晶振,使得单片机有合理的运行速度。起振电容30pF对振荡器的频率高低、振荡器的稳定性和起振的快速性影响较合适,复位电路为按键高电平复位。下面简单的介绍一下单片机控制部分、DS1302部分、LCD1602部分以及GPS模块。2.1单片机控制部分STC89C52是一个低功耗,高性能CMOS 8位单片机,片内含8k BytesISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用STC公司的高密度、非易失性存储技术制造,兼容标准 MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的STC89C52可为许多嵌入式控制应用系统提供高性价比的解决方案。STC89C52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,片内时钟振荡器。另外,STC89C52可降至0Hz静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。STC89C52共有四个8位的并行I/O口:P0、P1、P2、P3端口,对应的引脚分别是P0.0 P0.7,P1.0 P1.7,P2.0 P2.7,P3.0 P3.7,共32根I/O线。每根线可以单独用作输入或输出。 P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1 口:P1口是一个具有内部上拉电阻的8 位双向I/O口,p1输出缓冲器能驱动4 个TTL逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。在flash编程和校验时,P1口接收低8位地址字节。此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2 的触发输入(P1.1/T2EX)。 P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口:P3口是一个具有内部上拉电阻的8位双向I/O口,p3 输出缓冲器能驱动4 个 TTL逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。P3口亦作为STC89C52特殊功能使用,在flash编程和校验时,P3口也接收一些控制信号。 单片机的引脚图如图3.3所示。图3.3 STC89C52单片机引脚图单片机最小系统,是指用最少的元件与单片机组成的可以工作的系统。对52单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。单片机接口电路主要用来连接计算机和其他外部设备,各功能模块及原理如下:复位电路:单片机最小系统复位电路的极性电容C3的大小直接影响单片机的复位时间,一般采用10-30F,51单片机最小系统容值越大需要的复位时间越短。单片机工作之后,只要在RST引线上加载10ms以上的高电平,单片机就能有效地复位。CS-51单片机通常采用自动复位和按键复位两种方式。这里采用按键复位和上电复位两种电路结合。晶振电路:典型的晶振取11.0592MHZ或者12MHZ,晶振越大,则单片机的处理速度越快,考虑到本次设计的通信问题,采用了11.0592MHZ晶振。单片机的最小起振电容C1,C2一般采用15-33pF,并且电容离晶振越近越好。单片机最小系统的设计电路如图3.4所示。 图3.4 单片机最小系统的设计电路 2.2 DS1302时钟芯片部分 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),。SCLK始终是输入端。 DS1302的引脚图如图5.4所示:图5.4 DS1302引脚图调试中问题说明: DS1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入), D0=1,指定读操作(输出)。 在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。 要特别说明的是备用电源B1,可以用电池或者超级电容器(0.1F以上)。虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板上的3.6V充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100 F就可以保证1小时的正常走时。DS1302在第一次加电后,必须进行初始化操作。初始化后就可以按正常方法调整时间。原理图如图3-9所示:2.3 LCD1602液晶显示部分 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,本设计采用16列*2行的字符型LCD1602带背光的液晶显示屏。1602LCD主要技术参数:1. 显示容量:16×2个字符2. 芯片工作电压:4.55.5V3. 工作电流:2.0mA(5.0V)4. 模块最佳工作电压:5.0V5. 字符尺寸:2.95×4.35(W×H)mm2.3.2 1602引脚功能说明各引脚接口说明如表所示:表2-1编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表2-1:引脚接口说明:第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。2.3.3 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表2-2所示:表2-2序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表2-2字符控制命令说明:1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。芯片时序表如下:读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无表2-3基本操作时序表读写操作时序如图2-7和2-8所示:图2-7读操作时序图2-8 写操作时序2.3.4 1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图2-9是1602的内部显示地址。图2-9液晶内部显示地址例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。图2-10 字符代码与图形对应图2.3.5 1602LCD的一般初始化(复位)过程1. 延时15mS4. 写指令38H(不检测忙信号)5. 延时5mS8. 写指令38H(不检测忙信号)9. 延时5mS13. 写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号15. 写指令38H:显示模式设置17. 写指令08H:显示关闭19. 写指令01H:显示清屏22. 写指令06H:显示光标移动设置25. 写指令0CH:显示开及光标设置2.3.6 1602LCD的电路连接图2-11 1602的电路连接2.4 GPS模块VK2828U7G5LF部分 GPS模块就是集成了RF射频芯片、基带芯片和核心CPU,并加上相关外围电路而组成的一个集成电路。在本次设计采用了设计要求的VK2828U7G5LF模块,这个模块主芯片是UBX-G7020-KT,通过串口通信与单片机相连接,当使他工作的时候,就会开始定位,并将数据通过串口送给单片机,数据遵守NMEA0183协议,里面有时间、位置、地面速度信息等,我们可以直接对送过来的数据进行解读,就可以获取我们所先要的时间信息。1.正常工作条件:2. RF射频属性:3. NMEA0183协议NMEA 0183 输出GGA:时间、位置、定位类型GLL:经度、纬度、 UTC 时间GSA:GPS 接收机操作模式,定位使用癿卫星,DOP 值GSV:可见 GPS 卫星信息、仰角、方位角、信噪比(SNR)RMC:时间、日期、位置、速度VTG:地面速度信息MSS:信号强度等注意:输出癿信息、频率不设置有关样例数据:$GPGGA,060826.00,2236.91284,N,11403.24705,E,2,08,1.03,107.8,M,-2.4,M,0000*4A$GPGSA,A,3,24,22,14,12,15,25,18,42,2.20,1.03,1.95*01$GPGSV,3,1,11,12,31,117,47,14,30,290,46,15,19,060,42,18,70,010,45*78$GPGSV,3,2,11,21,47,207,22,40,326,43,24,44,036,43,25,24,159,42*70$GPGSV,3,3,11,31,03,218,42,51,128,35,50,46,122,45*4E$GPGLL,2236.91284,N,11403.24705,E,060826.00,A,D*66$GPRMC,060827.00,A,2236.91267,N,11403.24701,E,0.001,130214,D*79$GPVTG,T,M,0.029,N,0.054,K,D*2C4.样例数据详解GGA样例数据:$GPGGA,060826.00,2236.91284,N,11403.24705,E,2,08,1.03,107.8,M,-2.4,M,0000*4A序号名称样例单位描述0消息ID$GPGGAGGA协议头1UTC时间060826.00hhmmss.ss2纬度2236.91284ddmm.mmmmm3N/S指示NN=北,S=南4经度11403.24705dddmm.mmmmm5E/W指示EW=西,E=东6定位指示20:未定位1:SPS模式,定位有效2:差分,SPS模式,定位有效3:PPS模式,定位有效7卫星数目08范围0到128HDOP1.03水平精度9MSL幅度107.8米平均海平面高度10单位M米单位:米11大地-2.4米平均海平面12单位M单位:米13差分时间秒当没有DGPS时,无效14差分ID0000当没有DGPS时,无效15校验和*4A$不*之间所有字符ASCII码癿校验和16<CR><LF>消息结束GSA样例数据:$GPGSA,A,3,24,22,14,12,15,25,18,42,2.20,1.03,1.95*01序号名称样例单位描述0消息ID$GPGSAGSA协议头1模式1AM=手劢(强制操作在2D或3D模式),A=自动2模式231:定位无效2:2D定位3:3D定位3卫星使用24通道14卫星使用22通道25卫星使用14通道36卫星使用12通道47卫星使用15通道58卫星使用25通道69卫星使用18通道710卫星使用42通道811,12卫星使用通道1213PDOP2.20位置精度14HDOP1.03水平精度15VDOP1.95垂直精度16校验和*01$不*之间所有字符ASCII码癿校验和17<CR><LF>消息结束GSV样例数据:$GPGSV,3,1,11,12,31,117,47,14,30,290,46,15,19,060,42,18,70,010,45*78$GPGSV,3,2,11,21,47,207,22,40,326,43,24,44,036,43,25,24,159,42*70$GPGSV,3,3,11,31,03,218,42,51,128,35,50,46,122,45*4E序号名称样例单位描述0消息ID$GPGSVGSV协议头1消息数目3范围1到32消息编号1范围1到33卫星数目11卫星的数目4卫星ID12卫星ID5仰角31度仰角(范围0°到90°)6方位角117度方位角(范围0°到359°)7载噪比(C/No)47dBHz信号强度(范围0到99)没有跟踪时为空8卫星ID14卫星ID9仰角30度仰角(范围0°到90°)10方位角290度方位角(范围0°到359°)11载噪比(C/No)46dBHz信号强度(范围0到99)没有跟踪时为空12卫星ID15卫星ID13仰角19度仰角(范围0°到90°)14方位角060度方位角(范围0°到359°)15载噪比(C/No)42dBHz信号强度(范围0到99)没有跟踪时为空16,17校验和*78$不*之间所有字符ASCII码癿校验和18<CR><LF>消息结束GLL样例数据:$GPGLL,2236.91284,N,11403.24705,E,060826.00,A,D*66序号名称样例单位描述0消息ID$GPGLLGLL协议头1纬度2236.91284ddmm.mmmmm2N/S指示NN=北,S=南3经度11403.24705dddmm.mmmm4E/W指示EW=西,E=东5UTC位置060826.00hhmm.mmmm6状态AA=数据有效;V=数据无效7模式指示DA=自主定位,D=差分,E=估算,N=数据无效8校验和*18$不*之间所有字符ASCII码癿校验和9<CR><LF>消息结束 RMC样例数据: $GPRMC,060827.00,A,2236.91267,N,11403.24701,E,0.001,130214,D*79序号名称样例单位描述0消息ID$GPRMCRMC协议头1UTC时间060827.00hhmmss.ss2状态AA=数据有效;V=数据无效3纬度2236.91267ddmm.mmmmm4N/S指示NN=北,S=南5经度11403.24701dddmm.mmmmm6E/W指示EW=西,E=东7地面速度0.001Knot(节)地面速度8方位度地面航线9日期130214日,月,年癿格式日期10磁变量磁场变化值(空白-丌支持)11模式指示DA=自主定位,D=差分,E=估算,N=数据无效12校验和*79$不*之间所有字符ASCII码癿校验和13<CR><LF>消息结束VTG样例数据:$GPVTG,T,M,0.029,N,0.001,K,D*2C序号名称样例单位描述0消息ID$GPVTGVTG协议头1方位度地面航线2参考T真北3参考-地面航线(磁癿),丌输出4参考M磁5速度0.029Knots(节)地面速度6单位N固定字节7速度0.001公里/小时地面速度8单位K公里/小时9模式指示DA=自主定位,D=差分,E=估算,N=数据无效10校验和*2C$不*之间所有字符ASCII码癿校验和11<CR><LF>消息结束第三章 软件部分设计本系统主要包括五个模块编程:1.时钟芯片DS1302的编程2.液晶显示屏1602的编程3.按键编程4.GPS模块的编程首先单片机初始化读取DS1302里面的时钟信息,将其显示到LCD1602上,然后通过按键模块部分,一方面可以手动调整DS1302里面的时钟信息。另一方面可以手动控制GPS模块的工作与不工作。整体程序流程图如下:3.1 按键程序流程图按键一共分为两大块,一块用来手动设置DS1302的时间信息,一块就是用来控制GPS模块的工作状态。一共有四个按键,前三个按键用来控制时间信息,第一个按键是进入设置界面的按键,并且在进入设置界面之后再次按下就是切换所选中的数据,当按下7次时,退出设置界面。第二、三个按键是用来对选中的数据在设置界面分别进行加减。第四个按键就是来控制GPS模块的工作状态的,每一次按下都会改变GPS的工作状态。另外额外增加了,每一次按键有效按下时,蜂鸣器短响提示。程序如下:/*键盘扫描有关函数*void keyscan()if(set=0)/-set为功能键(设置键)-delay(9);/延时,用于消抖动if(set=0)/延时后再次确认按键按下buzz=0;/蜂鸣器短响一次 delay(200); buzz=1;setn+;if(setn>=7)setn=0;/设置按键共有秒、分、时、日、月、年、返回,7个功能循环switch(setn)case 1: TR0=0;/关闭定时器ES=0;/TR1=0;write_1602com(er+8);/设置按键按动一次,秒位置显示光标 /er+0x09; write_1602com(0x0f);/设置光标为闪烁/ temp=(miao)/10*16+(miao)%10;/秒数据写入DS1302 write_1302(0x8e,0x00);/ write_1302(0x80,0x80|temp);/miao write_1302(0x8e,0x80); break;case 2: write_1602com(er+5); /按2次fen位置显示光标 /er+0x06 /write_1602com(0x0f);break;case 3: write_1602com(er+2); /按动3次,shi /write_1602com(0x0f);break;/case 4: write_1602com(yh+0x0e);/按动4次,week /write_1602com(0x0f);/break;case 4: write_1602com(yh+0x0a);/按动4次,ri