📄 c++读取gps程序.cpp
字号:
#include<iostream.h>
#include<math.h>
#include<fstream.h>
#define_SCOMMUV2
#define_SCOMMUV2
#include"windows.h"
class SCommuV2
{
public:
SCommuV2( int bCOMNo=2,
int iBaudRate=9600,
int iByteSize=8,
float fStopBits=1;
BWORD Parity=0
);//构造函数
-SCommuV2();//析构函数
public:
HANDLE volatile hCom;//指定串行口设备的句柄
COMMDATA CommData; //GPS信息的数据结构
private:
BYTE COMNo;
int BaudRate;
int ByteSize;
float StopBits;
BOOL bParity;
OVERLAPPED OvlapForRead;//用于监视COM口数据读取事件
OVERLAPPED OvlapForWrite;//用于监视COM口数据写事件
private:
int InitCom(BYTE num, int BaudRate);//初始化串口
bool Convert(void*pGontainer);//将ASCII码信息转化为十进制的数字信息
public:
int WriteBytes(void * pSrcBuf,int size, int timeOut=0);
int ReadBytes(void * pContainer, int size, int time0ut) ;
void ReceiveCommData();//接收GPS定位信息并传递给结构CommData
void FlushSending();//清除文件缓冲区
void ResetRecv();
};
#endif
#include"ScommuV2.h"
Unsigned char position[16];
unsigned char velocity[2];
unsigned char ch;
BOOL IfComOn;
ScommuV2 * pScom;//通信类指针
LRESULT CALLBACK WndPrnc(HWND hwnd, UNIT msg, WPARAM wparam, Lparam)
{
//消息循环
switch ( msg ){
CASE command:{
switch ( wparam ){
case IDM ComStart://若选中通信开始
pScom=new SconnnuV2(I, 9600);//按GPS通讯协议初始化串行口(下转第29页)
if (! pScom)
MessageBox (NULL,"打开串口失败","错误",MB_OK);
……//初始化GPS
if(!SetCommMask(hCom, EV RXFLAG)//设定通讯事件
MessageBox ( NULL,"设置事件掩码失败","错误",MB_OK);
OvLap.hEven = CreateEvent(NULL,FALSE,FALSE,NULL);
DWORD 1pPointer= (DWORD) this;//创建后台通讯线程
PthreadMonitor=AfxBeginThread ( monitor, ( LPVOID )lpPointer) ;
IfComOn=TRUE;//设通讯标志为有效
Break;
case IDM_ComOver;//若选中通讯结束
If ComOn=FALSE ;//通讯标志设为无效
Break;
}
//创建后台通讯线程,处理通讯事件
UNIT moniter(LPVOID 1pPointer)
{
DWORD byteRead, dwEventMask;
while ( IfComOn )//检测通讯标志有效否
{
WaitCommEvent ( hComm,&dwEventMask, NULL);//等待设定事件发生
pScom -> ReadBytes(&byteRead, 5,10);//从串口读取一个字符
if(byteRead=="$") //接收的字符是否为"$"
{
pScom ->ReadBytes(&byteRead, 5, 10);
if (byteRead =="GPGGA")//接收的字符是否为“GPGGA"
{
……//相应的卫星数据处理代码
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -