毕业设计(论文)-定时打铃系统设计_第1页
毕业设计(论文)-定时打铃系统设计_第2页
毕业设计(论文)-定时打铃系统设计_第3页
毕业设计(论文)-定时打铃系统设计_第4页
毕业设计(论文)-定时打铃系统设计_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

河南理工大学毕业设计(论文)说明书PAGEPAGE17摘要定时打铃系统主要有两种形式,一种是使用计算机声卡输出打铃信号,利用串口控制打铃设备的电源。另一种是以单片机为核心,辅助时钟芯片构成定时打铃器。传统的定时打铃系统设计比较简单,时钟精度误差太大。目前市场上主要的打铃控制系统是以单片机为核心辅助时钟芯片构成的定时打铃器。时钟芯片晶振选择的好坏直接影响到时间精度,即使选择再好的晶振系统总是存在很大误差。本设计是基于GPS集成模块和单片机最小系统的自动校时打铃控制系统。控制系统包括硬件和软件设计。硬件主要有电源模块、单片机模块、GPS模块、本地时钟模块和显示模块、打铃驱动模块等。软件部分主要包括时钟同步、打铃控制和时间显示等。单片机通过对GPS集成模块SR-87的串行口进行数据采集,得到实时格林威治时间,然后经过时区调整转换为标准北京时间。将其作为打铃控制器的时间基准,对系统本地时钟DS1302的时间进行校准,这样打铃控制系统的时间误差可以减到最小。当GPS模块失效时,可以通过本地时钟继续工作,这样既保持了时间的准确性,又保证了打铃控制器工作的连续性。关键词:定时打铃;时钟校准;本地时钟;单片机;GPS模块AbstractThebellringsystemshavetwomaintypes.Onetypeistousecomputeroutputsignalringingthebell,usingaserialportcontrolequipmentofpowersupplyringingthebell.Anotherwiththesinglechipprocessorasthecoreauxiliaryclockringingthebellofachiptimingdevice.Thetraditionalbellringsystemsarealwayssimplelydesigned.What’smore,thetimeerrorofthesesystemsisbig.Nowinthemarket,themainbellringsystemsarethesethatwhosemastercontrolchipissinglechip.Therefore,thecrystaloscillatoristhedirectfactoroftimeprecision.Nomatterhowgoodtheperformanceofthecrystaloscillatoris,timeerrorcannotavoid.Auto-timingtingingcontrollerisdesignedbasedonGPSOEMmoduleandSCMminimalsystem.Thewholesystemincludeshardwaredesignandsoftwaredesign.Thehardwaredesignhassomemodules,includingpowersupply,MCU,GPSOEMmodule,clocksynchronizationmoduleandsoon.Thesoftwaredesignincludesclocksynchronization,thebellringcontrol,timedisplayandsoon.MCUgottheGreenwichtimefromSR-87module.ThenconvenedthetimetoBeijingtimebyadjustingthetimezone.AndtheBeringtimecalibratedthelocalchipDSl302.ThecontrollerbasedonthetimeofsatellitewhentheGPSsatellitesignalsreceivedorthetimeoflocalchipwhentheGPSmodulecannotreceivesatellitesignals.Inthisway,itmaintainstheaccuracyofthecontroller’stimeandensuresthecontinuityofit’swork.Keywords:regularbell;clockcalibration;localclock;MCU;GPSOEMmodule目录摘要 IAbstract II1绪论 11.1课题的来源及意义 11.2国内外研究现状 11.3设计的主要内容及目标 22系统总体设计 42.1系统总体方案 42.2系统模块功能 43系统硬件设计 63.1电源模块设计 63.2单片机模块 63.3GPS模块设计 93.3.1SR-87模块引脚功能 103.3.2SR-87模块性能简介 113.3.3SR-87模块电路连接 123.4本地时钟 133.4.1DS1302结构及功能 133.4.2DS1302电路设计 143.5LCD显示电路设计 143.5.1LCD1602性能简介 143.5.2LCD1602引脚功能 143.5.3LCD1602电路图 154GPS模块输出数据的处理 174.1GPS协议NMEA0l83 174.2$GPRMC数据帧解析 184.3GPS模块的串口调试 204.4格林威治时间 214.5NMEA0183数据处理中的注意事项 225系统软件设计 245.1系统软件总体设计 245.2各模块软件设计 245.2.1GPS模块软件设计 265.2.2时钟模块软件设计 305.2.3显示模块软件设计 315.3系统仿真 336结论与展望 36参考文献 37附录1系统总体原理图 38附录2系统实物图 39附录3系统源程序代码 40致谢 541绪论1.1课题的来源及意义定时打铃控制系统广泛应用于工厂、车站、学校、机关、部队等企事业单位实现作息打铃。目前打铃主要有两种形式,一种为使用计算机声卡输出打铃信号,利用串口控制打铃设备的电源。另一种以单片机为核心,辅助时钟芯片构成定时打铃器。由于计算机控制的打铃器使用的灵活性及价格较高,因此市场占有率较低,而单片机最小系统构成的打铃器使用灵活且操作方便,因此在市场中具有很大的优势。目前以单片机为核心的打铃控制器主要利用时钟芯片作为定时基准,因此时钟芯片晶振选择的好坏直接影响到时间精度,但即使选择再好的晶振系统总是存在误差。随着时间的推移,累积误差将越来越大,因此要求隔一段时间对时钟必须进行手动校准。这样无形中增加了打铃器的应用复杂性,也给人们对打铃器的信任度大打折扣。本设计是制作一个为学校、工厂、车站等企事业单位实现定时打铃等作息时间的打铃控制器系统,目的是为解决以单片机为核心的打铃控制器存在的误差问题,以GPS信号作为时钟基准源,利用单片机最小系统控制时间校准和时钟打铃。控制系统设计包括硬件和软件设计。硬件主要有电源模块、单片机模块、GPS模块、本地时钟模块和显示模块等。软件部分主要包括时钟同步、打铃控制和时间显示等。单片机通过对GPS集成模块SR-87的串行口进行数据采集,得到实时格林威治时间,然后经过时区调整转换为标准北京时间。将其作为打铃控制器的时间基准对系统本地时钟DS1302进行校准,这样打铃控制系统的时间误差可以减小到乎略不计。当GPS模块失效时,可以通过本地时钟继续工作,,这样既保持了时间的准确性,又保证了打铃控制器工作的连续性。1.2国内外研究现状由于GPS技术的快速发展,基于GPS模块的时钟校时打铃控制系统的研究现在已非常成熟。在我国,许多企事业单位都能够实现几乎零误差的时钟打铃控制系统,这不仅为人们生活、学习和工作带来很大的方便,同时也能够为某些特殊单位减少不必要的经济损失。总之,基于GPS模块的打铃控制器的研究也将越来越先进,不论在民用企业、科研单位还是军事部门,基于GPS模块的时钟校准系统发挥出了不可替代的作用。目前,以GPS为代表的卫星导航应用产业已成为当今国际公认的八大无线产业之一。随着技术的进步、应用需求的增加,GPS以全天候、高精度、自动化、高效率等显著特点及其所独具的定位导航、授时校频、精密测量等多方面的强大功能,已涉足众多的应用领域,使GPS成为继蜂窝移动通信和互联网之后的全球第三个IT经济新增长点。目前国际上具有代表性的GPS公司,主推测量仪器的有天宝公司、徕卡公司、诺华达公司和佳瓦特公司等,主推导航设备和GPSOEM板的有高明公司、麦哲伦公司、摩托罗拉公司、洛克韦尔公司和瑟孚科技公司等。

