您的位置:首页 > 其它

MFC之CSerialPort类双串口发送接收

2016-03-26 20:38 316 查看
MFC之CSerialPort类双串口发送接收
1、 基本框架
添加CSerialPort(.c、.h)文件添加到相应位置。
创建对象和函数
CSerialPort m_SerialPort1, m_SerialPort2;
afx_msg
LONG CDoublePortDlg::OnComm(WPARAM ch,LPARAM port);//此函数接收到一个字符执行一次
指定位置添加消息处理函数
BEGIN_MESSAGE_MAP(CDoublePortApp,CWinApp)
    ON_MESSAGE(WM_COMM_RXCHAR, OnComm)
END_MESSAGE_MAP()
LONG
CDoublePortDlg::OnComm(WPARAM
ch, LPARAM
port)
{
    return 0;
}
打开串口函数
void
CDoublePortDlg::OnBnClickedBtnopen1()
{
    // TODO: 在此添加控件通知处理程序代码
    UpdateData(TRUE);
    CString str;
    str.Format(_T("com %d打开, %d
波特率 8位无校验"), m_port1, m_baud1);
    m_SerialPort1.Open(this, m_port1, m_baud1);
    if (m_SerialPort1.IsOpen())
    {
        m_SerialPort1.StartMonitoring();
        MessageBox(str);
    }
    else
    {
        MessageBox(_T("没有发现此串口或被占用"));
    }
}
关闭串口函数
void
CDoublePortDlg::OnBnClickedBtnclose1()
{
    // TODO: 在此添加控件通知处理程序代码
    if (m_SerialPort1.IsOpen())
    {
        m_SerialPort1.Close();
    }
}
2、主要程序
LONG CDoublePortDlg::OnComm(WPARAM ch, LPARAM port)

{
CString str;
str.Format("%d", (int)ch);
if (port == m_port1)
{
m_receive1 += str;
}
else if (port == m_port2)
{
m_receive2 += str;
}

UpdateData(FALSE);
return 0;

}

void CDoublePortDlg::OnBnClickedBtnopen1()

{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
CString str;
str.Format(_T("com %d 打开, %d 波特率 8位 无校验"), m_port1, m_baud1);
m_SerialPort1.Open(this, m_port1, m_baud1);
if (m_SerialPort1.IsOpen())
{
m_SerialPort1.StartMonitoring();
MessageBox(str); 
}
else
{
MessageBox(_T("没有发现此串口或被占用"));
}

}

void CDoublePortDlg::OnBnClickedBtnclose1()

{
// TODO: 在此添加控件通知处理程序代码
if (m_SerialPort1.IsOpen())
{
m_SerialPort1.Close();
}

}

void CDoublePortDlg::OnBnClickedBtntx1()

{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
BYTE *data = new BYTE[1];
data[0] = m_send1;
//data[1] = m_send1>>8;
if (m_SerialPort1.IsOpen())
{
m_SerialPort1.Write(data, 1);
}
delete []data;

}

void CDoublePortDlg::OnBnClickedBtntxa1()

{
// TODO: 在此添加控件通知处理程序代码
if (m_TxAport1_flag)
{
m_TxAport1_flag = 0;
}
else
{
m_TxAport1_flag = 1;
}

}

void CDoublePortDlg::OnTimer(UINT_PTR nIDEvent)

{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (m_TxAport1_flag)
{
OnBnClickedBtntx1();
}
if (m_TxA2port_flag)
{
OnBnClickedBtntx2();
}
CDialogEx::OnTimer(nIDEvent);

}

void CDoublePortDlg::OnBnClickedBtntx2()

{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
BYTE *data = new BYTE[1];
data[0] = m_send2;
//data[1] = m_send2>>8;
if (m_SerialPort2.IsOpen())
{
m_SerialPort2.Write(data, 1);
}
delete[]data;

}

void CDoublePortDlg::OnBnClickedBtntxa2()

{
// TODO: 在此添加控件通知处理程序代码
if (m_TxA2port_flag)
{
m_TxA2port_flag = 0;
}
else
{
m_TxA2port_flag = 1;
}

}

void CDoublePortDlg::OnBnClickedBtnopen2()

{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
CString str;
str.Format(_T("com %d 打开, %d 波特率 8位 无校验"), m_port2, m_baud2);
m_SerialPort2.Open(this, m_port2, m_baud2);
if (m_SerialPort2.IsOpen())
{
m_SerialPort2.StartMonitoring();
MessageBox(str);
}
else
{
MessageBox(_T("没有发现此串口或被占用"));
}

}

void CDoublePortDlg::OnBnClickedBtnclose2()

{
// TODO: 在此添加控件通知处理程序代码
if (m_SerialPort2.IsOpen())
{
m_SerialPort2.Close();
}

}

程序下载:http://download.csdn.net/detail/cracent/9473375
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息