MFC单文档之基于MSCOMM的多个编辑框的串口通讯

来源:互联网 发布:java上传图片回显 编辑:程序博客网 时间:2024/05/29 19:38

VS2013取消了MSCOMM串口控件,如果还想用该控件写串口程序,就得自己添加写基于MFC的程序

1.在VS2013下编写基于MSCOMM的MFC串口通讯程序

直接参考百度经验,里面有非常明确的讲解如何下载控件及使用控件进行通信。
百度经验
补充:串口号可以更改是一个优势,另外有的电脑你把那四个文件复制后,是可以自动完成注册的,所以最好先试一试看能不能使用,不能使用的话再新建注册表项。

2.新建多个串口控件

在每个对话框中都插入一个ActiveX控件,然后添加变量等,这样每个对话框中都可以进行串口通信了

3.虚拟串口的设置

有时候没有单片机等硬件时,测试就要用到虚拟串口啦!

虚拟串口软件

虚拟串口的使用参考这个文章:
下载地址
虚拟串口软件使用

里面的成对使用是有道理的,具体的道理往下看
设置好虚拟串口后,打开串口调试助手,打开两次,分别设置为之前设置的COM口,如COM3COM4,这样在两个界面中就可以互相发送消息并实时地显示。

4.进阶

把其中一个串口调试助手的界面关掉,如关掉COM3,然后打开VS里面建立的工程,运行后设置串口号为,此时串口打开成功,发送框和接收框可以与串口调试助手中的界面进行通信。

5.新建多个发送编辑框和接收编辑框

教程上一般只是建立一个发送编辑框和接收编辑框,而实际中往往会有多个,所以新建多个发送编辑框和接收编辑框然后进行添加变量等操作

6.修改函数代码

6.1发送多个编辑框代码

void CMFCApplication2Dlg::OnBnClickedBottonSend()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true); //读取编辑框内容
m_mscomm.put_Output(COleVariant(m_EditSend + m_EditSend1));//发送数据
m_EditSend.Empty(); //发送后清空输入框
m_EditSend1.Empty(); //发送后清空输入框
UpdateData(false); //更新编辑框内容
}

6.2多个编辑框接收的代码

void CMFCApplication2Dlg::OnCommMscomm1(){    // TODO:  在此处添加消息处理程序代码    static unsigned int cnt = 0;    VARIANT variant_inp;    COleSafeArray safearray_inp;    long len, k;    unsigned int data[1024] = { 0 };    byte rxdata[1024]; //设置 BYTE 数组    CString strtemp;    static unsigned int Receive_flag = 0;    if (m_mscomm.get_CommEvent() == 2) //值为 2 表示接收缓冲区内有字符    {        cnt++;        variant_inp = m_mscomm.get_Input(); //读缓冲区消息        safearray_inp = variant_inp; ///变量转换        len = safearray_inp.GetOneDimSize(); //得到有效的数据长度        for (k = 0; k<len; k++)        {            safearray_inp.GetElement(&k, rxdata + k);        }        for (k = 0; k<len; k++) //将数组转换为 CString 型变量        {            strtemp.Format(_T("%c"), *(rxdata + k));            switch (Receive_flag)            {            case 0: m_EditReceive += strtemp; break;            case 1: m_EditReceive1 += strtemp; break;            //case 2: m_strR += strtemp; break;            }            Receive_flag++;            if (2 == Receive_flag)            {                Receive_flag = 0;            }        }    }    UpdateData(FALSE); //更新编辑框内容}

7.实验成果

发送
接收

随手建立的一个对话框,故有码,但是功能可以实现。

0 0
原创粉丝点击