如何截取GPS接收机的GPGGA通信协议数据

该代码实现了一个OnComm函数,用于处理GPS接收机发送的GPGGA通信协议数据。通过判断接收到的字符,识别GPGGA信息的包头、包尾和校验码,对数据进行校验并解析,提取时间、位置等信息,并存储到数据库。如果校验正确,会显示数据并添加到记录中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义OnComm函数如下,接收字符数据即开始执行,判断为哪什么数据,若是GPGGA的信息将会显示在接收文本框中。
界面图片
  1. /*------------------------------------------------------ 
  2.  * OnComm函数实现 
  3.  * 触发条件:当输入缓冲区有字符时,有消息触发 
  4.  * 执行结果:字符接收,并显示在文本框m_strEditReceiveMsg 
  5.  *------------------------------------------------------*/ 
  6. #define CR 0x0D //定义回车
  7. #define LF 0x0A //定义换行
  8. LONG CReadGPSView::OnComm(WPARAM ch, LPARAM port) 
  9. {
  10.     /*------------------------------------------------------
  11.      * 声明变量:静态变量连续接收字符并保存
  12.      *           普通变量
  13.      *------------------------------------------------------*/
  14.     static char checkSum = 0;//异或交验
  15.     static int count = 0;
  16.     static unsigned char buf[20];
  17.     static char chigh,clow;//用于交验,计算半
  18.     static int flag = -1;//用于标记“接收阶段”  
  19.     /*------------------------------------------------------
  20.      * 判断接受信息(只接收GPGGA信息)
  21.      * $GPGGA,135105.000,3605.1204,N,12022.0206,E,1,03,8.5,
  22.      * 53.0,M,-3.2,M,,0000*7B
  23.      *------------------------------------------------------*/
  24.     switch(ch)
  25.     {
  26.     //包首
  27.     case '$':
  28.         checkSum = 0;//开始计算checksum交验值
  29.         flag = 0;
  30.         m_strPortRxData.Empty();
  31.         m_strPortRxData += ch;//接受字符
  32.         break;
  33.     //包尾
  34.     case '*':
  35.         if ( flag ==5 )
  36.         {
  37.             flag = 16;
  38.             m_strPortRxData += ch;//接受字符
  39.             clow = checkSum & 0x0F;//接收交验码低四位
  40.             chigh = ( checkSum >> 4 ) & 0x0F;//接收交验码高四位
  41.             //计算校验码转化后的字符。
  42.             if ( clow < 10 )
  43.                 clow = '0' + clow;
  44.             else
  45.         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值