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