扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:peter 来源:天极论坛 2007年10月22日
关键字: Visual C++ 串行通信 控件
控件名称 | 控件 ID | 对应变量 |
通信控件 | IDC_MSCOMM | m_Comm |
接收按钮 | IDC_BUTTON_RECEIVEGPSDATA | OnbuttonStartreceivegps() |
GPS信号显示 | IDC_EDIT_COMDATA | m_comdata |
停止接收按钮 | IDC_BUTTON_ENDRECEIVEGPSDATA | OnbuttonEndreceivegps() |
//开始接收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; } } |
婵犵鈧啿鈧綊鎮樻径鎰畺闁靛ň鏅滄慨婊堟偨椤栨稓鎽冮柟鐑╂櫊瀹曟岸宕堕埡鍌滄殸闂佽鍨伴崢鏍姳閿涘嫭鍠嗘い銈呭姬婵☆偅婢樺Λ妤呮偂濞嗘挸瀚夐柍褜鍓熷顒侊紣娓氣偓閻涙捇鏌涘┑鍛樂缂佹鐭傞獮搴ㄥ焵椤掑嫬瀚夋い鏍ㄧ懁缁诲棝鏌熼褍鐏茬紒杈ㄧ箞閺屽洭鏁愰崟顓犳澖闁荤姳闄嶉崹钘壩i崟顖涘殜闁硅泛顫曢埀顒€锕︾槐鏃堝箣閻愬弬妤呮煛閸偄鐏﹂柛瀣墬缁傛帞鎹勯搹瑙勵啈闂佸搫瀚烽崹閬嶅磻瀹ュ鍎嶉柛鏇ㄥ墯娴犳ê霉閿濆棗鈻曢柍褜鍓氶弻銊ф閻愬鈻曢悗锝傛櫇椤忛亶鏌曢崱顓熷