在VC++6.0中利用串行通信控件
2009-10-24 20:31:25 来源:WEB开发网部分程序如下:
//开始接收GPS信号
void CGpsDlg::OnButtonStartreceivegps()
{
//判断串口的状态,如果是关闭状态,则打开
if(!m_Comm.GetPortOpen() )
//打开串口
m_Comm.SetPortOpen(TRUE);
UpdateData(TRUE);
}
//停止接收GPS的信号
void CGpsDlg::OnButtonEndreceivegps();
{
//判断串口的状态,如果是打开状态,则关闭
if( m_Comm.GetPortOpen() )
m_Comm.SetPortOpen(FALSE);
UpdateData(FALSE);
}
//相应的OnComm事件处理
void CGpsDlg::OnComm()
{
m_comdata.Empty();
VARIANT m_input1;
COleSafeArray m_input2;
LONG length,i;
BYTE data[1024];
CString str;
//接收缓冲区内字符
if(m_Comm.GetCommEvent()== 2)
{
m_comdata.Empty();
//读取缓冲区内的数据
m_input1=m_Comm.GetInput();
//将VARIANT型变量转换为ColeSafeArray型变量
m_input2=m_input1;
//确定数据长度
length=m_input2.GetOneDimSize();
//将数据转换为BYTE型数组
for(i=0;i< length;i++)
m_input2.GetElement(&i,data+i);
//将数组转换为CString型变量
for(i=0;i< length;i++) {
char a=* (char *)(data+i);
str.Format(“%c",a);
m_comdata += str;
}
/*在上面的程序中,先将VARIANT型变量
转换为ColeSafeArray型变量,再将其转换为
BYTE型数组,然后将数组转换为CString型变量,
以满足不同的变量类型显示数据的需要。*/
//提取GPS信号
CString m_zjz;
m_zjz=m_comdata;
//寻找GPS信号的头标志
int s;
s=m_zjz.Find(“$GPRMC,");
CString m_gps;
//NUM为所提取GPS信号的长度
m_gps=m_zjz.Mid(s,NUM);
int x;
x=m_gps.GetLength();
//信号长度不符合要求,则拒绝接收
if (x != NUM) {
m_gps.Empty();
}
//寻找所需要的GPS信号的头标志
int y;
y=m_gps.Find(“$GPRMC,");
if (y != 0)
{
m_gps.Empty();
}
//m-gpsdata是已声明的类成员变量
m_gpsdata=m_gps;
}
}
这样就将GPS信号的数据流提取出来了。再通过简单的字符串操作就可以分别找出GPS信号中的经度、纬度以及相对应的格林威治时间等定位信息。
以上程序在Win98/95/NT、P133 PC机、ROCKWELL JUPITER GPS接收板环境下调试通过。
更多精彩
赞助商链接