MFC中利用MSComm控件实现串口通信的例子

之前学过一些MFC,现由于项目需要,上网查阅各种串口通信资料,并成功实现串口通信。
开发环境:VC6.0
参考资料:http://blog.sina.com.cn/s/blog_6e84dc280101433n.html


第一步:建工程



第二步:设置基本对话框

第三步:设置串口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连在一起,就可以实现自发自收。
打开串口->发送数据,就可以看到效果啦!!!

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/program_Li/article/details/53556880
个人分类: MFC教程 串口通信
上一篇第一次使用博客
下一篇虚拟机使用技巧:不插网线实现主机与虚拟机互通
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