C52控制GPS程序(2)
时间:2026-01-20
时间:2026-01-20
e '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 == 2 || Bytes_counter == 5) //$GPGGA段1,UTC时间,hhmmss(时分秒)格式,取前6位 转换为HH:MM:SS格式
{
GPS_time[Bytes_counter] = ':';
++Bytes_counter;
}
if(Bytes_counter<8)
GPS_time[Bytes_counter] = tmp;
GPS_time[8] = '\0';
break;
case 2: if(Bytes_counter == 3) //$GPGGA 段2处理 纬度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 3: GPS_wd[0] = tmp; //$GPGGA第3段处理 纬度半球N(北半球)或S(南半球)
break;
case 4: if(Bytes_counter == 4) //$GPGGA 段4处理 经度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 5: GPS_jd[0] = tmp; //$GPGGA第5段处理 经度半球E(东经)或W(
下一篇:16管道热处理硬度检测报告