GPS开始进入民用之后,使用者终端的GPS产品便成了当前GPS主要的市场内容。一般来说,GPS的使用者终端主要是指各种用途的GPS接收机,例如用于航空和航海的接收机、汽车导航设备、用于登山和休闲的手持式接收机等类型的终端产品,而一般手持式GPS产品的组成部分,就如同移动电话或个人数字助理(PDA)的结构一样,也包括了内部的天线、芯片组和电池等,以及外部的按键和LCD面板等相关零组件。在我国,GPS已经成为地基无线电跟踪与测量系统的一种补充手段,但它在导航和航天测控领域的应用潜力却令人瞩目。我国的导弹和航天测控系统用户可根据所需测量精度、目标大小及动态特性的要求,选择导弹/航天器,装载GPS转发机或GPS接收及测量系统,以完成各类导弹、卫星、飞机和炮弹,以及低空长弧段飞行目标等各种飞行体,甚至多个目标的精确跟踪和定位。十多年来,GPS在我国的应用发展势头迅猛,已从少数科研单位和军事部门迅速扩展到各个民用领域。1.3设计的主要内容及目标本文对基于GPS模块的时钟校时系统进行了详细的设计,为实现精确的时钟打铃系统提供了很好的平台。本文主要进行了以下几个方面的工作:(1)论述了基于GPS模块的时钟校时系统的研究目的和意义,国内外的研究状况以及本设计的主要内容。(2)简单介绍了本系统所用到的各芯片组成及功能、使用方法以及应用现状等。详细介绍了GPS模块SR-87的技术指标和使用方法,并对GPS数据协议NMEA0183进行了深入的说明,这是提取和处理GPS模块SR-87的时间和日期信息的关键。(3)介绍了时钟校时系统的总体设计方案。硬件结构设计有系统电源设计、控制器时间基准电路设计、显示部分结构设计、系统原理图设计等。(4)设计了系统软件总体方案,对系统软件开发平台进行了选择,并利用proteus对系统进行了部分仿真。(5)详细介绍了时钟校时系统各个子模块的设计方案。(6)对所做的工作进行了总结,指出了本设计存在的一些问题和不足之处,同时对未来的工作做出了展望。本设计在proteus中绘制出了整个电路的原理图,对其进行了部分仿真,并且做出了实物,利用GPS模块SR-87获得了精准时间,仿真结果说明系统的电路设计基本符合要求,显示结果说明了本设计总体方案是可行的,能够实现用GPS模块对本地时钟进行校准的功能。2系统总体设计本章提出了时钟校时系统的功能需求,根据功能需求给出了基于GPS模块的时钟校时系统的总体设计方案,对系统中时钟校时系统的总体设计进行了简单的介绍,最后给出了系统设计中重要芯片的选型。2.1系统总体方案目前以单片机为核心的打铃控制器主要利用时钟芯片作为定时基准,即使选择再好的晶振系统总是存在误差。计时误差日积月累会达数分钟,甚至十多分钟,如果不及时校准,必定会给管理造成不便。传统的打铃控制器一旦出现误差较严重的情况,大多数是需要人工操作,人为的去调整时钟的时间,从而使其时间误差减小到不会影响人们正常的学习、工作、生活等。而在某些特殊需求下,时间误差必须很小,而人工调整已不能达到要求,这就需要一套特殊的设备来自动校正时钟打铃器的时间,并且基准时间的精度要求相当高。本设计是基于GPS集成模块和单片机最小系统,用GPS集成模块获取的精确时间来校准本地时钟,从而实现自动校时打铃控制器设计。单片机通过对GPS集成模块SR-87的串行口进行数据采集.得到实时格林威治时间,然后经过时区调整转换为标准北京时间。北京时间比格林尼治时间要早8小时,将格林威治时间加八小时,就是北京时间,将其作为打铃控制器的时间基准对系统本地时钟DSl302进行校准。在CPS有效捕获卫星信号时可以及时得到标准时间,GPS模块捕获卫星信号失效时可以通过本地时钟继续工作,这样既保持了时间的准确性又保证了控制器工作的连续性。2.2系统模块功能基于GPS模块的时钟校时系统主要实现的功能包括:GPS模块正常工作时显示卫星定位的准确时间,GPS模块不工作时显示时钟芯片的时间,GPS模块获得的基准时间对本地时钟进行校准,打铃提醒等。根据功能要求,我们在设计中将此系统分解为如下几个模块:(1)显示及按键模块,液晶显示选用LCD1602;(2)GPS定位模块,选用SR-87;(3)主控芯片,选用STC89C52;(4)本地时钟模块,选用DS1302;(5)打铃驱动模块;(6)电源模块由以上介绍的系统模块及芯片选型,得出系统总体结构框图如图2-1所示。图2-1定时打铃系统结构框图整个GPS模块的时钟校时系统分为若干功能模块,每个模块除完成自身功能外,还配合其它模块共同工作,实现完整的时间校准功能。(1)主控芯片STC89C52单片机:作为时钟校时系统的核心控制模块,完成GPS模块输出的时间信息数据的提取解析,定时打铃控制,LCD液晶屏显示等功能。(2)GPS定位模块SR-87:与单片机进行串口通信,通过不断的接收卫星传来的导航电文,为系统提供经纬度、时间、日期等信息。(3)时钟芯片DS1302:提供本地时间。(4)LCD液晶显示模块LCD1602:实时显示当前GPS集成模块获取的准确时间、时钟芯片的本地时间等信息。(5)键盘控制模块:为使用者提供简洁方便的设备操作方式,在特殊情况下可以手动更改时间。(6)电源模块:为系统多个功能模块提供适当的工作电压,保证各功能模块的稳定工作,本设计中需要提供的电压分别有3.3V、5V。3系统硬件设计由上章可知,基于GPS模块的时钟校时系统的设计由电源模块、单片机模块、GPS定位模块、LCD液晶显示模块、键盘控制模块及其它外围电路模块组成。在本章中,将对各模块硬件电路设计及功能实现进行详细的介绍,并对硬件电路设计中需要注意的问题进行讨论。3.1电源模块设计电源模块的设计是系统设计中的一项极其重要的工作,电源为整个系统提供适当的工作电压,是系统稳定工作的前提。电源的设计应当同时考虑功率、电平及抗干扰等问题。对系统各芯片及模块的供电要求进行分析,可以得出系统电源需要提供包括5V、3V两个电压。其中5V为单片机模块、LCD液晶显示模块、GPS定位模块等提供工作电压,3V为时钟芯片DS1302的主电源Vcc1提供电压。考虑到打铃器的使用方便,系统电源由交流220V供电,内部通过开关电源得到DC5V电源。系统中打铃控制继电器由DC5V供电,STC89C52单片机、液晶显示模块1602和GPS定位模块SR-87均为5V电源。由于GPS定位模块必须放在室外,天线才能收到卫星发来的信号,为了方便起见,当在室外进行硬件调试时,系统中所需的5V电源由电池提供。时钟芯片DS1302的主电源Vcc1所需3V电压由电池提供。3.2单片机模块单片机(MCU)是系统的核心,也是实现系统功能的关键,适当的微控制器的选取,不仅能够大大提高系统性能,还能够最大程度上保证系统稳定可靠的运行。现在市面上的MCU种类繁多,价格和性能也是千差万别,MCU的范围包括了从成本低于20美分的非常简单的家庭应用型MCU到20美元的控制工业机械主要器件的32位MCU,分辨出哪种才是适合系统应用的MCU是一个关键的问题。选择一款MCU时,我们需要考虑的因素有以下几个方面:第一,MCU的电源范围、工作频率。MCU对电源的要求需要与系统中其它大部分部件对电源的要求一致;第二,MCU的I/O口、定时器、中断等资源数目。需要满足系统的要求,避免资源的浪费;第三,MCU的吞吐量。符合MCU对系统执行控制时的处理能力;第四,MCU的极限性能。能够在系统可能处于的极限工作环境中正常运行,如低温或高温环境;第五,MCU的抗干扰性能、加密性能、程序写入方式等;第六,MCU的市场价格。在产品的设计中需要严格的控制产品成本,所以价格也是MCU选取中的重要一点,需要选取具有高性价比的MCU芯片。综合考虑以上因素及本系统对所要实现的功能,我们选用STC89C52作为系统的微控制器。STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量二级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52可降至0Hz静态逻辑操作,支持两种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8位微控制器8K字节在系统可编程Flash。(1)P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0需要外接上拉电阻。(2)P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX)。在flash编程和校验时,P1口接收低8位地址字节。引脚号第二功能:P1.0T2(定时器/计数器T2的外部计数输入),时钟输出P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在线系统编程用)P1.6MISO(在线系统编程用)P1.7SCK(在线系统编程用)(3)P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。(4)P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。P3口亦作为STC89C52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INTO(外中断0)P3.3INT1(外中断1)P3.4TO(定时/计数器0)P3.5T1(定时/计数器1)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)本设计要用到P3口的第二功能,P3.0RXD(串行输入口)和P3.1TXD(串行输出口)需要分别与GPS模块SR-87的TX和RX两个引脚相连接。(5)RST——复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。(6)ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。(7)PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。(8)EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。作为整个系统板的主控制器,STC89C52是整个电路系统的核心,微控制器模块设计主要包括电源、时钟及复位电路、调试与测试接口及GPS集成模块串行接口电路四大部分,以STC89C52为核心的中央处理器模块设计则是决定整个硬件电路成败的关键。STC89C52引脚及外围电路如图3-2所示:图3-2STC89C52引脚及外围电路3.3GPS模块设计GPS模块就是集成了RF射频芯片、基带芯片和核心CPU,并加上相关外围电路而组成的一个集成电路。由于GPS技术的快速发展,市场上的GPS模块多种多样,不同型号的GPS模块采用的芯片组不一样,性能和价格也有区别。本设计只用到GPS模块输出的时间、日期等信息,综合考虑到GPS模块的性能、价格等因素,ProGin的SR-87模块可以满足本系统所要实现的功能,所以本设计的GPS集成模块采用ProGin型号SR-87模块。GPS集成模块是本设计至关重要的一部分,这一模块的功能实现决定了本设计的成败。SR-87模块支持通讯协议NMEA0183标准输出,TTL接口电平,波特率可置为4800。SR-87模块外形如图3-3所示,和集成模块配套使用的还有天线,如图3-4所示。SR-87模块使用时要外接天线,并且放置在室外,因为室内接收不到卫星发来的信号。天线只有在室外空旷处,才能接收到更好的信号,定位更多的卫星,输出的各种数据才更精确。图3-3SR-87模块外形图3-4SR-87模块天线3.3.1SR-87模块引脚功能如上图所示,SR-87模块共有6个引脚,其中引脚1为电源输入脚,接5V电源,引脚2、引脚3分别为GPS模块的数据输出和输入,与单片机进行串口相接,引脚4不用接,引脚5接地,引脚6接LED指示灯。在本系统中工作时,SR-87模块通过4PIN排线与主板相连,分别为引脚5地线,引脚1电源线,引脚2和引脚3数据输入和输出线。GPS模块与主控制器STC89C52进行串口通信,通过设置模块定时输出GPS定位数据,由主控制器对GPS数据进行处理,提取出日期、时间等有用信息。SR-87模块引脚说明如表3-1所示。表3-1GPS模块SR-87引脚说明引脚名称说明Pin1VDD3.0~5.5VDCinputPin2UARTTxNMEAserialdataoutputPin3UARTRxSerialdatainputPin4NCNotconnect,mustbefloatingfornormaloperationPin5GNDGroundPin6LEDForGPSstatus(LED)indication3.3.2SR-87模块性能简介(1)SR-87模块主要性能如下:①频段1575(MHz)发射功率30mw(W)②SR-87GPS模块采用SiRF第三代高灵敏度、低耗电量芯片StarIII。内建ARM7TDMICPU可符合客制需求。③具备快速定位及追踪20颗卫星的能力。④芯片内建200,000个卫星追踪运算器,大幅提高搜寻及运算卫星讯号能力。⑤内建WASS/EGNOS解调器。⑥低耗电量,具备有省电模式(Trickle-Power)功能,以及在设定的时间才启动的定时定位。⑦(Push–to–Fix)功能。⑧支持NMEA0183版本规格输出。(2)应用范围:车用导航、航海导航、舰队管理、基地服务、自动驾驶、个人导航、旅游设备、轨迹设备、系统及绘图应用程序(3)SR-87模块规格:①最多可同时接收20个卫星②接收码:L1,C/A码③更新速率:1HZ④时间标示:1脉波/秒,GPS时间+/-0.1秒误差⑤海拔高度:60,000英尺⑥速度:1,000海里⑦支持通讯协议:NMEA0183.版本规格输出及SiRF二位编码⑧定位时间:冷/暖/热开机:42/38/1冷/暖/热追踪感度:30/15/12dB-Hz3.3.3SR-87模块电路连接在上节中介绍了SR-87模块的引脚功能,在图3-4中可以看到,SR-87共有6个引脚,有6根颜色不同的导线连在一起,不同的颜色连接不同的引脚,本系统只用到其中四个,这四个引脚分别是引脚1、引脚2、引脚3和引脚5。引脚1是电源输入脚,接5v电源,引脚2、3分别为GPS模块的数据输出和输入,与单片机进行串口P3.0和P3.1相接,引脚5接地。不用的两个引脚分别是引脚4和引脚6。把其中不用的两根线分开,留下的四根线与单片机的串口相连。SR-87与单片机连接原理图如图3.5所示。图3-5SR-87与单片机连接原理图3.4本地时钟本设计所选用的时钟芯片是DS1302,它是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。3.4.1DS1302结构及功能DS1302的引脚排列,如图3-6所示。其中Vcc2为后备电源,Vcc1为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。图3-6是DS1302的引脚图。\o"查看图片"

