基于51单片机的GPS全球定位系统
MCS-51单片机在卫星导航系统中的应用
心利任用务$PG是RM正C 语确句设对置GP单S25片LP机串行口,合理配置 OEM 板并提 取相应进的行串G行P口S初信始息化 。
具体来说,在软件开发过程中,需利用要$将GPG单GA片语机句的读取串行
GPS25LP 串行口数据
术系统,主要包括全球定位系统(GPS)、格洛纳斯地球 照特定的轨道布局,不断发送精确的信号,提供时间和
定位系统(GLONASS)、伽利略导航系统(Galileo)等。 位置的信息。通过这个系统,人们可以实现准确地定位
这些卫星系统通过将卫星发射到地球轨道上,并与地面 和导航。在日常生活中,我们可以利用 GPS 系统来导航
点,探讨其与 GPS 模块的联动,进一步分析 MCS-51 单 进行地理定位、轨迹记录、位置服务等。
片机在卫星导航系统中的实际应用效果。
这三个部分相互配合,构成了完整的全球定位系统
1 卫星导航系统概述
(GPS)。太空部分是整个系统的核心,它由一组运行在
卫星导航系统是一种利用卫星进行定位和导航的技 轨道上的卫星组成,向地面发射导航信号。这些卫星按
组成,负责监控和管理 GPS 卫星系统的运行。这些地面 接收机可以计算出与每颗卫星之间的距离。这个距离是
设施包括监测站、控制站和注入站。监测站用于收集卫 通过传播速度恒定的无线电波的时间延迟来表示的。
收稿日期 :2023-08-17 作者简介 :洪小骏(1979—),男,江苏南通人,本科,研究方向 :软件设计 / 航空航天。
它们被安置在 6 个不同的轨道面上,每个轨道面上有 4 面发送无线电信号,包括卫星的位置和时间数据。
颗卫星。这种配置可以确保全球范围内的信号覆盖,并
基于单片机的GPS设计
基于单片机的GPS设计随着科技的快速发展,单片机已经成为现代电子技术中不可或缺的一部分。
为了更好地了解单片机的发展和应用,我们需要研究相关的外文文献,对于非母语读者来说,中文翻译也是必不可少的。
本文将介绍一些重要的单片机的外文文献和对应的中文翻译。
"Microcontroller Fundamentals" by John M. Hughes. This book provides a comprehensive introduction to microcontrollers, including their history, architecture, programming, and applications. It is an excellent resource for anyone who wants to learn about microcontrollers."Embedded Systems: A Perspective on MCU and SoC" by Yatin Chaudhary. This book provides an overview of embedded systems, including a detailed discussion on microcontrollers and system-on-chip (SoC) technology. It is a valuable resource for engineers and researchers in the field of embedded systems. "8051 Microcontroller: Architecture, Programming, and Applications" by K.K. Ray and M.K. Dash. This book provides a comprehensive guide to the 8051 microcontroller, including itsarchitecture, programming, and applications. It is an essential resource for students and professionals who want to learn about the 8051 microcontroller.《单片机基础》——李晓明译。
MCS-51单片机与GPS-OEM板的串行数据通讯的实现
4 结束语
面向对 象分析 建模过 程是一件十分复杂的工作,本 文所涉及的 基于面 向 象技术的分析 建模是在开发系统实践中采用的策略及经 对 验总结 。其 中涉及 的相 关 问题也很 多.本 文讨论 的只是其 中的一 些。事实上 。面向对象 的分析建模过程不仅仅是依赖 于面向对象技 术的 发展 以及分析建模 人员 的实践和 经验 ,同时 还依赖 于领域 工 程、软件构架、软 件过程 ,人工智能等相关领域的技术发展 。●
Yo r o r s ,9 9 u d n P e s1 8 .
【】R mb u h JB a a 4 u a g , lh M, rmel i W , 1 j t O i td P e r n e a . e — r ne a t Ob c e S s m d l g a d D s nM] o d nP t eHa ,9 1 y t Mo e n n e i [ . n o - ̄ni — l 19 . e i g L c l
参考文献 … 朱三元 ,钱乐秋 ,宿为 民 . 软件工程 技术概论 [1. 1 ]北京:科学出版 v
社 , 2O . O 2
的对象进行筛选 。形成可用的对象 ,该方法对于一般的中小规模的
系统是 比较合适 的,这是 由于该方法的理论体系 比较完善,并 已经 过一 定的实践检验。 L b s u a 方法 的前提 条件是需要有 一个用户需 r 求文档 ,其策略是为用户需求文档 中的每个句子建立一个对象或动 态模型分片。相 比而言 ,这种方法更适用于较大的 问题。因为它工 作于段落和节的层次而不是词和词组 :此外 ,其结果更接近 需求模 型 。因为基于图形 的子模型包含 了真实需求模型同样的构造,即对 象模型和状态转换 图。
【】B oh G.bet O i t vl metE E n蛳so o 2 oc O jc— r ne Deeo n. E e d p I n Sf t
最新基于单片机的GPS设计
基于单片机的G P S设计毕业设计(论文)说明书基于单片机的GPS设计题目:系别:专业班级:学生姓名:指导教师:提交时2015年5月10日间:摘要本设计根据GPS模块数据输出原理,基于GPS接收模块、51系列单片机、1602液晶显示屏等元件实现的一台小体积、方便携带、能够独立使用的实时定位导航设备。
本设计主要研究GPS接收模块与单片机的串行通信,分别从硬件和软件两方面同步GPS的实时显示设计。
硬件部分主要由STC90C51单片机最小系统模块、,GPS接收模块、LCD液晶显示模块、电源模块等组成。
本设计软件方面以单片机的汇编语言进行,编写完成程序后,用软件wave进行调试,无误后在Proteus 8软件进行单片机嵌入仿真。
关键词:单片机;GPS;1602液晶屏;串行通信;ABSTRACTThe design module based on GPS data output theory, based GPS receiver module, 51 series, 1602 LCD display and other components to achieve a small size, portable, real-time positioning and navigation equipment can be used independently.This design study GPS receiver module and single-chip serial communications, GPS synchronized separately from the hardware and software aspects of real-time display design. The hardware consists of STC90C51 smallest single-chip system module,, GPS receiver module, LCD liquid crystal display modules, power supply modules and other components. The design software in microcontroller assembly language, after their completion program, using software wave debug and correct in Proteus 8 software embedded microcontroller simulation.KEY WORDS: GPS(Global Positioning System );MCU51;1602LCD screen目录摘要............................................................... ABSTRACT .......................................................... I I 第1章引言....................................................... I V1.1课题的背景及意义 01.2总体方案的设计 (1)第2章GPS全球定位系统介绍与接收GPS定位信号方案 (2)2.1 GPS全球定位系统及GPS接收模块的研究 (2)2.1.1 GPS全球定位系统 (2)2.1.2 GPS接收模块的研究 (3)2.2 接收GPS定位信号方案 (4)第3章基于单片机的GPS硬件设计 (5)3.1基于单片机的GPS硬件总体结构 (5)3.2 基于单片机的GPS设计硬件部分介绍 (6)3.2.1 STC90C51单片机器主要性能 (6)3.2.2 Waveshare U-BLOX NEO-6M信号接收模块介绍 (7)3.2.3 1602LCD模块介绍 (8)3.2.4 电源 (12)3.3 基于单片机的GPS硬件连接介绍 (12)第4章基于单片机的GPS软件设计 (13)4.1 GPS NAEA 0183数据格式介绍 (144)4.2基于单片机的GPS软件开发环境 (14)4.2.1程序编译环境――Keil uVision4 (14)4.2.2串口通信调试工具――COMPort Debuger V2.00 (15)4.2.3单片机程序编程软件――SLISPV1.3.2 (16)4.2.4 GPS接收模块调试软件——uNav Analyzer (17)4.3基于单片机的GPS软件设计思路 (17)4.4 各模块软件设计 (18)4.4.1 串口初始化模块 (18)4.4.2 液晶模块初始化模块 (19)4.4.3 数据接收模块 (20)4.4.4 数据格式调整送显模块 (21)第五章总结 (25)致谢 (26)参考文献 (27)第1章引言1.1课题的背景及意义自第一颗GPS试验卫星于1978年2月22日入轨运行以来,以卫星为动态已知点的无线电导航定位时代就已经开启。
基于51单片机的GPS定位系统
摘要全球定位系统(GPS)是由美国国防部开发的一种先进的无线电导航系统。
该系统能够全天候、全方位的为海陆空用户提供连续的、高精度的三维坐标、三维速度和时间等信息。
它所具有的诸多优点是其他导航设备所无法比拟地。
现在,GPS 接收机作为一种先进的导航和定位仪器,已在军事及民用领域得到广泛的应用。
本设计详细介绍了一种成本低又能满足性能使用要求的经济型GPS接收机的设计方案。
此方案基于单片机、GPS模块和1602液晶显示屏等硬件 , 并应用C语言实现了 GPS 信号的提取、显示及基本的键盘控制操作等。
经过实践测试 ,这种接收机可以达到基本 GPS信息接收以及显示,可以做到体积小、精度高、连续导航,并可广泛应用于个人野外旅游探险、出租汽车定位及海上作业等领域。
关键词: GPS;单片机;上位机;LCD1602ABSTRACTGlobal Positioning System(GPS) is the most advanced radio navigation system which was developed by the U.S Department of Defence. The system can be used under any weather conditions, all day long and anywhere on the earth. It can provide land, marine and airborne user with continuous, highly accurate three-dimension position, velocity, time dataetc. It has various advantages that are unexampled other kind of navigation equipment. Now GPS receivers, as a type of advanced equipment on navigation and positioning, have been widely used in both military and civil field.This design introduced in detail one kind of low-cost economy GPS receiver's design proposal which can satisfy the performance operation requirements .This plan is based on single chip computer、GPS and 1602 liquid crystal display monitors, and has realized the GPS signal extraction, the demonstration and the basic keyboard control operation and so on using the C language. By practical measurement, the receiver can achieve GPS information receive and display. It has small size and low cost, can be used in wild adventure tourism, taxi positioning and operations at sea.KEY WORDS:GPS; MCU;PC; LCD1602目录前言 (3)第1章GPS系统简介及设计方案选择 (4)1.1 GPS系统简介 (4)1.1.1 GPS由来及发展 (4)1.1.2 GPS定位基本原理 (4)1.1.3 GPS接收机定位流程 (4)1.1.4 任务的描述 (5)1.2 设计方案选择 (6)1.2.1 方案一 (6)1.2.2方案二 (6)第2章系统硬件设计 (7)2.1单片机 (7)2.2 GPS模块 (7)2.2.1 概述 (12)2.2.2 主要技术参数................................ 错误!未定义书签。
单片机gps模块原理
单片机gps模块原理单片机GPS模块原理一、引言GPS(Global Positioning System)即全球定位系统,是利用卫星信号进行定位的一种先进技术。
在现代社会中,GPS已广泛应用于航空、航海、交通运输、军事、地质勘探、气象预报等领域。
而单片机GPS模块则是将GPS技术应用于单片机系统中的一种解决方案,本文将对其原理进行介绍。
二、GPS工作原理GPS系统由地球上的24颗卫星、地球上的控制站和接收设备组成。
卫星通过发送无线电信号,接收设备接收并计算信号的传播时间,从而确定接收设备的位置。
1. 卫星发射信号GPS卫星以固定的时间间隔发送信号,包含了卫星的位置和时间信息。
这些信号经过天线发射出去,以无线电波的形式传播。
2. 接收设备接收信号接收设备中的天线接收到卫星发射的信号后,将其转化为电信号,并经过放大和滤波处理。
3. 信号处理接收设备将接收到的信号进行进一步处理,包括信号的解调、解码和计算。
4. 位置计算通过接收到的多个卫星信号,接收设备可以计算出自身的位置。
这是通过测量信号传播时间和卫星位置来实现的。
5. 数据输出接收设备将计算得到的位置信息输出给单片机,供后续处理和应用。
三、单片机GPS模块原理单片机GPS模块是将GPS接收设备与单片机集成在一起的模块。
其主要功能是通过接收GPS卫星信号,计算并输出位置信息给单片机,实现对位置信息的实时监测和应用。
1. GPS接收模块单片机GPS模块中的GPS接收模块负责接收卫星发射的信号,并进行信号处理和解码。
这一模块通常包括天线、射频前端、中频处理和数据解码等部分。
2. 单片机控制模块单片机控制模块是单片机GPS模块的核心部分,负责控制GPS接收模块的工作,并进行数据的处理和计算。
单片机可以通过串口或其他接口与GPS接收模块进行通信。
3. 数据存储模块单片机GPS模块通常还包括一个数据存储模块,用于存储接收到的位置信息和其他相关数据。
这样可以实现对历史数据的记录和查询。
基于单片机的GPS定位系统设计【范本模板】
基于单片机的GPS定位系统设计摘要GPS是全球定位系统英文名词Global Positioning System的缩写.该系统是美国布设的第二代卫星无线电导航系统。
它能为用户提供全球性、全天候、连续、实时、高精度的三维坐标、三向速度和时间信息.其目的是在全球范围内对地面和空中目标进行准确定位和监测。
现在,GPS接收机作为一种先进的导航和定位仪器,已在军事及民用领域得到广泛的应用。
本设计是基于AT89C51单片机来实现的简易GPS定位信息显示系统。
本控制系统主要完成接受数据、时间显示、经度显示、纬度显示等常规功能.此方案基于单片机、GPS模块和12864液晶显示屏等硬件,并应用C语言实现了GPS信号的提取、显示及基本的键盘控制操作等。
经过实践测试,这种接收机可以达到基本GPS信息的接收以及显示,可以做到体积小、精度高、连续导航,并可广泛应用于个人野外旅游探险、出租汽车定位及海上作业等领域。
关键词:GPS定位系统,单片机,液晶显示屏DESIGN OF GPS RECEIVER BASED ON 51 SINGLE CHIPCOMPUTERABSTRACTGPS is the abbreviation of the English term Global Positioning System global positioning system. The system is the United States laid the second generation satellite radio navigation system. It can provide users with continuous, real—time,global, round—the—clock,high precision three dimensional coordinates, three velocity and time information. Aimed at targets on the ground and in the air around the world an accurate positioning and monitoring。
基于单片机的GPS全球卫星定位系统设计
目录第一章GPS简介及基本理论 (2)1.1 GPS的概述 (2)1.2 GPS的组成 (3)1.3 GPS的发展趋势 (3)1.4 Globalsat和HOLUX的EB-3531 (4)1.5 EB-3531的特点 (5)第二章硬件电路设计 (7)2.1 电源转换电路设计 (7)2.2 GPS接收模块与单片机接口电路设计 (9)2.3 单片机控制系统的硬件电路 (9)第三章软件部分设计 (11)3.1 串口通行模块 (11)3.2主程序设计 (13)第四章调试 (15)4.1 硬件调试 (15)4.2 软件调试 (15)第五章总结 (17)致谢 (18)参考文献 (19)第一章 GPS简介及基本理论1.1 GPS的概述GPS是英文Navigation Satellitte Timing and Ranging/Global Positioning System的字头缩写词(NAVSTAR/GPS)的简称。
它的含义是,利用卫星的测时和测距进行导航,以构成全球卫星定位系统。
现在国际上已经公认:将这一全球定位系统简称:GPS。
GPS系统的前身为美军研制的一种“子午仪”导航卫星系统(Transit),1958年研制,64年正式投入使用。
该系统用5到6颗卫星组成的星网工作,每天最多绕过地球13次,并且无法给出高度信息,在定位精度方面也不尽如人意。
然而,子午仪系统使得研发部门对卫星定位取得了初步的经验,并验证了由卫星系统进行定位的可行性,为GPS系统的研制埋下了铺垫。
由于卫星定位显示出在导航方面的巨大优越性及子午仪系统存在对潜艇和舰船导航方面的巨大缺陷。
美国海陆空三军及民用部门都感到迫切需要一种新的卫星导航系统。
为此,美国海军研究实验室(NRL)提出了名为Tinmation的用12到18颗卫星组成10000km高度的全球定位网计划,并于67年、69年和74年各发射了一颗试验卫星,在这些卫星上初步试验了原子钟计时系统,这是GPS系统精确定位的基础。
单片机程序
51 单片机处理GPS 信号程序附录B:程序#include "display.h"GPS_INFO GPS; //GPS 信息结构体GPS 为结构体类型变量uchar code beiwei[] = "北纬";uchar code nanwei[] = "南纬";uchar code dongjing[] = "东经";uchar code xijing[] = "西经";uchar code sudu[] = "速度: ";uchar code hangxiang[] = "航向: ";uchar code gaodu[] = "高度: ";uchar code jiaodu[] = "角度: ";uchar code haiba[] = "海拔: ";uchar code du[] = "度";uchar code meter[] = "米";uchar code kmperhour[] = "km/h";uchar code date[] = " 年月日";void Show_Float(float fla, uchar x, uchar y);void GPS_DispTime(void){ uchari = 0;ucharch;char time[5];Lcd_DispLine(0, 0, date); //年月日Int_To_Str(GPS.D.year,time); //将年转换成字符串,存在time 中Lcd_SetPos(0, 0); //设置显示地址51 单片机处理GPS 信号程序if(strlen(time)==4) //判断接收数据是否有效,有效则显示{ i = 0;while(time[i] != '\0'){ ch = time[i++]; Lcd_WriteDat(ch); //显示年}}Int_To_Str(GPS.D.month,time);Lcd_SetPos(0, 3);if(strlen(time)==2) //判断接收数据是否有效,有效则显示{ i = 0;while(time[i] != '\0'){ ch =time[i++];Lcd_WriteDat(ch);}}Int_To_Str(GPS.D.day,time);Lcd_SetPos(0, 5);if(strlen(time)==2) //判断接收数据是否有效,有效则显示{ i = 0;while(time[i] != '\0'){ ch =time[i++];Lcd_WriteDat(ch);}}Int_To_Str(GPS.D.hour,time);Lcd_SetPos(1, 1);if(strlen(time)==2) //判断接收数据是否有效,有效则显示{ i = 0;while(time[i] != '\0'){ch =time[i++];Lcd_WriteDat(ch);}}Lcd_WriteDat(' ');Lcd_WriteDat(':');Int_To_Str(GPS.D.minute,time);Lcd_SetPos(1, 3); if(strlen(time)==2) //判断接收数据是否有效,有效则显示{ i = 0;while(time[i] != '\0'){ch =time[i++];Lcd_WriteDat(ch);}}Lcd_WriteDat(' ');Lcd_WriteDat(':');Int_To_Str(GPS.D.second,time);Lcd_SetPos(1, 5);if(strlen(time)==2) //判断接收数据是否有效,有效则显示{i = 0;while(time[i] != '\0'){ch =time[i++];Lcd_WriteDat(ch);}}}void GPS_DisplayOne(void) //第一屏{ucharch, i;char info[10];ET0=0; //T0 的溢出中断允许位,禁止T0 的溢出中断clr_screen();//Lcd_WriteCmd(0x01); //清屏GPS_DispTime(); //显示日期,时间if (GPS.NS == 'N') //判断是北纬还是南纬Lcd_DispLine(2, 0, beiwei);else if (GPS.NS == 'S')Lcd_DispLine(2, 0, nanwei);if (GPS.EW == 'E') //判断是东经还是西经Lcd_DispLine(3, 0, dongjing);else if (GPS.EW == 'W')Lcd_DispLine(3, 0, xijing);Int_To_Str(titude_Degree,info); //纬度Lcd_SetPos(2, 2);if(strlen(info)==2){ //只有正常显示纬度,才显示纬分i = 0;while(info[i] != '\0'){ ch = info[i++];Lcd_WriteDat(ch);}Lcd_WriteDat(' ');Lcd_WriteDat(' ');Lcd_WriteDat(0xA1);Lcd_WriteDat(0xE3); //显示度的符号Int_To_Str(titude_Cent,info); //纬分if(strlen(info)==2){ //只有正常显示纬分,才显示纬秒i = 0;while(info[i] != '\0'){ ch = info[i++];Lcd_WriteDat(ch);}Lcd_WriteDat(0xA1);Lcd_WriteDat(0xE4); //显示秒的符号Int_To_Str(titude_Second,info); //纬秒if(strlen(info)==2){ i = 0;while(info[i] != '\0'){ ch = info[i++];Lcd_WriteDat(ch);}}}}Int_To_Str(GPS.longitude_Degree,info); //经度if(strlen(info)==3){ Lcd_DispLine(3, 2, info);Lcd_WriteDat(' ');Lcd_WriteDat(0xA1); Lcd_WriteDat(0xE3);Int_To_Str(GPS.longitude_Cent,info); //经分if(strlen(info)==2){ Lcd_DispLine(3, 5, info);Lcd_WriteDat(0xA1);Lcd_WriteDat(0xE4);Int_To_Str(GPS.longitude_Second,info); //经秒if(strlen(info)==2){ Lcd_DispLine(3, 7, info);}}}ET0=1;}void GPS_DisplayTwo(void) //第二屏用于显示单位{ clr_screen();//Lcd_WriteCmd(0x01); //清屏ET0=0;Lcd_DispLine(0, 0, sudu);Lcd_DispLine(1, 0, hangxiang);Lcd_DispLine(2, 0, gaodu);Lcd_DispLine(3, 0, haiba);Show_Float(GPS.speed, 0, 3);Lcd_DispLine(0, 6, kmperhour);Show_Float(GPS.direction, 1, 3);Lcd_DispLine(1, 6, du);Show_Float(GPS.height_ground, 2, 3);Lcd_DispLine(2, 6, meter);Show_Float(GPS.height_sea, 3, 3);Lcd_DispLine(3, 6, meter);ET0=1;}void Show_Float(float fla, uchar x, uchar y){ intintegar;char Info[10],ch;uchari;Lcd_SetPos(x, y);integar = (int)fla; // 显示整数部分Int_To_Str(fla,Info); //显示整数部分i = 0;while(Info[i] !='\0'){ ch=Info[i++];Lcd_WriteDat(ch);}Lcd_WriteDat('.'); //显示小数点fla = fla - integar; //显示小数部分fla = fla * 10; //0.1 // 显示0.1integar = (int) fla; fla = fla - integar; // 改变fla 的值,使fla 总是小于1ch = integar + 0x30;Lcd_WriteDat(ch);fla = fla*10; //0.01 // 显示0.01integar = (int) fla;fla = fla - integar; // 改变fla 的值,使fla 总是小于1ch = integar + 0x30 ;Lcd_WriteDat(ch);}GPS 程序:#include "GPS.h"#include "LCD.h"#include <string.h>uchar code init1[] = {"BASE-MCU GPS 终端"};uchar code init2[] = {"商院电信091 班"};uchar code init3[] = {"GPS 初始化......"};uchar code init4[] = {"搜索定位卫星...."};static ucharGetComma(ucharnum,char* str);static double Get_Double_Number(char *s); //得到双精度的数据static float Get_Float_Number(char *s); //得到单精度的数据static void UTC2BTC(DATE_TIME *GPS); //格林时间到北京时间的转换void GPS_Init(void) //GPS 初始化{ Lcd_DispLine(0, 0, init1);Lcd_DispLine(1, 0, init2);Lcd_DispLine(2, 0, init3);Lcd_DispLine(3, 0, init4);}intGPS_RMC_Parse(char *line,GPS_INFO *GPS) //运输定位数据最大帧70 { //*GPS 为结构体类型的指针ucharch, status, tmp;float lati_cent_tmp, lati_second_tmp; //经度的分、秒临时变量float long_cent_tmp, long_second_tmp; //纬度的分、秒临时变量float speed_tmp; //速度的临时变量char *buf = line;ch = buf[5];status = buf[GetComma(2, buf)]; //定位状态给status,判断是否是A,if (ch == 'C') //如果第五个字符是C,($GPRMC)推荐最小定位信息{ if (status == 'A') //如果数据有效,则分析‘V’无效,‘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;speed_tmp = Get_Float_Number(&buf[GetComma(7, buf)]); //速度(单位:海里/时) GPS->speed = speed_tmp * 1.85; //1 海里=1.85 公里GPS->direction = Get_Float_Number(&buf[GetComma(8, buf)]); //角度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);return 1;}}return 0;}intGPS_GGA_Parse(char *line,GPS_INFO *GPS) //全球定位数据,最大帧为72 { //丛这个数据得到海拔的数据ucharch, status;char *buf = line; ch = buf[4];status = buf[GetComma(2, buf)];if (ch == 'G') //$GPGGA 丛这个数据得到海拔的数据{ if (status != ','){GPS->height_sea = Get_Float_Number(&buf[GetComma(9, buf)]);GPS->height_ground = Get_Float_Number(&buf[GetComma(11, buf)]);return 1;}}return 0;}static float Str_To_Float(char *buf) //字符串到单精度的转换函数{ float rev = 0;float dat;int integer = 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 ++;}return rev;}static float Get_Float_Number(char *s){ char buf[10];uchari;float rev;i=GetComma(1, s);i = i - 1;strncpy(buf, s, i);buf[i] = 0;rev=Str_To_Float(buf);return rev;}static double Str_To_Double(char *buf) //字符串到双精度的转换函数{ double rev = 0;double dat;int integer = 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 ++;}return rev;}static double Get_Double_Number(char *s){ char buf[10];uchari;double rev;i=GetComma(1, s);i = i - 1;strncpy(buf, s, i);buf[i] = 0;rev=Str_To_Double(buf);return rev;}static ucharGetComma(ucharnum,char *str){ uchari,j = 0;intlen=strlen(str); //字符串的长度for(i = 0;i <len;i ++){ if(str[i] == ',') //计算字符串中的逗号的个数j++;if(j == num)return i + 1; //把逗号后的字符下标值返回}return 0;}static void UTC2BTC(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 ++;}}}void Int_To_Str(intx,char *Str){ int t;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';}LCD 程序:#include "LCD.h"void delay(uint z) // 延时1MS{ uint x, y;for (x = z; x > 0; x--)for(y = 110; y > 0; y--);}void clr_screen(){ Lcd_WriteCmd(0x34); //扩充指令操作delay(5);Lcd_WriteCmd(0x30); //基本指令操作delay(5);Lcd_WriteCmd(0x01); //清屏delay(5);}void Lcd_WriteCmd(ucharcmd) //LCD 命令写入函数{LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();delay(5);P0 = cmd;DelayNOP();LCD_EN = 1;DelayNOP();LCD_EN = 0; ;}void Lcd_WriteDat(uchardat) //LCD 数据写入函数{LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delay(5);DelayNOP();LCD_EN = 1;DelayNOP();LCD_EN = 0;}void Lcd_Init(void){ Lcd_WriteCmd(0x34); //扩充指令操作delay(5);Lcd_WriteCmd(0x30); //基本指令操作delay(5);Lcd_WriteCmd(0x0C); //显示开,关光标delay(5);Lcd_WriteCmd(0x01); //清除LCD 的显示内容delay(5);}void Lcd_SetPos(ucharX,uchar Y) //显示地址处理{ucharpos;if (X==0){X=0x80;}else if (X==1){X=0x90;}else if (X==2){X=0x88;}else if (X==3){X=0x98;}pos = X+Y ;Lcd_WriteCmd(pos); //显示地址}void Lcd_DispLine(uchar line, ucharpos, uchar *str){inti = 0;Lcd_SetPos(line, pos); //LCD 显示位置设定while (str[i] != '\0'){ Lcd_WriteDat(str[i]); //LCD 显示数据i++;}}源程序:#include <reg51.h>#include <stdio.h>#include <string.h>#include "GPS.h"#include "LCD.h"#include "display.h"sbit led1 = P2^0; //接收数据指示灯sbit led2 = P2^1; //GPRMC 数据有效指示灯sbit led3 = P2^2; //GPGGA 数据有效指示灯#define REV_YES led1 = 0#define REV_NO led1 = 1#define RMC_YES led2 = 0#define RMC_NO led2 = 1#define GGA_YES led3 = 0#define GGA_NO led3 = 1char xdatarev_buf[80]; //接收缓存ucharxdatarev_start = 0; //接收开始标志ucharxdatarev_stop = 0; //接收停止标志ucharxdatagps_flag = 0; //GPS 处理标志ucharxdatachange_page = 0; //换页显示标志ucharxdatanum = 0; //extern GPS_INFO GPS; //在display.c 中定义,使用时要加extern/*****************************//********初始化串口***********//******************************/void Uart_Init(void){TMOD = 0x21; //0010 0001 定时器1 工作在模式2(8 位自动重装)//定时器0 工作在模式1(16 位定时器/计数器)//SCON=0X50;PCON=0X00;TH0=0x3c;TL0=0xb0;TH1=0xFa; // 波特率为4800TL1=0xFa; //TR1=1; //开启定时器1REN=1; //允许接收数据SM0=0; //串口工作在第一模式SM1=1;TI=0; //发送中断清0RI=0; //接收中断清0EA=1; //开总中断ES=1; //串口1 中断允许ET0 = 1; //定时器0 中断允许}/****************************************主函数/****************************************/void main(void){ ucharerror_num = 0;Uart_Init(); //初始化串口Lcd_Init(); //初始化LCDGPS_Init(); //初始化GPSrev_stop=0; //接收停止标志REV_NO; //接收数据指示灯关while(1){if (rev_stop) //如果接收完一行{TR0 = 1; //开启定时器0REV_YES; //接收数据指示灯开if ( change_page % 2 == 1) //换页{if (GPS_GGA_Parse(rev_buf, &GPS)) //解析GPGGA{GGA_YES;GPS_DisplayTwo(); //显示第二页信息error_num = 0;gps_flag = 0; //GPS 处理标志rev_stop = 0; //接收停止标志REV_NO; //接收数据指示灯关}else{error_num++;if (error_num>= 20) //如果数据无效超过20 次{GGA_NO; //GPGGA 数据无效指示灯error_num = 20;GPS_Init(); //返回初始化}gps_flag = 0;rev_stop = 0;REV_NO;}}else{if (GPS_RMC_Parse(rev_buf, &GPS)) //解析GPRMC{RMC_YES;GPS_DisplayOne(); //显示GPS 第一页信息error_num = 0;gps_flag = 0;rev_stop = 0;REV_NO;}else{error_num++;if (error_num>= 20) //如果数据无效超过20 次{RMC_NO;error_num = 20;GPS_Init(); //返回初始化}gps_flag = 0;rev_stop = 0;REV_NO;}}}}}/***************************************************************//*************************定时器0 用作换页***********************/ /***************************************************************/void timer0(void) interrupt 1{ static uchar count = 0;TH0 = 0x3c;TL0 = 0xb0;if (count == 200) //2*5 秒钟{count = 0;change_page++; //换页if (change_page == 10)change_page=0;}}/***************************************************************//*************************串口数据接收**************************//***************************************************************/ void Uart_Receive(void) interrupt 4{ucharch;ES = 0; //串口1 中断禁止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; //串口1 中断允许}。
基于51单片机的GPS定位系统设计
基于51单片机的GPS定位系统设计
GPS定位系统是一种高精度、高可靠性的定位技术,基于51单
片机的GPS定位系统可以用于车辆、船只、无人机等物体的追踪和
导航。
以下是基于51单片机的GPS定位系统设计的步骤:
1. 硬件设计:
GPS模块:选择一款支持串口通信,输出NMEA协议的GPS模块。
51单片机:选择适当的型号,具备较好的计算和通信能力。
显示模块:可以选择LCD显示屏或OLED显示屏来显示当前的定
位信息。
电源模块:GPS模块和51单片机都需要可靠的电源供应,可以
选择锂电池或干电池。
外部存储模块:为了存储历史定位数据,可以选择SD卡存储模块。
2. 软件设计:
a.串口通信程序:通过串口通信程序从GPS模块接收NMEA协议
的数据。
b.解析程序:解析NMEA协议的数据,并提取相关的定位信息
(经度、纬度、速度、时间等)。
c.定位算法:采用常见的定位算法(如卡尔曼滤波、迭代解算等)来计算当前位置。
d.存储程序:将计算出的位置信息存储到SD卡中。
e.显示程序:利用LCD或OLED显示屏显示当前的定位信息。
3. 系统测试
将系统部署到实际场景中进行测试,记录数据并进行分析。
根据测试结果对系统进行改进和优化,以提高其可靠性和精度。
总之,基于51单片机的GPS定位系统设计需要较高的硬件和软件开发能力,需要深入了解GPS原理、51单片机编程以及相关算法的实现方式。
基于51单片机的GPS定位系统的设计
基于51单片机的GPS 定位系统的设计戴陆兵(渭南师范学院 物理与电气工程学院 08级电信1班)摘 要 :本系统采用AT89S52单片机为核心设计了一种GPS 定位系统,该系统利用JRC G591 GPS 模块和DS18B20模块完成了GPS 数据和温度的采集,并通过51单片机对数据进行处理后实时显示到LCD12864液晶显示器上。
完成了系统的硬件和软件的设计。
本系统具有性能好、精度高、体积小、价格低廉和应用广的特点。
关键词:GPS;单片机;LCD12864;定位;全球定位系统(Global Positioning System 简称GPS)是美国第二代军用导航系统,可实现全球范围内的实时导航和定位。
GPS 由太空卫星、地面控制系统、用户设备三个部分组成。
由于GPS 具有全球覆盖以及精度高、定位速度快、实时性好、抗干扰能力强等特点,近年来在国内外得到了广泛的应用,在各个领域发挥了极大的作用,已成为了信息时代不可或缺的一部分[1]。
本设计采用AT89S51单片机为控制核心,设计的GPS 定位系统可以计算和显示日期、时间、经度、纬度、速度、海拔高度和实时温度等信息。
具有价格低廉、稳定性高和体积小等优点。
研究和开发GPS 定位系统具有十分重要的意义。
1 系统设计方案1.1 整体介绍本设计以ATMEL 公司单片机AT89S52为控制核心,控制GPS 信息的接收和DS18B20温度信息的采集,并通过一系列的运算和一个独立按键将接收到的信息实时分屏显示到LCD12864液晶显示器上。
本系统所显示的信息有当前经度、纬度、接收到的卫星数、总卫星数、定位与否、日期、时间、温度、速度、和海拔高度。
系统框图见图1。
图1 GPS 定位系统框图 U n R e gi s t e r e d1.2 GPS 模块介绍GPS 接收机只要处于工作状态就会源源不断的把接收并计算出的GPS 导航定位信息通过串口传送出去,在没有进一步处理之前,传送的数据是一长串字节流信息。
《基于单片机的Gps-Gprs定位系统的设计》开题报告
基于单片机的Gps-Gprs定位系统的设计研究背景移动无线通讯和卫星定位技术的发展,使得基于Gps-Gprs的定位系统得以广泛应用,可以用于物流追踪、车辆监控等多个领域。
而单片机作为嵌入式系统的核心控制单元,其低功耗、成本低等优势也使得其在Gps-Gprs定位系统中得到了广泛应用。
研究目的本项目旨在设计一种基于单片机的Gps-Gprs定位系统,并通过实验验证其定位精度和实用性能。
技术路线系统框架本系统包含以下主要模块:Gps模块、Gprs模块、单片机模块、车载器模块。
其中,Gps模块用于获取车辆位置信息,Gprs模块则负责将位置信息发送到云端服务器,单片机模块则用于控制Gps和Gprs模块的数据传输和处理,车载器模块则是用户可以通过Web端实时查看车辆定位和轨迹的界面。
关键技术1.Gps数据解码:通过单片机通过串口接收Gps模块的数据,并对其进行解码,得到车辆的坐标信息。
2.Gprs数据传输:单片机通过Gprs模块将车辆的坐标信息发送到云端服务器。
3.数据处理:单片机对获取到的车辆坐标信息进行处理并存储在本地内存中,以备后续数据查询和分析。
4.用户接口:通过Web端提供数据查询服务,让用户可以实时查看车辆定位和轨迹。
实验设计硬件平台本项目采用的硬件平台为:STM32单片机、Gps模块、Gprs模块、SIM卡、车载器模块。
其中,单片机控制Gps和Gprs模块的数据传输和处理;Gps模块用于获取车辆位置信息;Gprs模块则负责将位置信息发送到云端服务器,SIM卡用于进行数据通讯;车载器模块则是用户可以通过Web端实时查看车辆定位和轨迹的界面。
实验步骤1.设计系统框架:确定系统涉及的模块以及各模块之间的交互关系。
2.搭建硬件平台:搭建仿真平台,包括STM32单片机、Gps模块、Gprs模块、SIM卡、车载器模块,并将其进行连接。
3.编写程序:单片机上需要编写程序,完成数据传输、处理和存储。
4.测试:测试系统的各项功能,如Gps定位、Gprs数据传输、数据处理和Web端用户接口等。
基于单片机的GPS定位系统设计文献综述
本科毕业设计(文献综述)题目基于单片机的GPS定位系统设计姓名专业学号201指导教师信息工程学院二○一五年五月基于单片机的GPS定位系统设计基于单片机的GPS定位系统设计文献综述前言GPS卫星导航定位技术于上世纪80年代末引入中国,目前主要在大地测量(测绘、勘探)、海上渔业和车辆定位监控等领域得到了比较广泛的应用.在全球GPS应用领域中,车辆应用所占的比重最大,目前约占总数的40%以上。
1996~1997年间是GPS车辆跟踪系统市场的调整和充实时期。
主要是公安、金融等部门利用其专用的常规无线电台(异频单工电台)通信系统和模拟集群系统,在全国三四十个城市建成了金融运钞车和公安交警车辆跟踪系统。
1998~2000年GPS车辆跟踪系统市场出现了快速增长的势头。
随着我国GSM数字移动通信系统的快速发展与全国普及,作为系统瓶颈问题的通信网络通过采用GSM公众网的短信息服务找到了新的出路,这对GPS车辆跟踪系统的发展起极大的促进作用[3]。
我国现在拥有世界上最大潜力的卫星导航应用市场.经过十多年的发展,我国的卫星导航用户设备市场化的条件日趋成熟,批量化用户群体正在逐步形成,已进入应用行业高速发展的时期。
美国联邦通信委员会规定,到2005年美国95%的用户手机必须配有定位能力,2003年底前,95%的新手机有定位能力。
而移动电话与GPS结合是最好的解决办法。
目前,国际上一些主流手机制造商如诺基亚、爱立信和三星等已开始使用集成的GPS芯片,而日本的日本电信电话移动通信网公司、KDDI和美国的Sprint、Verizon、网信公司等电信运营商也已开始或计划提供基于GPS手机的位置服务[4]。
1 GPS定位研究的意义GPS(Global Position System)是全球定位系统,具有全天候、高精度的特点,伴随着硬件配置的不断提高,应用领域也在不断的扩展,并逐步深入到了人们的日常生活中。
GPS已经在经济、军事、科研和社会生活各领域得到了广泛应用,发挥着重要的作用。
基于单片机采集与显示GPS定位信息系统的设计
放大、 滤波 等一 系 列处 理 过程 , 现对 GP 卫 星 信 实 S 号 的跟踪 、 定 、 量, 而产 生 计算 位 置 的数据 锁 测 从 信息 ( 括 :纬 度 、 度 、 包 经 高度 、 速度 、 日期 、 时间 、 航 向 、 星状 况 等) 由 I 1 出串行 数据 . 卫 , 经 / 7输 O
1 GM6 1 . 2 1 鼠标式 G S接收机 P 本 设 计采 用 的是Na ie M6 1 vB G 1 鼠标式 G S P 接 收机( P Mo s )G 1 接收 机 内置卫 星 接收 天 G S ue . M6 l
1i t b 停止位. P 输出语句有十余种 , P ue GS G SMos 输出的语句有¥ P G , P S , P S , P MC G G A ¥ G A¥ G V¥ R G G G
18 3 6 9 , 0 , , .M,., 0 0 0 7 中得到 15 . 3 , 2 6 1 5 , 2 M, ,0 3 1 4 E , ,6 7 4
线, 并采用 S NY公 司所 设 计 的第 3 高效 能卫 星 O 代 定位 接收 晶片 , 大地 缩小 体积 , 以同时 跟踪 多 大 可
1 G S接收机 工作 原理及输 出数据 格式 P
1 工作 原理 . 1
率为 40 f ( 80b s 默认值 ) i ;输 出标准语句是 G A G,
GS GS R C. A, V, M
G S定 位技 术 的基 本 原理 是 采用 测 量学 中通 P
用 的测距 交会 方 法 .G S接收 机 在某 一 时刻 接 收 P 到 4 以 上 的 G S 星信 号导 航 电文 , 过变 频 、 颗 P卫 通
4
G S定位 仪 提供 了理论 和实践 上 的指 导 .这 对研 P 究 G S 位及其在 综合 导航 中的应 用 , P定 以及对 G S P 的二 次开 发 等都 是非 常 有用 的.
基于51单片机的车辆定位监控系统设计.
基于51单片机的车辆定位监控系统设计摘要近年来,射频识别技术(Radio Frequency Identification)得到了长足的发展,而与之有关的应用也日渐丰富,阅读器,应答器和应用软件系统是一个完整的射频识别系统应该具备的最基础的三部分部件。
射频识别系统最重要的优点是非接触识别,它能穿透雪、雾、冰、涂料、尘垢和条形码无法使用的恶劣环境阅读标签,阅读的速度也非常快,在很多情况下,阅读器的速度能达到100毫秒以内。
其中又以有源式射频的速度为主要特征。
可用于绝大多数我们日常生活中的使用场景,如物品跟踪,物品匹配,维修处理等。
关键词:射频识别技术;优势第一章绪论1.1 背景1.1.1 研究定位技术的背景目前,以基于蜂窝无线网络的定位系统和基于卫星的定位系统为较为成熟实用的无线定位系统。
其中以美国1958年研发成功的GPS(Global Positioning System)为卫星定位的代表。
GPS可以提供车辆定位、防盗、反劫、行驶路线监控及呼叫指挥等功能。
要实现以上所有功能必须具备GPS终端、传输网络和监控平台三个要素。
GPS具有28颗卫星(其中4颗备用)。
分布在6条交点互隔60度的轨道面上,距离地球表面两万千米。
能够达到个体机精度误差不超过十米,综合定位,GPS的定位精度可达到厘米级和毫米级。
目前我们日常生活中使用的GPS定位系统,仅能达到误差精度十米左右。
GPS具备全球全天候定位的特点,定位的精度相对来说比较高,观察反馈时间短,测站间无需同视,使用起来比较简单,应用层面比较广泛等特点。
当然,其他国家和地区也研制了一些具备定位导航功能的基于卫星的定位系统。
其中包括BeiDou Navigation Satellite System,BDS(来自中国),俄罗斯GLONASS导航系统(来自俄罗斯),Galileo satellite navigation system(来自欧盟)。
1.1.2Positioning System和利用无线传感器网络或其他定位手段进行定位都有鲜明的优势和缺点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名:樊建威学号:0801500213
基于单片机AT89C51的GPS经纬度定位信
息处理
引言:GPS 系统是一个高精度、全天候和全球性的无线电导航、定位和定时的多功能系
统。
GPS 技术已经发展成为多领域、多模式、多用途、多机型的国际性高新技术产业。
全球定位系统由三部分构成:地面控制部分,空间部分和用户装置。
地面控制部分由主控站、地面天线、监测站和通讯辅助系统组成;空间部分由24 颗卫星组成;用户装置部分主要由GPS 接收机和卫星天线组成。
GPS 接收机是软硬件结合的电路,相关通道接收来自射频前端的信号并将其转换成数字信号,解调解扩得到导航电文,在微处理器的控制处理后得到最终数据。
GPS 的使用现在已经非常普及,大到航空航海系统,小到个人移动设备,都有着它的身影。
随着GPS 的民用化与成本的降低,已经走入了人们的日常生活中,很多手机、PDA 等手持设备都配备了GPS 功能。
简单的说,GPS 就功能就是在地球经纬座标系下对被测对象的方位进行测定,同时可以提供较高精度与实时的测定数据。
对于基于单片机的便携式设备,如果要获取持有者的位置信息,则GPS 是最好的解决方案。
图1
1.系统的硬件设计
系统的总体设计如图1 所示。
单片机AT89C51 串口TXD、RXD 分别与M-87 的RXA、TXA 进行连接,用于对M-87 进行设置后,采集M-87 的GPS 定位和时间信息;单片机A
T89C51的XTAL1 、XTAL2 采用内部时钟电路, 与11.0592MHz 的石英晶体和电容连接;单片机的复位电路采用加电自动复位电路; P1 口与OL ED 显示模块的数据位DB0-DB7 连接, P2. 1 与引脚RS 连接,选择数据或指令寄存器; P2. 2 与引脚R/ W 连接,选择读或写; P2.
3 与引脚E 连接,使能OL ED显示模块;P2.
4 与引脚CS1 连接,选择左半屏显示或不显示;P2.
5 与引脚CS2 连接,选择右半屏显示或不显示;P2.
6 与引脚RSTB 连接,用于对OL ED进行复位。
2 .系统的软件设计
GPS串口数据解码程序
bit ReceivingF = 0;
bit EndF = 0;
bit RMCF = 0;
bit GGAF = 0;
bit VTGF = 0;
bit GSAF = 0;
uchar xdata GPS_wd[12]; //纬度
uchar xdata GPS_jd[13]; //经度
uchar Segment; //逗号计数
uchar Bytes_counter;
uchar Command;
void GPRMC(uchar);
void GPGGA(uchar);
void GPVTG(uchar);
void GPGSA(uchar);
void gps(uchar);
void gps(uchar tmp)
{
//com_send_byte(tmp);
if(tmp == '$')//起始标志
{
Command = 0;
ReceivingF = 1;
Bytes_counter = 0;
Segment = 0; //清空语句段计数器
return;
}
if(ReceivingF)
{
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;//语句类型$GPGGA
GGAF = 1;
break;
case 'M':Command = 2;//语句类型$GPRMC
RMCF = 1;
break;
case 'T':Command = 3;//语句类型$GPVTG
VTGF = 1;
break;
case 'S':break;
default:Command = 0; //非有效数据类型,终止当前数据接收 ReceivingF = 0;
break;
}
if(Bytes_counter == 4)
if(Command==0 && tmp=='A')
{
Command = 4;//语句类型$GPGSA
GSAF = 1;
}
}
else
{
switch(Command)
{
case 1:GPGGA(tmp);
break;
case 2:GPRMC(tmp);
break;
case 3:GPVTG(tmp);
break;
case 4:GPGSA(tmp);
break;
default:break;
}
}
++Bytes_counter;
}
NewByteF = 0;
return;
}
void GPGGA(uchar tmp)
{
switch(Segment)
case 1: if(Bytes_counter == 3) //$GPGGA 段1处理纬度ddmm.mmmm(度分)格式
{
GPS_wd[Bytes_counter] = '.'; //接收第二个字节后插入'.'
++Bytes_counter;
GPS_wd[11] = '\0';
}
if(Bytes_counter == 0)
++Bytes_counter;
GPS_wd[Bytes_counter] = tmp;
break;
case 2: GPS_wd[0] = tmp; //$GPGGA第2段处理纬度半球N(北半球)或S(南半球)
break;
case 3: if(Bytes_counter == 4) //$GPGGA 段3处理经度dddmm.mmmm(度分)格式
{
GPS_jd[Bytes_counter] = '.'; //接收第3个字节后插入'.'
++Bytes_counter;
GPS_jd[12] = '\0';
}
if(Bytes_counter == 0)
++Bytes_counter;
GPS_jd[Bytes_counter] = tmp;
break;
case 4: GPS_jd[0] = tmp; //$GPGGA第4段处理经度半球E(东经)或W(西经)
break;
}
}。