(通信企业管理)VC++编写GPS的串口通信

上传人:管****问 文档编号:128091944 上传时间:2020-04-08 格式:DOC 页数:7 大小:47.57KB
返回 下载 相关 举报
(通信企业管理)VC++编写GPS的串口通信_第1页
第1页 / 共7页
(通信企业管理)VC++编写GPS的串口通信_第2页
第2页 / 共7页
(通信企业管理)VC++编写GPS的串口通信_第3页
第3页 / 共7页
(通信企业管理)VC++编写GPS的串口通信_第4页
第4页 / 共7页
(通信企业管理)VC++编写GPS的串口通信_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《(通信企业管理)VC++编写GPS的串口通信》由会员分享,可在线阅读,更多相关《(通信企业管理)VC++编写GPS的串口通信(7页珍藏版)》请在金锄头文库上搜索。

1、VC+编写GPS的串口通信作者: ths.本文可以转载,请以超链接标明原始出处和作者信息及版权声明 网址: http:/ :源代码: GPS通信真的好多事情,这个代码也是半年前写的了,拿出来贴贴。阅读此文之前,如果你还不知道如何编写VC+的串口通信,那么你可以先看我的这篇文章:VC+编写串口通信.GPS(Golbal Position System)全球定位系统是一个在做一些项目中很常用到的仪器,它通过卫星的通信可以返回给你你当前所处的时间,时区,经纬度等等。VC+编写GPS通信是属于典型的基本的串口通信例子,而且只用接收信息即可,不用对GPS发送信息。编写通信的方法的前半部分都跟我上篇文章说

2、的串口通信一样,即注册ActiveX,建立实例及事件的映射等等。完成上面的操作后,你就可以接收的GPS发来的信息了。CGPSDlg:CGPSDlg(CWnd* pParent /*=NULL*/) : CDialog(CGPSDlg:IDD, pParent) m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME); m_port = 1; /端口号设置为1 m_strset = _T(38400, n, 8, 1);/串口参数,波特率:38400, 8为数据位,1为停止位 m_inputBuffer = _T(); /清空输入缓冲区 m_str = _T(

3、);void CGPSDlg:OnBnClickedButton1()/- m_str = _T(); /如果端口原来打开,则需要先关闭 if(m_comm.get_PortOpen() m_comm.put_PortOpen(FALSE); /设置连接参数 m_comm.put_CommPort(m_port); /指定串口号 m_comm.put_Settings(m_strset); /通信参数设置 m_comm.put_InBufferSize(1024); /指定接收缓冲区大小 m_comm.put_InBufferCount(0); /清空输入缓冲区 m_comm.put_Inpu

4、tMode(0); /文本模式获取数据 m_comm.put_InputLen(0); /读取缓冲区的全部数据 m_comm.put_RThreshold(1); /设置在产生OnComm事件前要接收的字符数阈值 /打开端口连接 if(!m_comm.get_PortOpen() m_comm.put_PortOpen(TRUE);/-但因为GPS发送来的信息是源源不断的帧数据,如果你直接阅读这些帧数据,你会发现根本无法阅读。所以接下来的关键一步就是对GPS的帧数据的格式分析,筛选出有用的数据。要筛选数据,首先你必须明白GPS的帧格式,这里我就不说了,你去看我百度 Hi里以前收集的这篇文章VC

5、+实现GPS全球定位系统定位数据的提取其实数据的提取就是对接收过来的字符串进行分析,个人认为比较可简洁高效的方法是正则表达式法。但我当时使用的是最土的逐字分析法,先查找$帧开头,得到一个帧数据后再对这个帧数据分析,反正就是写得很”猥琐”,不过这么写起来也不难就是了。因为方法太土,也就没有什么好讲的了,自己看代码。void CGPSDlg:OnCommMscomm1() CString str = _T(); VARIANT var_in; CString strtemp; if(m_comm.get_CommEvent() = 2) /事件值为2表示接收缓冲区内有字符 var_in = m_c

6、omm.get_Input(); /读缓冲区 m_str += var_in.bstrVal; /转换成CString类型 if(m_str.GetLength() 100) /如果端口原来打开,则需要先关闭 if(m_comm.get_PortOpen() m_comm.put_PortOpen(FALSE); /数据存放变量 CString GpsTime, GpsPosWei, GpsDirWei, GpsPosJing, GpsDirJing, GpsDate; /从m_str中读取时间和经纬度 int start = 0, end = 0; if(start = m_str.Find

7、(_T($GPRMC) = 0) end = m_str.Find($, start + 1); if(end start) int index = 0; /截取得数据帧 strtemp = m_str.Mid(start, end - start); (CListBox *)GetDlgItem(IDC_LIST1)-InsertString(0,strtemp); UpdateWindow(); m_str = _T(); /GetDlgItem(IDC_STATIC1)-SetWindowTextW(strtemp); start= end = 0; while(index =12) +

8、 index; end = strtemp.Find(, start); /end指向第index个逗号 switch(index) case 2:/读得格林威治时间 GpsTime = strtemp.Mid(start, end - start); break; case 4:/读得纬度 GpsPosWei = strtemp.Mid(start, end - start); break; case 5:/读得纬度方向 GpsDirWei = strtemp.Mid(start, end - start); break; case 6:/读得经度 GpsPosJing = strtemp.

9、Mid(start, end - start); case 7:/读得经度方向 GpsDirJing = strtemp.Mid(start, end - start); break; case 10:/读得当前日期 GpsDate = strtemp.Mid(start, end - start); break; start = end + 1; /格林威治时间转化为北京时间,时钟加8小时 int hour = (GpsTime0 - 0) * 10 + (GpsTime1 - 0) + 8; hour %= 24; /获取GpsTime得Buffer,并对其进行写操作 LPTSTR ptr = GpsTime.GetBuffer(30); if(hour 10) ptr0 = 0; else ptr0 = hour / 10 + 0; ptr1 = hour % 10 + 0; GpsTime.ReleaseBuffer(); /合并日期和时间 CString tmp =_T(北京时间: ); tmp += GpsDate4; tmp += GpsDate5; tmp += -; tmp += GpsDate2; tmp += GpsDate3; tmp += -; tmp += GpsDate0; tmp += GpsDate1;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号