VS2012+MFC+串口通信的实现
更新时间:2023-09-20 14:36:01 阅读量: 医药卫生 文档下载
- vs2012 mfc教程推荐度:
- 相关推荐
VS2012+MFC+串口通信的实现
我的电脑是win7 64位的。
文档中的图片可通过按住ctrl键加鼠标滚轮进行放大缩小 VS2012链接:http://pan.http://www.wodefanwen.com//s/1hsGOyji 密码:mb0l
然后需要下载串口控件:
链接:http://pan.http://www.wodefanwen.com//s/1i57YRHj 密码:1s91
压缩包包含四个文件:MSCOMM.SRG、MSCOMM32.DEP、MSCOMM32.oca、mscomm32.ocx; 解压后拷贝到:
C:\\Windows\\System32(WIN7、Win8、Win10系统); C:\\WINDOWS\\system32(XP系统)。
注意:64位win7、8、10系统还需要将mscomm32.ocx文件复制到C:\\Windows\\SysWOW64\\目录下,否则后面注册会出错。 在C:\\Windows\\System32里找到cmd.exe以管理员身份运行: Regsvr32 C:\\WINDOWS\\system32\\MSCOMM32.OCX
注册成功如图所示:
然后修改注册表:win+R组合键打开“运行”或者直接在开始菜单里找到“运行”;输入regedit后回车,打开注册表管理器,在其中找到HKEY_CLASSES_ROOT项下的Licenses项,添加主项命名为“4250E830-6AC2-11cf-8ADB-00AA00C00905”,并将键值修改为“kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun”
这样计算机的配置就算完成了。下面开始创建工程。
打开VS2012->文件->新建->项目
新建MFC应用程序,然后修改项目名称,最好是全部英文字母,下面的解决方案名称会自动修改,然后确定就行了。
出现的是这个页面,点击下一步。
修改应用程序类型为基于对话框、MFC的使用改为在静态库中使用MFC、去掉使用Unicode库。点击下一步。
把最小化框和最大化框勾上,点击下一步。
不用修改点击下一步。
点击完成即可创立完成。
这是创建好的图。
选中TODO:在此放置对话框控件。右键删除。下面的确定和取消同样办法处理。
然后添加两个Group Box控件到你所编辑的窗体上面去,放到你喜欢的位置。Group Box没有什么用,只是为了让更好看一些。或者某一分类在一块,更容易分辨模块理解。工具箱在视图里面选择。效果图如下:
然后添加两个Edit Control控件到Combo Box中。效果如图所示:
然后添加两个Combo Box控件、四个Button控件到窗体中。效果图如下:
为了美观可以选中控件进行位置的调整,看到菜单栏->窗口、帮助那里,窗口下面的就是左对齐、右对齐、顶部、下部对齐等,可按照自己的喜好进行调整,选择窗体,可以控窗体的大小。调整好的控件如图所示:
然后选中刚开始放置的Group Box,右击选择属性,将Caption后面的值改为接收。同样的,把下面那个Group Box名称改为发送。
然后选中Edit Control,右击选择属性,把Multiline改为ture。这个的含义是多行,表示内容可以多行显示,一般记录性的编辑框需要多行。
然后修改Vertical scroll为ture:垂直滚动条,需要先更改Multiline属性才能进行修改。
把Want return改为ture:这个含义是当你的text框在多行编辑的情况下,回车表示换行。否则要ctrl+回车才能换行。 最后修改ID为IDC_EDIT_Rev。
同样把下面的编辑框修改一下,ID改为IDC_EDIT_Send。 效果图如下
然后为两个Combo Box添加两个Static Text放在其上面,并修改两个Static Text的Caption分别为选择串口和波特率。效果图如下:
然后进行BUTTON控件的修改。操作步骤同上,将Caption改为打开串口、发送数据、清除数据、退出。并将其ID分别改为IDC_BUTTON_OPEN、IDC_BUTTON_SEND 、IDC_BUTTON_CLEAN、IDC_BUTTON_CLOSE。
然后添加串口控件添加到窗体中,右键选择窗体的空白部分,选择插入ActiveX控件。选择如图所示这个控件:
把这个串口控件放到合适的位置即可,是一个电话的标志。
然后右击Group Box控件里面的Edit Control控件,也就是接受下面的示例编辑框,选择添加变量。
首先更改访问为私有(private),再改类别改为值(Value),最后将变量名m_EditReceive添加进去,点击确定即可。更改后的如图所示:
然后用同样的方法,将发送下面的示例编辑框的内容给改了,变量名改为m_Editsend。
下面用同样的方法为两个Combo Box添加变量,也就是为两个有下拉选项的两个控件添加变量。这两个Combo Box添加变量的时候只需要将访问改为私有
(private),添加变量名分别为m_comb1和m_comb2。具体更改如下图所示:
然后选中你添加的串口控件(电话铃图标那个),用同样的方法添加变量,这个只需要加上一个变量名m_mscom即可。具体如下图所示:
最后可以通过添加Static Text,为自己的制作添加一些小标识。这样我们的MFC串口通讯的架构就已经完成了。如下图所示:
通过右击窗体的空白部分,选择类导向,可以在成员变量中看到我们添加的成员变量。
双击打开串口按钮控件,我们就可以跳转到解决方案的chuankouDlg.cpp中。生成这样的函数结构:
然后返回我们的窗体,依次双击发送数据、清除数据、和退出。生成如图所示的函数体。
进入chuangkouDlg.cpp中的最上方添加 #include \#include \
#include \三个头文件。
在void CchuankouDlg::OnBnClickedButtonOpen()下添加代码
voidCchuankouDlg::OnBnClickedButtonOpen() {
// TODO: 在此添加控件通知处理程序代码
CString str,str1,n; //定义字符串 GetDlgItemText(IDC_BUTTON_OPEN,str); CWnd *h1;
h1=GetDlgItem(IDC_BUTTON_OPEN); //指向控件的caption
if(!m_mscom.get_PortOpen()) {
m_comb2.GetLBText(m_comb2.GetCurSel(),str1);//取得所选的字符串,并存放在str1里面
str1=str1+','+'n'+','+'8'+','+'1'; //波特率、串口号、8位数据位、1位校验位
m_mscom.put_CommPort((m_comb1.GetCurSel()+1)); //选择串口 m_mscom.put_InputMode(1); //设置输入方式为二进制方式 m_mscom.put_Settings(str1); //波特率为(波特率组á合框)无校验,8数据位,1个停止位
m_mscom.put_InputLen(1024); //设置当前接收区数据长度为1024 m_mscom.put_RThreshold(1); //缓冲区一个字符引发事件 m_mscom.put_RTSEnable(1); //设置RT允许
m_mscom.put_PortOpen(true); //打开串口 if(m_mscom.get_PortOpen()) {
str=_T(\关闭串口\ UpdateData(true);
h1->SetWindowText(str); //改变按钮名称为‘’关闭串口” } }
else {
m_mscom.put_PortOpen(false); if(str!=_T(\打开串口\ {
str=_T(\打开串口\ UpdateData(true);
h1->SetWindowText(str); //改变按钮名称为打开串口 } } }
同理添加发送、清除、退出的程序
voidCchuankouDlg::OnBnClickedButtonSend() {
// TODO: 在此添加控件通知处理程序代码 UpdateData(true); //更新控件数据
m_mscom.put_Output(COleVariant(m_Editsend));//把发送编辑框的数据发送出去 }
voidCchuankouDlg::OnBnClickedButtonClean() {
// TODO: 在此添加控件通知处理程序代码
m_EditReceive=_T(\//给接收编辑框发送空格符 UpdateData(false); //更新数据 }
voidCchuankouDlg::OnBnClickedButtonClose() {
// TODO: 在此添加控件通知处理程序代码 if(m_mscom.get_PortOpen())
m_mscom.put_PortOpen(false); CDialogEx::OnCancel(); }
然后选中串口控件,右键选择添加事件处理程序,点击添加编辑即可。
添加编辑后会跳转到解决方案的chuankouDlg.cpp中,并生成voidCchuankouDlg::OnCommMscomm1()结构框架。
为结构框架添加程序代码:
调试的时候先打开串口,然后将发送的东西分别放到两个窗体发送,然后发送数据,经过测试,串口可以实现通信。
我遇到的问题:
如果在添加控件的时候一直弹出setup AutoCAD的时候,那就是因为你电脑安装了CAD,CAD没有安装完全或者没有卸载干净。
可以选择控制面板中的程序和功能,然后选中进行卸载或更改。然后选择修复或重新安装。修复或卸载一下就可以了,我选择的是修复了一下。
如果在添加串口控件的时候,双击之后解决方案的cpp文件并没有创建程序框架,那就是因为头文件你没有添加。
注:在双击打开串口、发送数据、清除数据、退出来创建程序框架的时候,你需要把架构创建完之后再去添加程序代码,否则会出现双击进入不到解决方案中(也就是cpp文件中)。
学习心得:学习的时候一定要静下心去学习,特别是软件方面,改error的时候是最烦人的,一点小错误可能就要花大量的时间去找资料去解决问题,还有一些问题是你怎么也解决不了的,碰到这种问题,那就先不要死扣,从其他方面学习这个东西,学的时间稍长之后,会发现,在改error你也学到了很多东西,特别是对软件各种功能的了解。如果没有之前改error的经历,那么这个串口通讯我也不会这样较少错误的做出来。这个串口通信先后建立了有5、6个工程都没有成功,大部分都是改error没有改出来而失败,而error出现的原因就是串口控件的一些东西没有安装。不要怕失败才会成功!
河南工业大学
大风歌于2017年11月11日制作
voidCchuankouDlg::OnCommMscomm1() {
// TODO: 在此处添加消息处理程序代码 if(m_mscom.get_CommEvent()==2) {
charstr[1024]={0}; long k;
VARIANT InputData=m_mscom.get_Input(); //读缓冲区 COleSafeArrayfs;
fs=InputData; //VARIANT型变à量转换为COleSafeArray型变量 for(k=0;k m_EditReceive+=str; // 接收到编辑框里面 //SetTimer(1,10,NULL); //延时10ms UpdateData(false); } } 然后在chuankouDlg.cpp中找到提示“额外的初始化代码”,在这下面添加串口初始化代码 // 串口选择组合框 CStringstr; int i; for(i=0;i<15;i++) { str.Format(_T(\ m_comb1.InsertString(i,str); } m_comb1.SetCurSel(0);//预置COM口 //波特率选择组合框 CString str1[]={_T(\\ _T(\0\ for(int i=0;i<12;i++) { intjudge_tf=m_comb2.AddString(str1[i]); if((judge_tf==CB_ERR)||(judge_tf==CB_ERRSPACE)) MessageBox(_T(\ } m_comb2.SetCurSel(0);//预置波特率为\ 这样,串口程序就写完了,下面进行调试程序。 在生成中选择生成解决方案 当出现这个对话框的时候选择否。 然后就会生成成功 然后点击调试下面的本地Windows调试器 就可以看到我们制作的窗体 最后需要做的就是串口的测试 虚拟串口链接:http://pan.http://www.wodefanwen.com//s/1hseoNzA 密码:5oey 下载完成后按照里面文档进行安装即可。 打开虚拟串口点add pair 就会出现两个虚拟串口 找到你文件保存的位置,再一次打开程序 运行chuankou(1KB)那个,打开之后,然后按照上面步骤再次程序,这样就会有两个窗体来测试串口通信的好坏。 一个窗体选择串口1,另一个选择串口2,串口的选择可以通过选中com口然后利用鼠标的滚轮来进行选择。波特率也是一样的。 调试的时候先打开串口,然后将发送的东西分别放到两个窗体发送,然后发送数据,经过测试,串口可以实现通信。 我遇到的问题: 如果在添加控件的时候一直弹出setup AutoCAD的时候,那就是因为你电脑安装了CAD,CAD没有安装完全或者没有卸载干净。 可以选择控制面板中的程序和功能,然后选中进行卸载或更改。然后选择修复或重新安装。修复或卸载一下就可以了,我选择的是修复了一下。 如果在添加串口控件的时候,双击之后解决方案的cpp文件并没有创建程序框架,那就是因为头文件你没有添加。 注:在双击打开串口、发送数据、清除数据、退出来创建程序框架的时候,你需要把架构创建完之后再去添加程序代码,否则会出现双击进入不到解决方案中(也就是cpp文件中)。 学习心得:学习的时候一定要静下心去学习,特别是软件方面,改error的时候是最烦人的,一点小错误可能就要花大量的时间去找资料去解决问题,还有一些问题是你怎么也解决不了的,碰到这种问题,那就先不要死扣,从其他方面学习这个东西,学的时间稍长之后,会发现,在改error你也学到了很多东西,特别是对软件各种功能的了解。如果没有之前改error的经历,那么这个串口通讯我也不会这样较少错误的做出来。这个串口通信先后建立了有5、6个工程都没有成功,大部分都是改error没有改出来而失败,而error出现的原因就是串口控件的一些东西没有安装。不要怕失败才会成功! 河南工业大学 大风歌于2017年11月11日制作
正在阅读:
VS2012+MFC+串口通信的实现09-20
物流竞聘演讲稿08-30
08年年初工作报告10-20
太阳能电池片各参数异常的原因总结11-09
【雷人的话2016】雷人的话2016大全02-10
大工16春《内部控制与风险管理》大作业06-09
中国真皮鞋底行业市场前瞻与未来投资战略分析报告2022-2022年04-16
大型企业职业测试题05-28
锅炉及工艺管道施工组织设计03-17
- 五年级阅读资料(三)五5班
- 盈视吟诵青少班06课 11月23日讲座:入短虚长第二讲《大学》与《马说》(1)
- 幼儿园中班散文说课稿《云彩和风儿》
- 数控技术 - 兰州理工大学 - 2007《数控技术》试题A
- 北语毕业论文模板
- 2015-2016学年河南省雪峰中学高二生物同步培优练习微专题21《生态系统的能量流动》(新人教版必修3)
- 房地产市场调研
- 世界城市轴线比较研究
- 当代中国教育问题的病根
- 天星教育2017届高三毕业生第二次大联考
- 中小学教师职称讲课答辩:微型课
- 卡多佐
- 江苏省2014年3月1日新版监理用表(第五版)(1) - 图文
- 浙江省2019年初中学业水平考试(舟山卷)科学试题卷(含答案) - 图文
- 应急知识题库(含答案)
- 作业六 商检、索赔、不可抗力和仲裁习题
- 87-1 拜佛姿势图解
- WinPE3.1制作之添加Explorer《第四讲 - 一些后期设置及网友互助》
- 2015年上海市食品安全有奖知识竞赛试题与答案
- 送审论文