资源描述:
《用单片机处理GPS数据---程序实例.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.GPS标准数据(GGA)$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>,*hh<1>:UTC当地时间,时分秒格式。<2>:纬度,ddmm.mmmm格式。<3>:纬度半球,N或者S。<4>:经度,ddmm.mmmm格式。<5>:经度半球,E或者W。<6>:GPS质量参数。<7>:可用卫星数,00~12。<8>:水平精度,0.5~99.9。<9>:天线上下平均海拔,-999.9~99999.9米。<10>:海拔高度,-999.9~9999.9米。<11>:差分GPS数据传输间隔时间,单
2、位秒,在非差分模式下为空。<12>:差分基准站ID,非差分为空。2.推荐最小GPS/TRANSIT数据(RMC)$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<1>:UTC当地时间,时分秒格式。<2>:工作状态,A=可用;V=接收器警报,不可用。<3>:纬度,ddmm.mmmm格式。<4>:纬度半球,N或者S。<5>:经度,ddmm.mmmm格式。<6>:经度半球,E或者W。<7>:对地速度,000.0~999.9节。<8>:对地航向,000.0°~359.9°<9>:UTC当地时间,d
3、dmmyy格式。<10>:磁变。<11>:磁变方向。<12>:工作模式,A=自主,D=差分,E=评估,N=数据无效。3.3D速度信息(PGRMV)$PGRMV,<1>,<2>,<3>*hh<1>:真实东向速度。<2>:真实北向速度。<3>:垂直速度。4.出语句激活/屏蔽语句(PGRMO)$PGRMO<1>,<2>*hh<1>:目标语句名。<2>:目标语句状态参数。5.GPS板设置语句(PGRMC)$PGRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*hh<
4、LF><1>:工作模式。<2>:海拔高度。<3>~<8>:地球数据索引。<9>:差分模式参数。<10>:NMEA波特率设置。<11>:速度过滤参数。<12>:秒脉冲模式。<13>:秒脉冲脉宽设置。<14>:默认值。排除掉对本系统无作用的管脚,实际上我们只需要用到GARMINGPS25LP的Pin4和Pin5,具体连接概图如下:图2:单片机与GARMINGPS25LP硬件接口再让我们回过头来看看显示的硬件部分设计,在开始设计前有必要对图形液晶模块的工作方式做一个简要的说明。一个字符要在液晶模块上显示出来必须经过三个基本的控制操作:1.向液晶控制芯片写指令代码。2.象液晶控制芯片
5、写显示数据。3.读显示数据。而且在这一过程中,液晶控制器必须处于空闲状态,否则只可以对其进行读状态操作。了这些代码我们就可以很简单的完成字符的液晶显示了,接下来是设计的最后部分,即GARMINGPS25LP与单片机的软件接口。这一部分的流程如下图:图5:主程序流程在处理主程序前,有必要先将串口中断服务程序先给出,具体代码如下:serial()interrupt4using1{RI=0;If(SBUF==0x24)/*判断是否有GPS数据到来。0x24为西文字符$的ASCII码。{record=1;i=0;igps=0;Numbercoma=0;}if(record==1){i
6、f(SBUF==0x2c){numbercoma++;}if(numbercoma==1)/*因UTC紧跟在第一个逗号后,故记录到第一个逗号后就开始记录时间数据。{stringgps[igps]=SBUF;igps++;}if(SBUF==’*’)/*判断GPRMC数据是否结束。{stringgps[igps]=’ ’;/*为字符串添加结束标志。j=0;len2=spintf(stringgps,”%s”,stringgps+1);NDIG=sprintf(BUFFER,”k1:%d”,k1);Show();If(len2!=0){uintnumgps=atoi(strin
7、ggps);}numgps=0;numbercoma=0;record=0;igps=0;}}}这里我们可以看出,单片机仅会记录第一个逗号后的数据(数据被存在数据缓冲区BUFFER中,即UTC本地时间数据,因此在主程序中我们需要考虑的问题就是触发串口中断,并将收到的数据送液晶显示。主程序的代码如下:#include#include#include#defineucharunsignedchar#defineuintunsignedintvoidIN