安信可-A7模块——GPS显示坐标信息解读

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baweiyaoji/article/details/72859810

上一篇博文记录了A7的GPRS功能,并且使用AT命令进行了打电话、发短信。现在学习一下A7的GPS应用。
GPS(全球定位系统):利用GPS定位卫星,在全球范围内实时进行定位、导航的系统。
NMEA-0183协议是GPS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到PC机、PDA等设备。
NMEA-0183协议中,常用的或者说兼容性最广的语句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。
往后我们会自己写程序来解析GPS发回来的数据,现在先明白各个语句中,数据的含义,以便我们在程序里处理。

===========================================

首先,要把A7模块的GPS功能打开,在GPRS模式下用AT命令打开:
AT+GPS=1
然后将原本连在模块U_TXD上的线连到GPS_TXD,然后打开串口调试工具上波特率设置为9600。就能看到GPS发回来的一系列数据:
这里写图片描述

各字段的含义:

这里写图片描述

解读一下一段语句:
$GPRMC,070312.000,A,3029.60430,N,11423.52267,E,0.00,0.00,020617,,,A*63

字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息
字段1:UTC时间,hhmmss.sss格式【7:3:12】
字段2:状态,A=定位,V=未定位【定位】
字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)【3029.60430】
字段4:纬度N(北纬)或S(南纬)【北纬】
字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)【11423.52267】
字段6:经度E(东经)或W(西经)【东经】
字段7:速度,节,Knots【0.00节】
字段8:方位角,度【0.00】
字段9:UTC日期,DDMMYY格式【020617】 -2017/6/2
字段10:磁偏角,(000 - 180)度(前导位数不足则补0)【空】
字段11:磁偏角方向,E=东W=西【空】
字段12:模式,A=自动,D=差分,E=估测,N=数据无效(3.0协议内容)【自动】
字段13:校验值【校验值为63】
(星号”*”为校验和识别符,其后面的两位数为校验和,代表了“$”和“*”之间所有字符(不包括这两个字符)的异或值的十六进制值。)

这里列举该语句是比较重要的,涉及到我们即将通过编程来解析的数据,所以在此先明白它们的含义,以便我们编写程序。

展开阅读全文

求助:GPS模块与单片机结合用LCD显示GPS信息

08-24

我在做GPS模块与单片机结合用LCD显示GPS的信息的课题,我用的是AT89S52单片机晶振12m 波特率设置为4800bps ,但是我把gps的TXD针与单片机的RXD连上..为什么显示不到该显示的GPS信息呢..可能是什么原因呢...我测试过,我的LCD显示函数没问题,它能正常显示出我设定的东西rn我个人认为可能是我的GPS接收函数出问题了,但是我没能找出来,哪位大虾帮帮小弟!!rnGPS接受函数程序(C语言)rn/***********************************************************rn 名称:GPS模块rn 功能:用串口接收GPS模块的定位等信息rn 说明:使用串口(定时器1)rn/***********************************************************/rnrn/*---------------------------------------------------------rn GPS模块串口接收程序:全局变量的定义rn---------------------------------------------------------*/rn#includern#includern#define uchar unsigned charrnuchar gpsnum; //$GPRMC语句数据类型序号rnbit gpsres=0; //开始接收数据标志,1为开始接收rnuchar gpstime[11]; //时间数据rnuchar *gpsptime=gpstime; //时间数据指针rnuchar gpsstatus[2]; //状态数据rnuchar *gpspstatus=gpsstatus; //状态数据指针rnuchar gpsweidu[10]; //纬度数据rnuchar *gpspweidu=gpsweidu; //纬度数据指针rnuchar gpsnors[2]; //南、北半球rnuchar *gpspnors=gpsnors; //南、北纬数据指针rnuchar gpsjingdu[11]; //经度数据rnuchar *gpspjingdu=gpsjingdu; //经度数据指针rnuchar gpseorw[2]; //东、西半球rnuchar *gpspeorw=gpseorw; //东、西经数据指针rnuchar gpsdate[7]; //日期数据rnuchar *gpspdate; //日期数据指针rnrn/*---------------------------------------------------------rn GPS模块串口接收程序:函数声明rn---------------------------------------------------------*/rnvoid GPS_start(); //单片机控制GPS的串口初始化rnrn/*---------------------------------------------------------rn GPS模块串口接收程序:串口初始化rn rn---------------------------------------------------------*/ rnvoid GPS_start()rnrn SCON=0x50; //串口工作于方式1,REN=1rn PCON=0x00; //不倍增rn TMOD=0x20;rn TH1=0xfa; //4800bpsrn TL1=0xfa;rn TR1=1; rn //PS=1; //高优先级rn EA=1;rn ES=1; //开串口中断rn RI=0;rnrnrn/*---------------------------------------------------------rn GPS模块串口接收程序:串口函数rn---------------------------------------------------------*/ rnvoid GPS_INT() interrupt 4rnrn uchar i;rn RI=0;rn if(SBUF=='R') //判断是否为$GPRMC语句rn rn gpsnum=0;rn gpsres=1; //开始接收rn return;rn rn if(SBUF=='*' && gpsres==1) //接收完数据后的处理rn rn gpsnum=0; //复位为第0个数据rn gpsres=0; //停止接收rn ////////修正时间数据为北京时间,24小时制rn if(gpstime[0]<0x32) rn rn i=gpstime[1]+0x08; //小时个位+8,转为北京时间rn if(i>=0x3a)rn rn i=i-0x0a;rn gpstime[0]=gpstime[0]+0x01;rn if(gpstime[0]==0x32&&i>=0x34)rn gpstime[0]=0x30;i=i-0x04; rn rn rn elsern rn i=gpstime[1]+0x04;rn gpstime[0]=0x30; rn rn gpstime[1]=i;rn return; rn rn //////////////////////////////////////////rn if(gpsres==1)rn rn if(SBUF==',') //逗号后为下一个数据rn gpsnum++;return;rn switch(gpsnum) //判断数据类型,然后存储起来rn rn case 0:*gpsptime=SBUF;gpsptime++;break;rn case 1:*gpspstatus=SBUF;gpspstatus++;break;rn case 2:*gpspweidu=SBUF;gpspweidu++;break;rn case 3:*gpspnors=SBUF;gpspnors++;break;rn case 4:*gpspjingdu=SBUF;gpspjingdu++;break;rn case 5:*gpspeorw=SBUF;gpspeorw++;break;rn case 6:break;rn case 7:break;rn case 8:*gpspdate=SBUF;gpspdate++;break;rn case 9:break; rn default:rn rn *gpsptime=gpstime; //复位各数据指针rn *gpspstatus=gpsstatus;rn *gpspweidu=gpsweidu;rn *gpspnors=gpsnors;rn *gpspjingdu=gpsjingdu;rn *gpspeorw=gpseorw;rn *gpspdate=gpsdate;rn break; rn rn rnrn/***********************************************************rn 结束rn/***********************************************************/rn 论坛

没有更多推荐了,返回首页