1. 程式人生 > >MFC中利用MSComm控制元件實現串列埠通訊的例子

MFC中利用MSComm控制元件實現串列埠通訊的例子

第一步:建工程



第二步:設定基本對話方塊

第三步:設定串列埠ID號




第四步:設定串列埠引數選項




第五步:設定其他控制元件ID號




第六步:新增串列埠控制元件
project->Add to project->Components and Controls

此時介面上會出現一個電話的控制元件,右鍵該控制元件-〉選擇類嚮導……,出現如下對話方塊:

新增變數時,可能會出現警告,如下:



新增相關變數之後如圖:

第七步:新增相關的訊息響應函式:

第八步:在OnInitDialog函式新增相關程式碼。

    m_b_port_open = false;
    CComboBox *pCombo = NULL;
    pCombo = (CComboBox *) GetDlgItem(IDC_PORT_COMBO);//set port
    if (pCombo != NULL)
    {
        pCombo->SetCurSel(0);
    } 
    pCombo = (CComboBox *) GetDlgItem(IDC_BOUND_COMBO); //set bound
    if (pCombo != NULL)
    {
        pCombo->SetCurSel
(0); } pCombo = (CComboBox *) GetDlgItem(IDC_CHECK_COMBO); //set check if (pCombo != NULL) { pCombo->SetCurSel(0); } pCombo = (CComboBox *) GetDlgItem(IDC_STOPBIT_COMBO); //set stopbit if (pCombo != NULL) { pCombo->SetCurSel(0); } if(m_msCom.GetPortOpen
()) { m_msCom.SetPortOpen(FALSE); } m_msCom.SetCommPort(1); //設定串列埠 m_msCom.SetInBufferSize(1024); //設定輸入緩衝區大小 m_msCom.SetOutBufferSize(1024); //設定輸出緩衝區大小 m_msCom.SetRThreshold(1); //設定收到多少個字元後觸發OnComm事件 m_msCom.SetInputMode(1); //設定輸入方式為二進位制方式 m_msCom.SetSettings("9600,n,8,1"); //設定波特率等引數 m_msCom.SetInputLen(0); //設定當前接收長度為0

第九步:在OnOpenPort訊息響應函式中新增程式碼

void CPortDlg::OnOpenPort() 
{
    // TODO: Add your control notification handler code here
    if(!m_b_port_open)
    {
        switch(m_port_combo.GetCurSel())
        {
        case 0://COM1
            m_msCom.SetCommPort(0); 
            break;
        case 1://COM2
            m_msCom.SetCommPort(1); 
            break;
        case 2://COM3
            m_msCom.SetCommPort(2); 
            break;
        case 3://COM4
            m_msCom.SetCommPort(3); 
            break;
        case 4://COM5
            m_msCom.SetCommPort(4); 
            break;
        case 5://COM6
            m_msCom.SetCommPort(5); 
            break;
        case 6://COM7
            m_msCom.SetCommPort(6); 
            break;
        case 7://COM8
            m_msCom.SetCommPort(7); 
            break;
        }

        if(m_msCom.GetPortOpen())
        {
            m_msCom.SetPortOpen(FALSE);
        }
         m_msCom.SetInBufferSize(1024); //設定輸入緩衝區大小
         m_msCom.SetOutBufferSize(1024); //設定輸出緩衝區大小
         m_msCom.SetRThreshold(1); //設定收到多少個字元後觸發OnComm事件
         m_msCom.SetInputMode(1); //設定輸入方式為二進位制方式

         m_msCom.SetSettings("9600,n,8,1"); //設定波特率等引數
         m_msCom.SetInputLen(0); //設定當前接收長度為0

        if(!m_msCom.GetPortOpen())
        {
            m_msCom.SetPortOpen(TRUE);
        }

        m_b_port_open = TRUE;
        SetDlgItemText(IDC_OPEN_PORT, "關閉串列埠");
    }
    else
    {
        m_msCom.SetPortOpen(FALSE);
        m_b_port_open = FALSE;
        SetDlgItemText(IDC_OPEN_PORT, "開啟串列埠");
    }
}

第十步:在OnSendOrder訊息響應函式新增程式碼

void CPortDlg::OnSendOrder() 
{
    // TODO: Add your control notification handler code here
    m_msCom.SetOutput(COleVariant("DEBUG"));
}

第十一步:利用串列埠工具進行除錯,只需把串列埠的TX和RX連在一起,就可以實現自發自收。
開啟串列埠->傳送資料,就可以看到效果啦!!!