基于MFC-MSComm控件的PC与单片机串口通信编程

2023-10-27

作者:uedsr542   来源:51hei 

 

使用工具Visual C++ 6.0,9针RS232串口线一条,P0口带上拉的LED的51最小系统版。

打开软件,新建——>MFC AppWizard[exe]再填写工程名和路径——>基于对话框(不需要太好看,对话框足矣)——>确定。

点击浏览下一页

最右边是可以添加的控件,但是我们可以看到没有MSCOMM控件,因为对于搞高级软件的程序员来说一般用不到的,所以串口不是默认控件,需要添加。

工程——>增加到工程——>Components and Controls会弹出一个叫做Components and Controls Gallery的对话框,打开Registered ActiveX Controls文件夹会看到很多可以添加的控件,找到Microsoft Communications Comtrol,version 6.0选项,单击Insert——>确定。跳出Confirm Classes对话框,这个不需要修改,直接点OK就好了,然后就可以看到控件已经加到空间框里了。

点击浏览下一页

这个电话状的就是MSComm控件,你可以右击这个图标点属性修改ID,当然也可以用默认的。再把编辑框和按钮等等拖到界面上,生成的就是最后界面的样子,所以可以随意搞(下图是我做的界面)

点击浏览下一页

再在对话框的头文件集中的×××Dlg.h(×××是你的文件名)的最开头添加mscomm头文件#include "mscomm.h"(如下图)

点击浏览下一页

然后找到对话框 类的定义代码中加入CMSComm类变量声明

class CxxxDlg.h : public CDialog

{

...

protected:

    CMSComm myComm;//(你也可以用其他的)

}

如下图

点击浏览下一页

接着在xxxDlg.cpp中所有函数外面添加全局变量(注意是全局),当然也可以不添加。

 

因为我做的比较简单,所以对于串口的选择并没有设置,直接是com1,,9600bps,0(无校验),8(位),1(停止位)当然这个都在程序中写入。并在点开exe文件之后就设置好了。这个只需在初始化函数CxxxDlg :: OnInitDialog()中写入以下程序即可。

DWORD style=WS_VISIBLE|WS_CHILD;
if(!myComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1))
{
   AfxMessageBox("创建MSComm控件失败!");
   return -1;
}
else//创建成功则执行初始化及打开串口操作
{
   myComm.SetCommPort(1);//指定串口号
   myComm.SetSettings("9600,N,8,1");//通信参数设置
   myComm.SetInBufferSize(1024);//指定接收缓冲区大小
   myComm.SetInBufferCount(0);//清空接收缓冲区
   myComm.SetInputMode(1);//设置数据获取方式
   myComm.SetInputLen(0);//设置每次读取长度,0为全部读取
   myComm.SetRThreshold(2);//设置接收OnComm事件字符门限值在收到2字节时候触发事件
   myComm.SetPortOpen(1);//打开串口
}

这样就创建串口了,接下里就处理按键、显示和处理收发数据的事情了。

其做法和做普通的MFC一样就不赘述了,我介绍一下一些用到的MSComm控件的一些函数属性。

 

输入(串口接收)函数VARIANT GetInput();

例子:VARIANT int1;

   int1 = myComm.GetInput();

即可接收来自串口的数据,但是注意变量,想要显示就要转化。

 

输出(串口发送)函数void SetOutput(const VARIANT&newValue);

例子:CSting aa;

   aa="at";

   myComm.SetOutput(COleVariant(aa));

即可将数据写入输出缓冲区,COleVariant(aa)是将CString 转换为VARIANT类型数据。

 

关于串口事件CommEvent的属性就像单片机中的中断一样。只要串口有事件发生,就会去响应,当然必须设置响应的条件和方式。下图是事件发生时返回到CommEvent的值

点击浏览下一页

如果要添加处理方式就在xxxDlg.app中的void CxxxDlg :: OnOnCommMscomm1()

{

...

}

这个函数中添加。

 

最重要的是不要忘记使用完串口之后要关闭它。在界面按Ctrl+W弹出MFC ClassWizard类向导对话框