图3-6DS1302封装图3.4.2DS1302电路设计上节简要介绍了时钟芯片DS1302的结构和引脚功能,在电路中,各引脚一定要按照要求连接正确。Vcc1接3V电源后接地,Vcc2与5V直流电源相接,X1和X2外接32.768kHz晶振。其余三个引脚则与单片机相连。图3-7DS1302原理图3.5LCD显示电路设计3.5.1LCD1602性能简介LCD1602分为带背光和不带背光两种,基控制器大部分为HD44780,LCD1602采用标准的14脚(无背光)或16脚(带背光),接口是否带背光在应用中并无差别,LCD1602主要技术参数:(1)显示容量:16×2个字符;(2)芯片工作电压:4.5—5.5V;(3)工作电流:2.0mA(5.0V);(4)模块最佳工作电压:5.0V;(5)字符尺寸:2.95×4.35(W×H)mm。3.5.2LCD1602引脚功能(1)LCD1602外形如图3-8所示。图3-8LCD1602引脚图(2)LCD1602引脚功能介绍如下:引脚1VSS为地电源,引脚2VDD接5V正电源,引脚3VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。引脚4RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。引脚5R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。引脚6E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚是D0~D7,为8位双向数据线。引脚15BLA背光源正极,引脚16BLK背光源负极。3.5.3LCD1602电路图LCD1603共有16个引脚,引脚1和16直接与地电源相接;引脚2和15直接和5V直流电源相接;引脚3液晶显示偏压,与10K的电位器相连;引脚4、引脚5和引脚6分别是数据/命令选择端、读/写选择端和使能信号端,引脚7-14是数据端,这些都要和单片机相连。本设计中,1602的引脚7-14分别与单片机的P0.0-P0.7相连。图3-91602LCD与单片机连接电路图4GPS模块输出数据的处理GPS模块SR-87与单片机连接的硬件电路虽然简单,但是软件设计却是本系统的核心。本章将对GPS模块的定位信息协议NMEAOl83做出详细的说明,并且介绍一下如何获取SR-87输出的时间、日期等信息通过单片机用液晶屏显示出来。4.1GPS协议NMEA0l83NMEA是"NationalMarineElectronicsAssociation"(国际海洋电子协会)缩写,同时也是数据传输标准工业协会,在这里,实际上应为NMEA0183协议。NMEA0183协议是由美国国家海洋电子协会开发、维护并发布的标准,用于航海远洋时使用的电子仪器之间的通信。目前大部分的GPS接受设备都遵循这一标准。该接口协议定义了在波特率为4800的串口数据总线上传输的电器信号需求、数据传输协议和时间,以及详细的句型格式。NMEA0183协议的数据以“句子”为单位进行发送,每个“句子”的结构如表4-1所示。假如数据域中的某个值无效,该值将被简单的忽略,但对应的“,”仍需发送。表4-1GPS输出数据帧说明序号命令说明最大帧长1$GPGGA全球定位数据722$GPGSA卫星PRN数据653$GPGSV卫星状态信息2104$GPRMC运输定位数据705$GPVTG地面速度信息346$GPGLL大地坐标信息7$GPZDAUTC时间和日期发送次序依次是:$GPZDA、$GPGSA、$GPGLL、$GPVTG、$GPGSA、$GPGSV、$GPRMC。图4-1为NMEA0183协议消息结构。图4-1NMEA0183协议消息结构4.2$GPRMC数据帧解析系统工作时,GPS接收机只要处于上电状态就会源源不断地把接收计算出的GPS导航定位信息以NMEAOl83.22版本格式输出至单片机,这些数据信息主要由帧头、帧尾和帧内数据组成。根据数据帧的不同,帧头也不相同,主要有“$GPGGA”、“$GPGSA”、“$GPGSV”和“$GPRMC”等。这些帧头标识了后续帧内数据的组成结构,各帧均以回车符和换行符作为帧尾标识一帧的结束。通过仔细分析各数据帧的内容可以得出,系统所需的GPS数据如经纬度、时间日期、速度等信息均可以由“$GPRMC”帧得到,故在本部分程序中,我们只对“$GPRMC”帧进行解析和提取,其它数据帧做为无用帧处理。NMEA0183中的“$GPRMC”帧格式如下:$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,*10可以看出,该数据帧以“$GPRMC”作为开头,帧内的各数据段由逗号分割,因此在处理该数据帧时,我们通过检测ASCII码“$”来判断是否为帧头,检测到帧头后再依次检测“G”、“P”、“R”、“M”、“C”,当检测无误时,确定该数据帧为有用帧,确定有用帧后再通过对所经历逗号的个数来判断出当前正在处理的是哪一种定位参数,并做出相应的处理。如第一个逗号后为时间,第三个逗号后为经度,第五个逗号后为纬度,第七个逗号后为速度,第九上逗号后为日期,通过计算逗号的个数便可找到所需的定位参数,从而进行下一步处理。单片机和SR-87的通信采用NMEA0183协议中的RMC协议进行通信。波特率设置为4800。当SR-87捕捉到有效卫星信号后则主动通过串口0发出RMC信息,格式为:“$GPRMC,<l>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<ll>,<12>*hh<CR><LF>”其每部分的内容如下所示:字段0:$GPRMC,语句ID,表明该语句为RecommendedMinimumSpecificGPS/TRANSITData(RMC)推荐最小定位信息字段1:UTC时间,hhmmss.sss格式字段2:状态,A=定位,V=未定位字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)字段4:纬度N(北纬)或S(南纬)字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)字段6:经度E(东经)或W(西经)字段7:速度,节,Knots字段8:方位角,度字段9:UTC日期,DDMMYY格式字段10:磁偏角,(000-180)度(前导位数不足则补0)字段11:磁偏角方向,E=东W=西字段12:校验值例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50这条GPS定位数据信息的含义是:UTC时间为2点48分13秒,有效定位,纬度为31度58分,北半球,经度为118度48分,东半球,地面速率为10.05节,地面航行为324.27度,日期为2006年7月15日。4.3GPS模块的串口调试串口调试助手,支持常用的300-115200bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符(包括中文),可以任意设定自动发送周期,并能将接收数据保存成文本文件,能发送任意大小的文本文件。GPS模块可以在串口调试助手窗口中,显示出接收卫星信号的输出数据。在电脑上安装相应驱动程序,一般的PC机支持标准RS232接口,当下带有串口的PC很少见,所以也需要usb/232转换接口,然后选择正确的COM口和波特率就可以实现这一功能。硬件连接方面最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。图4-2是GPS模块刚开机没有获得有效定位数据时输出的数据:图4-2没有定位成功的数据GPS模块每秒输出一次:$GPGGA$GPGSA$GPGSV$GPRMC的定位数据,我们通常用$GPRMC精简数据输出这条信息,这条信息包含了目标的:经度、纬度、速度(海里/小时)、运动方向角、年份、月份、时、分、秒、毫秒、定位数据是有效的还是无效的这些重要信息,上图显示的是没有定位成功,所以数据无效。图4-3显示的是模块已经成功定位输出的有效数据。图4-3定位成功的有效数据可以看到,图4-3窗口中最后一行数据$GPRMC语句中,第二个逗号的显示的字符为“A”,说明定位成功,数据有效。而图4-2窗口中最后一行的$GPRMC语句,第二个逗号后显示的字符是“V”,说明没有成功定位,数据无效。根据不同的GPS模块和PC机,要选用对应的串口号和波特率,GPS模块SR-87波特率是4800,上面调试过程用的PC机串口用的是COM1,如果用不同的PC机,则串口号要对应选择正确。下图是在另外一台PC机上调试的结果,串口选用的是COM3,GPS模块未变,则波特率不变。图4-4为GPS模块SR-87在串口调试助手中完整数据。正如说明书中第四部分所讲,GPS模块输出数据有“$GPGGA”、“$GPGSA”、“$GPGSV”和“$GPRMC”等,这些数据严格按照NMEA0183协议,有不同的字长,代表不同的信息。根据这些数据,可以完全看出GPS的定位情况,以及很多用户想获取的信息。本设计只用到时间和日期信息,有多个数据帧都发送时间和日期信息,通过比较,“$GPRMC”语句提取出这些信息最方便,而且干扰最小,所以选择从这条语句中获得本设计所需要的时间和日期。4.4格林威治时间格林威治是英国伦敦南郊原格林威治天文台的所在地,它又是世界上地理经度的起始点。对于世界上发生的重大事件,都以格林威治的地方时间记录下来。一旦知道了格林威治时间,人们就很容易推算出相当的本地时间。英国伦敦是0时区,北京是东八区。也就说,格林尼治时间比北京时间晚8个小时。图4-4GPS模块在串口调试助手中完整数据例如,某事件发生在格林尼治时间上午8时,我国在英国东面,北京时间比格林尼治时间要早8小时,我们就立刻知道这次事情发生在相当于北京时间16时,也就是北京时间下午4时。SR-89模块输出的时间数据是格林威治时间,加上8小时就是北京时间。本系统中单片机通过对GPS集成模块SR-89的串口进行数据采集,得到实时格林威治时间,然后经过时区调整转换为标准北京时间,将其作为打铃控制器的时间基准,然后对系统本地时钟进行校准。4.5NMEA0183数据处理中的注意事项

