0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

qianyanjishuhui 来源:爱上PLC 2023-08-18 11:09 次阅读

VS2013,串口程序编写和调试;参照网文,整理。

开发环境:VS2013

串口控件

电脑:win7,32版本

准备:

· 1、下载串口控件:

压缩包包含四个文件:MSCOMM.SRG、MSCOMM32.DEP、MSCOMM32.oca、mscomm32.ocx;

解压后拷贝到:

C:WindowsSystem32(WIN7、Win8、Win10系统);

C:WINDOWSsystem32(XP系统)。

注意:64位win7、8、10系统还需要将mscomm32.ocx文件复制到C:WindowsSysWOW64目录下,否则后面注册会出错。

2、在C:WindowsSystem32里找到cmd.exe以管理员身份运行:

Regsvr32 C:WINDOWSsystem32MSCOMM32.OCX

注册成功如图所示:

3、修改注册表:win+R组合键打开“运行”或者直接在开始菜单里找到“运行”;输入regedit后回车,打开注册表管理器,在其中找到HKEY_CLASSES_ROOT项下的Licenses项,添加主项命名为“4250E830-6AC2-11cf-8ADB-00AA00C00905”,并将键值修改为“kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun”

4、新建MFC工程:在VS 2013中新建一个MFC项目,比如基于对话框的一个项目

5、添加MSComm控件:在对话框上右击选择“打开ActiveX控件”,英文版“InsertActiveX Control”找到Microsoft Communications Control,version 6.0,此时在对话框中出现一个电话一下的按钮,这个就是MSComm控件,软件运行时是看不见的

6、按你需要的,添加对话框控件:

7、在电话控件上添加映射变量;完成后, 在工程中会自动生成mscomm.h 和mscomm.cpp两个文件;

8、在串口控件上右键,添加控件事件处理函数:

91af2986-3d73-11ee-ac96-dac502259ad0.jpg

91d4765a-3d73-11ee-ac96-dac502259ad0.png

91fbfe00-3d73-11ee-ac96-dac502259ad0.jpg

11、打开串口按钮回调函数编写:

CString portnums = _T("0");//定义串口编号,默认值串口编号为0

void Cport_demonstrationDlg::OnBnClickedBottonOpen()

{

// TODO: 在此添加控件通知处理程序代码

Edit.GetWindowText(portnums);//获取编辑框中的串口编号

int flag = _ttoi(portnums);//将其转化为数值类型

if (flag)//如果输入的串口编号为正整数,才执行下列命令

{

if (m_mscomm.get_PortOpen())

{

m_mscomm.put_PortOpen(FALSE);

}

m_mscomm.put_CommPort(flag); //选择COM

m_mscomm.put_InBufferSize(1024); //接收缓冲区

m_mscomm.put_OutBufferSize(1024);//发送缓冲区

m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取

m_mscomm.put_InputMode(1);//以二进制方式读写数据

m_mscomm.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm

m_mscomm.put_Settings(_T("9600,n,8,1"));//波特率9600无检验位,8个数据位,1个停止位

if (!m_mscomm.get_PortOpen())//如果串口没有打开则打开

{

m_mscomm.put_PortOpen(TRUE);//打开串口

AfxMessageBox(_T("串口打开成功"));

}

else

{

m_mscomm.put_OutBufferCount(0);

AfxMessageBox(_T("串口打开失败"));

}

}

else

{

AfxMessageBox(_T("请先输入需要打开串口编号"));

}

}

12、关闭按钮回调函数编写:

void Cport_demonstrationDlg::OnBnClickedBottonClose()

{

// TODO: 在此添加控件通知处理程序代码

m_mscomm.put_PortOpen(FALSE);//关闭串口

AfxMessageBox(_T("串口已关闭"));

}

13、发送数据按钮回调函数实现:

void Cport_demonstrationDlg::OnBnClickedBottonSend()

{

// TODO: 在此添加控件通知处理程序代码

UpdateData(true); //读取编辑框内容

m_mscomm.put_Output(COleVariant(m_EditSend));//发送数据

m_EditSend.Empty(); //发送后清空输入框

UpdateData(false); //更新编辑框内容

}

14、接收数据按钮回调函数编写(写在串口事件处理程序里面):

void Cport_demonstrationDlg::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;

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

{

safearray_inp.GetElement(&k, rxdata + k);

}

for (k = 0; k

{

strtemp.Format(_T("%c"), *(rxdata + k));

m_EditReceive += strtemp;

CString temp = _T(" "); //换行

m_EditReceive += temp;

}

}

