您的位置:首页 > 其它

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

2017-04-10 12:48 459 查看
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.实验成果





随手建立的一个对话框,故有码,但是功能可以实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息