将GPS作为信息源,正确接收和解析GPS发送的NMEA0183数据,在编程实现时需要注意几个问题。

(1)通讯端口的设置

NMEA规范推荐的串行通讯参数为:①波特率:4800②奇偶校验:无③数据位:8④停止位:1虽然以上为NMEA规范推荐的串行通讯参数,但也有厂商的产品允许用户将波特率设置的更高,此时需要注意设置计算机的接口参数与GPS设备一致。

(2)所需信息的正确提取

NMEA0183是以语句形式发送数据的,接收机可能发送很多类型的语句,而我们需要的可能只是某些语句中的几个字段。因此就需要对接收到的数据进行解析,取得所需的信息。另外,可能会由于小数点位数不同等原因,语句的长度是可变的,因而分离感兴趣的信息时,不能按照该信息在语句中所处的字符位置来查找,只能依据逗号分隔符,这一点在数据提取的过程中非常重要。如果在提取NMEA语句中的信息的时候按照字符的长度提取,这样编出来的程序,通用性差,而且经常会出现信息提取错误的问题。以上都是在程序中需要注意的问题。为解决信息的正确提取问题,并提高程序的复用性,可以编写适当的函数,如一个函数用来分离语句(即通过$字符判断语句头,一直到换行回车结束一条语句);一个函数用来判断语句中的字段数(通过“,”分隔符来提取语句字段),还有一个函数用来返回语句中指定字段的内容。有了这三个函数,就可以方便的提取所需的信息,此时的工作只是简单字符串比较和显示格式的变换检验和的计算与比较。最后,为了确保所采集的GPS数据的可靠性,必须进行检验和的计算与比较。检验和hh为“$”与“*”之间的所有字符按位异或的结果,并将其高4位和低4位各用一个十六进制数(字母大写)表示出来。为此,需编写函数,从语句头识别符“$”开始,计算检验和,直至“*”到达为止,这时“*”号后面的两个字符就是检验码,将自己的计算结果同这两个检验码字符比较,若不同,按出错处理,并继续运行;若相同,则说明通讯成功,数据接收正确,可以处理该语句,提取所需数据。