点击Object IDs列表中的xxxDlg再点Messages列表框中的WM_CLOSE单击Add Function单击Edit Code

就会跳到void CxxxDlg :: OnClose()函数在里面添加

if(myComm.GetPortOpen())
   myComm.SetPortOpen(0);
CDialog::OnClose();

即可。

这样一个串口通信的基本流程就做完了。当然如果你不喜欢MFC这三个正方体组成的图标你可以改,最简单的方法是找一张图转成ico格式的,将工程文件夹里res文件夹下的默认ico换掉,只要名字改成一样即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MFC-MSComm控件的PC与单片机串口通信编程 的相关文章

  • 在vc下环境变量的设置

    Error spawning cl exe 编译出错 有人说是没有设置 include环境变量 下面介绍在vc下如何设置环境变量 1 Microsoft Visual Studio下面3个子文件夹 Common VC98 My Projec
  • 释放内存总结

    1 用new malloc显式分配在堆上的内存才需要用delete free释放 而在栈上分配的如int array 80 在子程序结束时自动释放 分配与释放都和数据类型无关 2 delete一个指针的时候 一定要检查是否为null 否则是
  • 自定义C++异常处理

    例1 自定义一个继承自excepton的异常类myException C 标准中 定义在
  • error C2872: “Font”: 不明确的符号

    在VS2010中调用GDI 时 Font font fontFamily 24 FontStyleRegular UnitPixel 会提示提示 Font 不明确的符号的问题 1 gt 可能是 c program files microso
  • VC++ HBITMAP保存文件

    请先看下面这段代码 BOOL SaveBmp HBITMAP bmp string path FILE f fopen path c str wb if f return 0 BITMAP bmpinfo GetObject bmp siz
  • 在Windows上使用clang编译器

    在Stackoverflow等网站上 经常出现各种编译器的对比的结果 其中clang是很常见的 那么 怎样在Windows上使用clang呢 没那么直观 直接去llvm官网上下载clang的发行包 解压 到bin下面 看到应该是我们想要的工
  • VC++6.0 IDE的工程用Code::Blocks来打开、编译、调试终极配置方案

    引子 竟然可以用Code Blocks来打开 编译 调试VC 6 0的项目 感觉很神奇 通过配置也让我们更进一步了解VC 6 0的编译器 连接器 调试器 好多兄弟问到要是能支持最新的VS2008和VS2010就好了 其实Code Block
  • VC++判断CheckBox控件是否被勾选

    图示为CheckBox控件 控件重映射为m timed send 控件默认状态为未勾选 0 状态 所以勾选时取反即可 代码如下 void CHCCOMDlg OnTimedSend TODO Add your control notific
  • MFC视频教程(孙鑫)学习笔记2-掌握C++

    这一集中 主要总结了C 经典语法与应用 1 C 的三大特性 封装 继承 多态 2 C 中提供了一套输入输出流类的对象 它们是cin cout和cerr 对应c语言中的三个文件指针stdin stdout stderr 分别指向终端输入 终端
  • VC++、MFC中最好的开源项目

    介绍一下用VC MFC写的最好的开源项目 Sourceforge net中有许多高质量的VC 开源项目 我列举了一些可以作为VC 程序员的参考 一 优秀的开源项目 7 Zip http sourceforge net projects se
  • C语言编程获取PE文件导入函数

    include
  • Error:fatal error C1010: unexpected end of file while looking for precompiled head

    场景 在VC6 0进行编写C 代码时 创建了一个 简单的程序 s 然后编译就爆出这个错误 场景复现 创建流程 点击左上角的 文件 然后点击 新建 在左上方选择工程 然后下方选择 Win32 Console Application 在右侧填写
  • VC++ 隐藏控制台程序窗口

    转自 http hi baidu com sicceer blog item d9c35a810d15c4c8bc3e1ec8 html 设置 pragma comment linker subsystem windows entry ma
  • CLabel函数说明

    原作者地址及最新更新 http www codeproject com Articles 215 Extended Use of CStatic Class CLabel 1 6 本控件可以实现类似VB中LABEL控件的功能 可能正是许多人
  • 免费C/C++编译器

    不好意思 等到现在才想到要写这篇文章 怎么说呢 情况是这样的 刚开始我学习C语言时 是想在机器上安装visual c 的 因为Turbo C太古老了 用起来不方便 所以很自然地想安装vc 不过不知道大家有没有发现vc很大 而且有些机子就是安
  • 选择正确的C/C++ Runtime Library

    解决下面的编译 链接问题过程中 有一些新的认识 warning LNK4049 locally defined symbol error LNK2001 unresolved external symbol 本文意在总结 讨论的中心自然也正
  • 一些主流IDE(VC6、VS2010、Code::Blocks、Eclipse)使用过程中常见问题集锦

    关于主流IDE使用的一些常见问题 本文由CSDN 蚍蜉撼青松 主页 http blog csdn net howeverpf 整理原创 转载请注明出处 一 在Win7下使用VC6 0应该注意的几个问题 我们知道 Win7和VC6 0本身是不
  • win7安装了vc++6.0打开已保存文件项目就会崩溃

    我用win7安装了vc 6 0的英文完整版 绿色中文版 发现当运行程序时 要打开已保存文件项目就会崩溃 系统对话筐就说 Microsoft R Developer Studio已停止工作 选择调试或者关闭 office 2010 与vc 6
  • DirectShow中的工具GraphEdit使用小结

    一 安装完Windows SDK 7 0或7 1后 在C Program Files Microsoft SDKs Windows v7 0 Bin下有32位的graphedt exe 及x64目录下有64位版本的graphedt exe
  • VC++ FTP文件下传(断点续传)

    include

