利用ADUC7060读取GPS信息
0赞一条GPGGA格式的导航电文如下所示:
$GPGGA,091047.00,3959.7618,N,11619.5350,E,1,07,2.3,60.0,M,14.2,M,,*4A
GPGGA格式中共包含15条信息,之间用逗号隔开,我们为它们一一标号为1-15如下所示:
$ GPGGA, hhmmss, XXXX.XXXX, N/S, XXXXX.XXXX, E/W,
1 2 3 4 5
X, XX, XXX, 0/-XXXX, M, 0/-XXX, M, XXX, XXXX *hh<CR><LF>
6 7 8 9 10 11 12 13 14 15
各条信息的解释如下
1:世界时(UTC):hh:时mm:分ss:秒
北京时间(东八时区)=UTC+8(小时)
2:纬度:“度度分分.分分分分”方式表示。小数点后也以分为单位
3:N:北纬S:南纬
4:经度:“度度度分分.分分分分”方式表示。小数点后也以分为单位
5:E:东经W:西经
6:GPS质量指示0:未定位1:GPS定位2:差分GPS定位
7:使用到的卫星数0~12
8:HDOP值水平方向的定位精度劣化程度系数。
3 维定位时也会输出HDOP值。但在未定位时输出“099”。
如果输出语句的经纬度输出设置精度达不到1/10000时,小数点后省略。
9:天线高度0:正数,高于海平面-:负数,低于海平面
10:天线高度单位m
11:地理高度0:正数,高于海平面-:负数,低于海平面
12:地理高度单位m
13:DGPS修正经过的时间差分数据时龄单位=秒
14:差分基准站发播的ID编号
15:校验和
分析可以看出,电文以“$”开始,回车符结束,各种信息间以“,”分开,根据这个规律编写了解码程序,软件流程如下图

C程序文件如下:
void ParseGPSInfo(char *lpszinBuf)
{
int i = 0;
int j = 0;
int SectionID = 0;
for(i=0;( i<strlen(lpszinBuf));i++)
{
if(*(lpszinBuf+i)==',')
{
SectionID++;
j = 0;
}
else
{
switch(SectionID)
{
case 1:
Time[j++] = *(lpszinBuf+i);
break;
case 2:
Lat[j++] = *(lpszinBuf+i);
break;
case 4:
llong[j++] = *(lpszinBuf+i);
break;
case 9:
Height1[j++] = *(lpszinBuf+i);
break;
case 11:
Height2[j++]= *(lpszinBuf+i);
break;
default: break;
}
}
}
}