5系统软件设计任何电子系统都是由硬件系统和软件系统两大部分组成的。硬件是系统的基础,软件是系统的灵魂,没有软件就不能实现各种特定的功能,也正是由于软件和硬件的有机结合,才使各种功能得以实现。本章将就基于GPS模块的时钟校时系统的软件设计进行详细的介绍。5.1系统软件总体设计本设计软件主要包括以下几个部分:时钟同步、打铃控制和键盘程序显示等几部分。时钟同步程序是单片机通过串口读取SR-87模块的实时信息,在信息有效的状态下提取当前的格林威治时间,转换为北京时间后对DSl302时间进行校正。单片机和SR-87模块的通信采用NMEA0183协议中的RMC协议进行通信,波特率设置为4800bps。本节主要通过程序流程图来说明系统整体的软件设计。程序流程图是程序分析中最基本、最重要的分析技术,它是进行流程程序分析过程中最基本的工具,是人们对解决问题的方法、思路或算法的一种描述。它具有如下的特点:采用简单规范的符号,画法简单;结构清晰,逻辑性强;便于描述,容易理解。说明书在设计总体方案中已经指出本设计要实现的功能,以及系统的各个模块。基于GPS模块的时钟校时系统主要实现的功能包括:GPS模块正常工作时显示卫星定位的准确时间,GPS模块不工作时显示时钟芯片的时间,GPS模块获得的基准时间对本地时钟进行校准。系统模块有电源模块、单片机模块、GPS定位模块、LCD液晶显示模块、打铃驱动及其它外围电路模块。根据功能要求,我们在设计中将此系统的软件设计如下,系统总体流程图如图5-1所示。5.2各模块软件设计在本系统软件的开发中,采用的是C语言进行编程,来实现各种模块的功能,编程环境为KeilμVision4。KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些组合在一起。图5-1系统总体流程图5.2.1GPS模块软件设计在本说明书的第四部分,详细介绍了GPS模块的数据解析,GPS模块输出数据有多个数据帧,比如$GPZDA、$GPGSA、$GPGLL、$GPVTG、$GPGSA、$GPGSV、$GPRMC。在本设计中,只有$GPRMC是有用的,所以其他的数据帧就要被过滤掉,只提取出$GPRMC的一部分有效信息即可。图5-2是数据解析流程图。图5-2数据解析流程图上面介绍了判断$GPRMC的流程图,下面则介绍如何过滤掉其他数据帧,只截取出$GPRMC数据的核心程序代码。/************************************************检测$GPRMC语句*****************************************/if(tmp==','){++Segment;Bytes_counter=0;//清空段字节计数器return;}if(tmp=='*')//收到结束标志{ReceivingF=0;EndF=1;return;}if(Segment==0){if(Bytes_counter==3)//段0,语句类型判断switch(tmp){case'G':Command=1;//语句类型$GPGGAGGAF=1;break;case'M':Command=2;//语句类型$GPRMCRMCF=1;break;case'T':Command=3;//语句类型$GPVTGVTGF=1;break;case'S':break;default:Command=0;//非有效数据类型,终止当前数据接收ReceivingF=0;break;}if(Bytes_counter==4)if(Command==0&&tmp=='A'){Command=4;//语句类型$GPGSAGSAF=1;}}else{switch(Command){case1:GPGGA(tmp);break;case2:GPRMC(tmp);break;case3:GPVTG(tmp);break; case4:GPGSA(tmp);break;default:break;}}++Bytes_counter;}NewByteF=0;return;}判断出$GPRMC数据帧后,还要对$GPRMC语句的有效信息进行提取。图5-3是读取GPS数据流程图。RMC信息格式为:“$GPRMC,<l>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<ll>,<12>*hh<CR><LF>”。其中,只有第一个逗号后的<l>中的时间信息和第九个逗号后的<9>中的时期信息有用。这部分核心程序代码如下。/************************************************对$GPRMC语句解析,提取出时间和日期信息*****************************************/voidGPRMC(uchartmp){switch(Segment){ case1:if(Bytes_counter==2||Bytes_counter==5)//$GPRMC段1,UTC时间,hhmmss.sss(时分秒)格式,取前6位转换为HH:MM:SS格式{GPS_time[Bytes_counter]=':';++Bytes_counter;}if(Bytes_counter<8)GPS_time[Bytes_counter]=tmp;GPS_time[8]='\0'; break; case9:if(Bytes_counter<2)//日图5-3$GPRMC数据解析流程图//$GPRMC第9段处理,UTC日期,ddmmyy(日月年)格式转换为yy-mm-dd,改变顺序{GPS_date[6+Bytes_counter]=tmp;}if(Bytes_counter>1&&Bytes_counter<4)//月{GPS_date[1+Bytes_counter]=tmp;GPS_date[5]='-';}if(Bytes_counter>3&&Bytes_counter<6)//年{GPS_date[Bytes_counter-4]=tmp;GPS_date[2]='-';GPS_date[8]='\0';} //if(Bytes_counter==5)finish_d=1;break; default:break;}}5.2.2时钟模块软件设计DS1302控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。图5-4是DS1302程序设计流程图。图5-4DS1302的程序流程图5.2.3显示模块软件设计LCD1602基本操作时序:(1)读状态:输入:RS=L,RW=H,E=H输出:D0-D7=状态字(2)写指令:输入:RS=L,RW=L,D0-D7=指令码,E=高脉冲输出:无(3)读数据:输入:RS=H,RW=H,E=H输出:D0-D7=数据(4)写数据:输入:RS=H,RW=L,D0-D7=数据,E=高脉冲输出:无图5-5LCD1602软件流程图LCD1602软件流程图如图5-5所示,一般初始化(复位)程序如下:voidLCD_init(unsignedcharbw){ BitWidth=bw; switch(BitWidth){ case4: LCD_en_command(0x33); delayms(20); LCD_en_command(0x32); delayms(20); break;case8: LCD_en_command(0x38); delayms(20); LCD_en_command(0x38); delayms(20); break; } LCD_en_command(0x08); //0x08令显示器off delayms(5); LCD_en_command(0x01); //0x01清屏指令 delayms(5);LCD_en_command(0x06); //0x06光标模式设置 进入模式设置指令写入数据后光标右移 delayms(5);LCD_en_command(0x0c);//0x0c显示开 delayms(5);}5.3系统仿真本节主要讲述proteus的仿真与分析,在这一章中综合运用了proteus的仿真技术,显示GPS模块获取的时间信息。在prteus中绘制出了整个电路的原理图并对其仿真,仿真结果显示电路的设计基本符合要求。为了验证本系统的设计方案有没有可行性,能否运行,需要进行模拟仿真。本设计选择了proteus仿真软件,画出了系统总体电路原理图,并编写了程序源代码。proteus元器件库里没有GPS模块,SR-87在proteus上的仿真,是通过串口给单片机一个模拟SR-87输出数据“$GPRMC”帧,实际工作中的GPS模块是不间断地输出数据,而串口给单片机的模拟数据是有限的,液晶屏上显示的时间只能是时钟芯片DS1302的时间,因此仿真的结果只能说明系统的总体设计在理论上行得通,不能体现系统在实际中的工作需求。图5-10是仿真时的串口模块代替SR-87的原理图。图5-6串口模块代替SR-87的原理图图5-6的左半部分是STC89C52P3口的示意图,右半部分是模拟GPS模块SR-87的一个元件,可以看到这两个元件是通过串口相接地,这正好符合SR-87与单片机的连接方式。只是模拟GPS模块SR-87的输出数据“$GPRMC”,所以无法用精确的实时世界时间对本地时钟进行校准,只能在理论上证明本设计方案是合理的,具有可行性。设计的整体电路原理图在proteus中如下图5-8所示。除了电源模块外,其他的几个模块都画了出来。图5-7是仿真结果,液晶显示屏上显示出了时间。图5-7仿真结果图5-8系统仿真原理图6结论与展望本章对设计的工作进行了总结,概述了论文的主要设计内容及所取得的成果,同时简要介绍了论文工作期间所遇到的问题及其解决方案,并对基于GPS模块应用的后续研究工作进行了展望。本设计是基于GPS模块的时钟校时系统设计,通过GPS模块SR-87获得格林威治时间,转换为北京时间后对本地时钟进行校准,然后在液晶屏上显示,并对设定好的时间进行打铃提醒。本设计主要内容总结如下:(1)系统总体方案设计。提出了以STC89C52单片机作为主控制器的硬件总体设计方案,本地时钟校准和时间显示同步。(2)系统硬件电路设计。分析设计了各部分电路,包括电源电路,液晶显示电路、本地时钟电路及按键电路,GPS接口电路等,实现了整个系统硬件电路的功能。(3)系统软件设计。研究分析了系统主程序,液晶显示模块程序设计和本地时钟显示程序设计等,实现了各软件的功能。本系统虽然很好的完成了设计目标,成功地获取了GPS模块SR-87的时间信息,对本地时钟进行了校时,但从其他方面来看,还存在很多问题。(1)GPS模块SR-87接收的卫星信息很多,本系统只用到时间、日期等,对模块功能的利用不充分。(2)由于时间比较紧迫,总体方案中硬件和软件设计不是很完美,需要完善。(3)proteus元器件库里没有GPS模块,SR-87在proteus上的仿真,是通过串口给单片机一个模拟SR-87输出数据“$GPRMC”帧,因此仿真的结果只能说明系统的总体设计在理论上行得通,不能体现系统在实际中的工作需求。基于以上问题,在后续的工作中要做更深入的学习,让GPS模块的功能充分发挥出来,并且使设计成果的使用价值更大,被更广泛的领域所接受。另外,本设计是基于51单片机,使用其他微处理器GPS模块也会实现更多更有价值的功能,比如ARM微处理器等,这也是以后努力学习的方向。参考文献[1]张立广,谭宝成.GPS模块在打铃控制器中的应用.西安工业大学电子信息工程学院,2011[2]魏丰,朱广伟,王瑞清.一种GPS校准的数字式高精度守时钟.华中科技大学控制科学与工程系,2011[3]张华林,葛水焕.基于GPS时钟的打铃仪设计.漳州师范学院,2009[4]王久鹏,尚春阳.一种基于GPS的校时系统.西安交通大学信息机电研究所,2008[5]董小虎,马正洪.一种高性能智能打铃控制器.电子制作,2000[6]钱德俊,张哲,胡晨.NMEA0183协议解析.东南大学国家专用集成电路系统工程中心,2006[7]何香玲,郑钢,范秋华.GPS定位信息的采集和显示.青岛理工大学通信与电子工程学院,2007[8]张兆朋,邹应全,施海凤.基于AT89S52单片机的学校电铃自动控制.淮安生物工程高等职业学校.[9]钱德俊,张哲,胡晨.NMEA0183协议解析.东南大学国家专用集成电路系统工程中心,2006[10]柳青,戴立坤.单片机实验系统中GPS实验模块的设计与应用.广州航海高等专科学校计算机与信息工程系,2008[11]杨永,杜文龙.51单片机接收GPS数据的算法与实现.淮安信息职业技术学院,2008附录1系统总体原理图附录2系统实物图附录3系统源程序代码/************************************* GPS解码显示程序***************************************/#include<reg52.h>#include"1602.h"sbitGPS_SPD=P2^1; //GPS模块速率设置sbitKEY1=P2^0; //显示内容分屏切换charcodeTIME_AREA=8; //时区//GPS数据存储数组unsignedcharJD[10]; //经度unsignedcharJD_a; //经度方向unsignedcharWD[9]; //纬度unsignedcharWD_a; //纬度方向unsignedchardate[6]; //日期unsignedchartime[6]; //时间unsignedcharspeed[5]={'0','0','0','0','0'}; //速度unsignedcharhigh[6]; //高度unsignedcharangle[5]; //方位角unsignedcharuse_sat[2]; //使用的卫星数unsignedchartotal_sat[2]; //天空中总卫星数unsignedcharlock; //定位状态//串口中断需要的变量unsignedcharseg_count; //逗号计数器unsignedchardot_count; //小数点计数器unsignedcharbyte_count; //位数计数器unsignedcharcmd_number; //命令类型unsignedcharmode; //0:结束模式,1:命令模式,2:数据模式unsignedcharbuf_full; //1:整句接收完成,相应数据有效。0:缓存数据无效。unsignedcharcmd[5]; //命令类型存储数组//显示需要的变量unsignedintdsp_count; //刷新次数计数器unsignedchartime_count;bitpage;voidsys_init(void);bitchk_key(void);main(){ unsignedchari; charBhour; sys_init(); lock=1; use_sat[0]='0'; use_sat[1]='0'; total_sat[0]='0'; total_sat[1]='0'; while(1){ if(buf_full==0) //无GPS信号时 { dsp_count++; if(dsp_count>=65000){ LCD_cls(); //清屏 LCD_write_string(0,0,"NoGPSconnect.."); LCD_write_string(0,1,"PleaseCheck.."); while(buf_full==0); LCD_cls(); dsp_count=0; } } else{ //有GPS信号时 if(chk_key()){ //检测到按键切换显示 page=!page; LCD_cls(); } if(!page){ //页面1 if(buf_full|0x01){ //GGA语句 if(lock==0){ //如果未定位 LCD_write_string(0,0,"*.--."); LCD_write_string(0,1,"*--.--."); }else{ //如果已定位 LCD_write_char(0,0,JD_a); //显示经度 for(i=0;i<10;i++){ LCD_write_char(i+1,0,JD[i]); } LCD_write_char(0,1,WD_a); //显示纬度 LCD_write_char(1,1,''); for(i=0;i<9;i++){ LCD_write_char(i+2,1,WD[i]); } } LCD_write_char(14,1,use_sat[0]); //显示接收卫星数 LCD_write_char(15,1,use_sat[1]); buf_full&=~0x01; dsp_count=0; } if(buf_full|0x02){ //GSV语句 LCD_write_char(14,1,total_sat[0]); LCD_write_char(15,1,total_sat[1]); buf_full&=~0x02; dsp_count=0; } if(buf_full|0x04){ if(lock==0){ //如果未定位 LCD_write_string(0,0,"*.--."); LCD_write_string(0,1,"*--.--."); }else{ //如果已定位 LCD_write_char(0,0,JD_a); //显示经度 for(i=0;i<10;i++){ LCD_write_char(i+1,0,JD[i]); } LCD_write_char(0,1,WD_a); //显示纬度 LCD_write_char(1,1,''); for(i

温馨提示

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

评论

0/150

提交评论