随机推荐

  • Hbuilder We're sorry

    当Webview窗口加载错误地址 如本地页面不存在 或者访问网络资源失败 如无法访问网络 时会自动显示默认错误页面 可以通过以下方法自定义Webview的404等错误页面 设置应用全局默认错误页面 5 App和wap2app 在应用的man
  • OSPF从初学到放弃 2.1

    本来要开开心心写博客的 结果刚刚看见之间知乎上的两个评论被要求修改 两篇评论都是关于同一个问题的 我都有理由怀疑是资本的力量太强大了 说好的舆论自由呢 一群骗子 好气好气好气 OSPF协议及作业 前言 一 OSPF是什么 仔细说一下 二 聊
  • 一小时入门Python爬虫,连我都会了!Python爬取租房数据实例

    一 什么叫爬虫 爬虫 又名 网络爬虫 就是能够自动访问互联网并将网站内容下载下来的程序 它也是搜索引擎的基础 像百度和GOOGLE都是凭借强大的网络爬虫 来检索海量的互联网信息的然后存储到云端 为网友提供优质的搜索服务的 二 爬虫有什么用
  • 【算法系列篇】二分查找——这还是你所知道的二分查找算法吗?

    文章目录 前言 什么是二分查找算法 1 二分查找 1 1 题目要求 1 2 做题思路 1 3 Java代码实现 2 在排序数组中查找元素的第一个和最后一个位置 2 1 题目要求 2 2 做题思路 2 3 Java代码实现 3 搜索插入位置
  • USB MSC类存储设备及FatfsR0.14移植

    USB MSC类存储设备及FatfsR0 14移植 效果演示 配置说明 USB MSC类配置 FatFs移植 FatFs的配置 驱动接口 FatFs测试 USB MSC驱动接口完善 效果演示 这里演示了 FatFs挂载SPI Flash设备
  • java中的锁(基础篇)

    乐观锁和悲观锁 悲观锁 适合写操作多的场景 先加锁可以保证写操作时的数据正确 乐观锁 实际开发 Synchronized关键字 悲观锁 加了后同一时间有且只有一个线程可以进入锁内 1 修饰实例方法 作用于当前实例对象加锁 进入同步代码前要获
  • ReinHard颜色迁移

    看到颜色迁移 觉得还蛮有意思的 遂简单看了一下 代码实现好像有错误 但是不知道错误出在哪里 算法参考 https blog csdn net sin geek article details 22443537 https blog csdn
  • SD卡的控制方法与时序

    1 1 SD卡的命令格式 SD卡的指令由6字节 Byte 组成 如下 Byte1 0 1 x x x x x x 命令号 由指令标志定义 如CMD39为100111即16进制0x27 那么完整的CMD39第一字节为01100111 即0x2
  • [Numpy] mgrid与ogrid

    文章目录 numpy mgrid numpy ogrid numpy mgrid numpy lib index tricks nd grid的替代 在给定范围内返回一个ndarray 是网格上的点 import numpy as np 起
  • webpack安装和使用及超详细配置一个基本vue项目的全部流程(包括路由、less、引入图片渲染)

    文章目录 一 搭建一个简单的webpack项目 1 准备工作 2 初始化项目 3 安装并使用webpack 1 使用npm语句安装webpack和webpack cli 2 检测是否安装成功 需要注意点是由于webpack并不是全局安装的
  • 【BMC】简介

    什么是BMC 在介绍BMC之前需要了解一个概念 即平台管理 platform management 平台管理表示的是一系列的监视和控制功能 操作的对象是系统硬件 比如通过监视系统的温度 电压 风扇 电源等等 并做相应的调节工作 以保证系统处
  • Linux配置sar服务

    Linux配置sar服务 下面以suse 为例 其他系统类似 检查是否有安装sar服务 sar服务包含在sysstat软件包中 rpm qa grep sysstat 如果没有安装执行下面的命令安装 zypper install sysst
  • OCR-APP开发总结(一)

    一 解决删除 运行模式 布局的问题 1 直接将对应的xml部分删除 2 将 Java中MainActivity中引用对应的ID部分删除 并将运行模式的值默认 3 效果图 二 裁剪方法 方法1 android自带的crop进行裁剪 缺点 裁剪
  • Spring MVC类型转换的相关说明

    转自 Spring MVC类型转换的相关说明 下文讲采用示例的方式 讲述相关类型说明 如下所示 insert jsp页面的代码如下
  • C++ 命名空间 & 模板

    命名空间 为了区分不同库中相同名称的函数 类 变量等 引入概念 命名空间 它可作为附加信息来帮助区分它们 使用了命名空间即定义了上下文 本质上就是定义了一个范围 定义命名空间 命名空间的定义使用关键字 namespace 后跟命名空间的名称
  • python实现从零搭建图书管理系统

    学习目标 tornado入门学习 异步服务器学习 异步数据库操作 一 虚拟环境 1 1 虚拟环境的创建 mkvirtualenv tornado py3 p python3 1 2 安装tornado pip install tornado
  • QT学习(一)—— 第一个QT项目

    1 1 新建一个项目 添加项目名称 选择Qwidget类 暂时不选择Generate form那个 补充 这里介绍了一下widget mainWindow dialog三种类的关系 编译器用QT自带的 创建完毕 1 2 项目介绍 1 2 1
  • python爬取内容剔除nbsp_Python正则获取、过滤或者替换HTML标签的方法

    本文实例介绍了Python通过正则表达式获取 去除 过滤 或者替换HTML标签的几种方法 具体内容如下 python正则表达式关键内容 python正则表达式转义符 匹配除换行符以外的任意字符 w 匹配字母或数字或下划线或汉字 s 匹配任意
  • CVPR2023:BiFormer阅读笔记

    目录 前言 1 模型的特点 2 双层路由注意力机制 BRA 3 BiFormer的结构 前言 BiFormer是CVPR2023的一篇文章 文中提出自注意力机制作为Transformer的核心模块 可以帮助网络捕捉长距离上下文依赖 但是这种
  • 基于MFC-MSComm控件的PC与单片机串口通信编程

    作者 uedsr542 来源 51hei 使用工具Visual C 6 0 9针RS232串口线一条 P0口带上拉的LED的51最小系统版 打开软件 新建 gt MFC AppWizard exe 再填写工程名和路径 gt 基于对话框 不需