UpdateData(FALSE); //更新编辑框内容

}

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 文件
    +关注

    关注

    1

    文章

    540

    浏览量

    24402
  • 串口
    +关注

    关注

    14

    文章

    1483

    浏览量

    74523
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79550
  • 串口通讯
    +关注

    关注

    1

    文章

    249

    浏览量

    24545

原文标题:在VS2013下编写基于MSCOMM的MFC串口通讯程序

文章出处:【微信号:爱上PLC,微信公众号:爱上PLC】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    vs2013上移植ucosii

    学习嵌入式操作系统,ucosii是很好的入门途径,但是手头又没有硬件怎么办,我找到了一个vs2013上移植ucosii的例程,具体工程看附件。我只是搬运一,如果有谁运行出现问题,可以回复我。
    发表于 11-05 21:47

    一个VS+OpenCV编写的摄像机采集图像的小程序

    这个程序VS2013编写的,用OpenCv3.00的平台,摄像机是大恒的HV1351UM,只实现了图像的采集,并没有图像处理的功能在里
    发表于 03-21 21:07

    64位MATLAB2015a与64位VS2013混合编程

    以及是否需要专业版或者完整版有什么要求吗?请问有VS2013的官方版下载地址吗?我是新手,望各位大神指导一,谢谢啦
    发表于 08-18 15:20

    VS2010之MFC串口通信的编写教程

    本帖最后由 lee_st 于 2017-10-31 09:24 编辑 VS2010之MFC串口通信的编写教程
    发表于 10-30 17:02

    关于RadioTestLibrary-1.5.0这个库中得VS2013的源码中问题

    官方例程是QT5+VS2013的控制台的版本,可用。但是我们有特殊需求,需要界面,由于个人对QT不熟,所以打算用MFC来做。MFC用 /
    发表于 08-09 06:37

    ucguivs2013上的仿真

    原子老师,各位大侠,大家有没有用过vs2013仿真过ucgui
    发表于 04-25 05:53

    基于MSComm32的LabVIEW串口通讯

    基于MSComm32的LabVIEW串口通讯高效易行,串口通讯程序中包含子vi:打开
    发表于 09-05 19:52

    为什么VS2013仿真的代码板子上运行是两个结果?

    为什么 VS2013仿真的代码板子上运行是两个结果
    发表于 09-25 04:35

    请问有VS2013软件的下载地址吗?

    谁有VS2013软件的下载地址
    发表于 04-01 04:38

    请问GUIBuilder生成的文件VS2013上无法仿真怎么解决?

    ,无法打开,而在GUIBuilder生成的.c文件中可以打开,请问这是为什么?还是VS2013不能这么用?之后将主函数直接放到GUIBuilder生成的.c文件中,编译通过,但在打开虚拟机是黑屏显示,没有反应,请问这是为什么?我开发板上测试以上两种情况没有问题
    发表于 04-28 01:59

    VS2010之MFC串口通信的编写教程

    VS2010之MFC串口通信的编写教程
    发表于 03-02 11:22

    VS2017基于MFC串口通信上位机总结分享

    VS2017基于MFC 串口通信上位机,实现串口发送、接收数据。1.打开VS2017 创建 MFC
    发表于 07-02 07:19

    VC基于MSCOMM控件串口通讯

    mfc 中进行串口通讯最简单的方法莫过于在对话框中使用MSCOMM 控件了,MSComm 通信控件提供了一系列标准通信命令的接口,它允许建
    发表于 03-08 14:52 84次下载

    如何使用VS2013做C语言编译器的创建方法详细资料说明

    本文档的主要内容详细介绍的是如何使用VS2013做C语言编译器的创建方法详细资料说明。前言,C语言是一个 历史悠久的计算器编程语言,几十年的发展,现在任然经久不衰。有很多C语言编译器。这里介绍用强大的VS2013 做C编译器学习C语言 方便快捷。
    发表于 11-06 16:18 8次下载
    如何使用<b class='flag-5'>VS2013</b>做C语言编译器的创建方法详细资料说明

    VS2013 MFC基于对话框编程系列的19个程序资料免费下载

    VS2013 作为最新版的 Visual studio,界面和功能上相比之前的版本有了较大的改善和提高, MFC 作为集成 API 的简单版更适合编程开发,许多应用软件都是基于对话框的,这里就介绍一下如何在 VS2013 中创建
    发表于 03-05 08:00 12次下载
    <b class='flag-5'>VS2013</b> <b class='flag-5'>MFC</b>基于对话框编程系列的19个<b class='flag-5'>程序</b>资料免费下载