MFC之CSerialPort类双串口发送接收

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


你可能感兴趣的:(mfc,edit,发送接收,CSerialPort,双串口)