MFC中利用MSComm控制元件實現串列埠通訊的例子
阿新 • • 發佈:2019-02-11
第一步:建工程
第二步:設定基本對話方塊
第三步:設定串列埠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連在一起,就可以實現自發自收。
開啟串列埠->傳送資料,就可以看到效果啦!!!