基于C语言的NMEA-0183解析程序(一)

        基于C语言对NMEA-0183命令进行解析,实现从TXT文档中按数据包读入数据并进行解析,之后根据用户输入定位是否有效,速度阈值,定位卫星数目,卫星信号强度等条件进行筛选输出。

解析引用声明

#ifndef _ANALYSIS_H_
#define _ANALYSIS_H_

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

#include"Type.h"
#include"Operation.h"
#include"NMEA_GPZDA_Analysis.h"
#include"NMEA_GPGGA_Analysis.h"
#include"NMEA_GPGLL_Analysis.h"
#include"NMEA_GPVTG_Analysis.h"
#include"NMEA_GPGSA_Analysis.h"
#include"NMEA_GPGSV_Analysis.h"
#include"NMEA_GPRMC_Analysis.h"

#endif // _ANALYSIS_H_

GPZDA解析

#ifndef _NMEA_GPZDA_Analysis_H_
#define _NMEA_GPZDA_Analysis_H_

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

#include"Operation.h"
#include"Type.h"
/******************************************************************************
 *  Function    -   NMEA GPZDA Analysis
 *
 *  Purpose     -  GPZDA命令解析
 *
 *  Description -  当前时间信息
 *                 $GPZDA,(1),(2),(3),(4),(5),(6)*hh(CR)(LF)
 *
 * modification history
 * ----------------------------------------
 * v1.0  , 2018-12-20,  LynxZhang  written
 * ----------------------------------------
 ******************************************************************************/
u8 *NMEA_GPZDA_Analysis(Nmea_msg *gpsx,u8 *buf)
{
	u8 *p1, *node;
    u8 posx;
    u32 temp;
    if(strlen((char*)buf) == 0)
    {
        return buf;
    }
	p1 = (u8*)strnstr((char *)buf, "$GPZDA", 6);
	if (p1 == NULL)
	{
		return buf;
	}
	posx = NMEA_Comma_Pos(p1, 1);/*UTC时间*/
    if(posx != 0XFF)
    {
		temp = NMEA_Str2num(p1 + posx) / NMEA_Pow(10, 2);/*UTC时间,hhmmss.ss去掉ms*/
		gpsx->utc.hour = temp / 10000;
		gpsx->utc.mint = (temp / 100) % 100;
		gpsx->utc.sec = temp % 100;
    }
	posx = NMEA_Comma_Pos(p1, 2);
	if (posx != 0XFF)
		gpsx->utc.date = NMEA_Str2num(p1 + posx);
	posx = NMEA_Comma_Pos(p1, 3);
	if (posx != 0XFF)
		gpsx->utc.month = NMEA_Str2num(p1 + posx);
	posx = NMEA_Comma_Pos(p1, 4);
	if (posx != 0XFF)
		gpsx->utc.year = NMEA_Str2num(p1 + posx);

	posx = NMEA_End_Pos(p1);/*6*/
	node = p1 + posx + 1;
	return node;
}

#endif // _NMEA_GPZDA_Analysis_H_

 GPGGA解析

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

#include"Operation.h"
#include"Type.h"
/******************************************************************************
 *  Function    -   NMEA GPGGA Analysis
 *
 *  Purpose     -  GPGGA命令解析
 *
 *  Description -  GPS定位信息
 *                 $GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)
 *
 * modification history
 * ----------------------------------------
 * v1.0  , 2018-12-13,  LynxZhang  written
 * ----------------------------------------
 ******************************************************************************/
u8 *NMEA_GPGGA_Analysis(Nmea_msg *gpsx,u8 *buf)
{
	u8 *p1, *node;
    u8 posx;
	u32 temp;
	float rs;
    if(strlen((char*)buf) == 0)
    {
        return buf;
    }
	p1 = (u8*)strnstr((char *)buf, "$GPGG
  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值