2# liao_fangxing
这是采数据
void CSerialPortTestDlg::OnButtonSend()
{
// TODO: Add your control notification handler code here
if(!m_bSerialPortOpened) //检查串口是否打开
{
AfxMessageBox("串口没有打开");
return;
}
UpdateData(TRUE); //读入编辑框中的数据
CString strSend=""; //要发送的NEMA字符串
//以下读入9个开关的设置状态
for(int i=1;i<=9;i++)
{
if(GetSwitchStatus(i))
strSend+='1';
else
strSend+='0';
}
CString strTemp;
strTemp.Format("%02d",m_unEditPosition);
strSend+=strTemp;
strTemp.Format("%03d",m_unEditVelocity);
strSend+=strTemp;
SendNMEAData(strSend);
}
下面是我要问的
void CSerialPortTestDlg::SendNMEAData(CString &strData)
{
char checksum=0,cr=13,ln=10;
char c1,c2; //2个 半Bype 校验值
for(int i=0;i<strData.GetLength();i++)
checksum = checksum^strData;
c2=checksum & 0x0F; c1=((checksum >> 4) & 0x0F);
if (c1 < 10) c1+= '0'; else c1 += 'A' - 10;
if (c2 < 10) c2+= '0'; else c2 += 'A' - 10;
CString strNMEAData;
//加上包头,尾和校验值和回车换行符
strNMEAData='$'+strData+"*"+c1+c2+cr+ln;
//以下几行程序关不通用,在自己的程序中注意修改
m_SerialPort.WriteToPort((LPCTSTR)strNMEAData);
m_strEditSendMsg.Format("发送的数据包为:%s",strNMEAData);
UpdateData(FALSE); //在发送显示编辑框中显示发送的数据包
}
|