VC++6.0串口通信编程基础及缓冲器电源程序解析
基于VC6.0MFC的简单串口通信软件编程

基于VC6.0MFC的简单串⼝通信软件编程(⼀)基于对话框编程基本步骤:1.新建基于对话框的⼯程;2.拖曳所需的基本控件,构成界⾯;3.使⽤类向导(CLASS WIZARD)创建与基本控件对应的成员变量、成员函数,确定与函数相应的消息或事件——即触礁发该函数执⾏的条件(如单击等)。
(⼆)使⽤mscomm控件:1.基本设置:m_com.SetCommPort(1); //选择COM1m_com.SetInBufferSize(1024); //设置输⼊缓冲区的⼤⼩,Bytesm_com.SetOutBufferSize(256); //设置输出缓冲区的⼤⼩,Bytesif(!m_com.GetPortOpen()) //打开串⼝m_com.SetPortOpen(TRUE);m_com.SetInputMode(1); //设置输⼊⽅式为⼆进制⽅式m_com.SetSettings("4800,s,8,1");m_com.SetRThreshold(1); //为1表⽰有⼀个字符引发⼀个事件 m_com.SetInputLen(0);2.似乎每次设置m_com.SetSettings("4800,s,8,1"),必须先关再开串⼝才有效。
设置的校验位似乎只对发送数据有效,对接收数据⽆效。
3.虽然m_com.SetRThreshold(1)设置接收到⼀个字符就引发⼀个事件(触发执⾏函数),但执⾏函数读取到的数据可能不⽌1Byte,如另⼀串⼝连续发送多个字节,当串接收到第⼀个字节后就触发函数,但在函数去输⼊缓冲区读取数据时可以读到8Byte。
(三)MFC的⼀些基本使⽤:1.Unsigned char 与char不同,在执⾏加减时,char型当作带符号数(可能为负)。
2.当控件对应的变量是控件类时,可能通过该类的成员函数来获取数据或执⾏操作:如m_com是mscomm控件的变量,可以执⾏m_com.SetPortOpen(FALSE)来关闭串⼝。
利用VC++6.0实现上位机与PLC的串行通信(1)

利用VC++6.0实现上位机与PLC的串行通信作者:惠鸿忠, Hui Hongzhong作者单位:聊城大学刊名:微计算机信息英文刊名:CONTROL & AUTOMATION年,卷(期):2006,22(16)被引用次数:12次参考文献(4条)1.郭飒基于OPENGL的灯光控制系统的实现[期刊论文]-微计算机信息 2004(05)2.苗长新注浆泄漏监测程序的设计及其串行通信实现[期刊论文]-微计算机信息 2003(06)3.李现勇Visual C++串口通信技术与工程实践 20024.SIMATIC S7-200可变程序控制器系统手册引证文献(12条)1.吴镇平基于PLC的桥式组合大切机监控系统设计[期刊论文]-闽西职业技术学院学报 2010(1)2.徐洋.王宏华.周强.李俊星基于MSP430单片机的无刷直流电机实验测试平台设计[期刊论文]-机械制造与自动化2010(4)3.杨英琴.侯力.郑熙.王裕林.陈丹PLC控制系统在厚壁钢管超声波探伤中的应用[期刊论文]-机械设计与制造2010(12)4.吴镇平.林海涨.李捷辉利用VC++6.0实现PLC实时监控[期刊论文]-装备制造技术 2009(7)5.王少江.侯力.薄立朗.匡红PLC和变频器在超声波自动探伤系统的应用[期刊论文]-煤矿机械 2009(4)6.唐捷.蔡智圣.李争名.赵士滨基于PC机并口通信的多媒体设备控制系统的设计与实现[期刊论文]-光盘技术2009(2)7.李波.舒朝君.江彦.余磊.刘永喜.胡玉庆.皮智敏基于VC的PLC数据采集管理系统[期刊论文]-现代电子技术2009(6)8.董奎勇.钱炜.王明军.熊磊基于VC++的月球车的数据采集处理系统[期刊论文]-微计算机信息 2008(28)9.黄良希.LI Ding-zhu用于机动车路考系统的车载通讯系统研究[期刊论文]-微计算机信息 2008(23)10.汤光华.吴青自由口模式下S7200 PLC与上位机的通信[期刊论文]-微计算机信息 2008(13)11.李志伟基于AT指令的串行通信程序的设计[期刊论文]-微计算机信息 2007(9)12.安宪军.黄尔烈.贾少锐.张常全基于Delphi7.0的上位机与PLC的通信[期刊论文]-微计算机信息 2007(7)本文链接:/Periodical_wjsjxx200616021.aspx。
VC++6.0网络编程入门例程(sockets)

VC++6.0⽹络编程⼊门例程(sockets)服务器端: 1.初始化阶段调⽤WSAStartup() 此函数在应⽤程序中初始化Windows Sockets DLL ,只有此函数调⽤成功后,应⽤程序才可以再调⽤其他Windows Sockets DLL中的API函数。
在程式中调⽤该函数的形式如下:WSAStartup((WORD)((1<<8|1), (LPWSADATA)&WSAData)参数:(1<<8|1):表⽰我们⽤的是WinSocket1.1版本;WSAata:⽤来存储系统传回的关于WinSocket的资料。
2、建⽴Socket 初始化WinSock的动态连接库后,需要在服务器端建⽴⼀个监听的Socket,为此可以调⽤Socket()函数⽤来建⽴这个监听的Socket,并定义此Socket所使⽤的通信协议。
此函数调⽤成功返回Socket对象,失败则返回INVALID_SOCKET(调⽤WSAGetLastError()可得知原因,所有WinSocket 的API函数都可以使⽤这个函数来获取失败的原因)。
SOCKET PASCAL FAR socket( int af, int type, int protocol ) 参数: af: ⽬前只提供 PF_INET(AF_INET); type: Socket 的类型 (SOCK_STREAM、SOCK_DGRAM); protocol:通讯协定(如果使⽤者不指定则设为0); 如果要建⽴的是遵从TCP/IP协议的socket,第⼆个参数type应为SOCK_STREAM,如为UDP(数据报)的socket,应为SOCK_DGRAM。
3、绑定端⼝ 接下来要为服务器端定义的这个监听的Socket指定⼀个地址及端⼝(Port),这样客户端才知道待会要连接哪⼀个地址的哪个端⼝,为此我们要调⽤bind()函数,该函数调⽤成功返回0,否则返回SOCKET_ERROR。
基于VC_6_0的多串口通信方法_王中训

该多路串行通信系统由上位机和下位机构成 ,如图 1所 示 ,上位机为 PC机 , PC机通过多用户卡可扩展出八个串口 , 下位机为单片机 。与传统的 TTL 等数字电路的逻辑电平不 同 , RS2232标准规定信号电压在 - 15 ~ - 3 V 和 3~15 V ,传 号和空号之间至少有 6V 的电压差 ,提高了数据传输的可靠 性和抗干扰能力 。因此 ,单片机与 PC机需要用一个电平转 换板 , 用 MAX232 芯 片 实 现 TTL 电 平 和 RS232 电 平 相 互 转换 。
图 2 单线程实现多串口通信流程 3. 2 创建读写线程 ,实现串行通信
如图 3所示 ,打开并配置完串口后 ,开启两个线程 ,一个 读线程和一个写线程 ,主线程主要负责将所有串口接收到的 数据进行处理显示以及各个子线程的调度和管理 ,读线程负 责读取八个串口的数据 ,写线程负责向需要控制的串口中写 入数据 。在实际应用中向串口写入数据的操作并不频繁 ,所 以写线程在刚开始创建时即被挂起 ,当需要向串口发送数据 时才激活写线程 ;当写操作完成后 ,又被挂起 ,以减少系统开 销 ,提高程序的执行效率 [4 ] 。
由于运用标准通信函数需要对硬件电路的结构原理非常了解编程比较复杂scomm控件进行串口编程scomm控件是微软公司提供的indows环境下实现串行通信的利用它可以非常简单地实现串行通scomm控件虽然简单易用但在实际测试中也发现了其本身的一些缺点如实时性不高高速通信时准确率较差和处理速度较慢等缺点另外由于其本身存在一i函数实现串口编程利用有很强的灵活性但需要用户详细了解串口程序开发过程和一些复杂indows系统中串口和其他通信设备是作为文件处理的
第 28卷 2008年 6月
计算机应用 Computer App lications
串口调试助手VC60程序

串口调试助手VC60程序目次:1.建立项目那可能是你在安装VC6时没有把Active某一项选上,重新安装VC6,选上Active某就可以了),//{{AF某_INCLUDES()#include\(这时运行程序,如果有错,那就再从头开始)。
4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_R某DATA,另一个用于输入发送数据,ID为IDC_EDIT_T某DATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。
别忘记了将接收编辑框的Propertie->Style中把Miltiline和VerticalScroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。
休息一会吧?我们天天与电脑打交道,要注意保重,我现在在单杠上做引体向上可以来40次,可我都32了,佩服吗?。
好了,再接着来,下面是关键了:{//TODO:AddyourcontrolnotificationhandlercodehereVARIANTvariant_inp;COleSafeArrayafearray_inp;LONGlen,k;BYTEr某data[2048];//设置BYTE数组An8-bitintegerthatinotigned.CStringtrtemp;afearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray 型变量len=afearray_inp.GetOneDimSize();//得到有效数据长度for(k=0;kafearray_inp.GetElement(&k,r某data+k);//转换为BYTE型数组for(k=0;kBYTEbt=某(char某)(r某data+k);//字符型trtemp.Format(\将字符送入临时变量trtemp存放m_trR某Data+=trtemp;//加入接收编辑框对应字符串}}UpdateData(FALSE);//更新编辑框内容}到目前为止还不能在接收编辑框中看到数据,因为我们还没有打开串口,但运行程序不应该有任何错误,不然,你肯定哪儿没看仔细,因为我是打开VC6对照着做一步写一行的,运行试试。
用VC++6.0实现PC机与嵌入式系统的串口通信

I lme t t n o e iIP r mpe na i f S r o t o a Co mmu ia in Be we n a Co nc t t e mp t r o ue a d t e Emb d e Sy t m Us n n h e d d se ig
Co o e t a d mp n ns n Co t i nr s o Ga r Ney对 话 框 的 Reitrd gsee
在嵌入式系统中,经常会遇 到通 讯问题。串 口 讯是一种实用 通 的通讯方式 。嵌入式系统与上位机 的通 讯通常是通过 串口进 行的。 P I S公司的 L C 2 0 HL P 2 0 是基于一个支持实时仿真和跟踪的 3 位 2 A M7 D — P 的嵌 入 式 R S 。 有 两 个 异 步 串 行 接 口 R r MI C U r S IC 具 ( UART ' oUART1 和 RS 3 ) 2 2电平转 换电路 ,可与上位 机进行 通 信。 在 Wi o s n w 环境下开发与下位机的通讯系统。经常使用基于 d VC+ +的 Wid ws 台开 发。 VC+ no 平 +是微软公司推 出的一个 面向 对象的、功能丰富的可视化 重量级 的开发工具 。它虽然复杂,但 功 能非常强大。它在图形处理和 数据库管理等方 面都有较大 的优势 。 因此 ,我们利用 V + 6 提供 的通 讯控件 MS o C +. 0 C mm, MF 以 C来 设计界面编制程序,实现 与 L C 2 0的通 讯系UN - a . EN n d ng Sih i W Ya g- o ’
( c o lo e ti n i e rn n tm ain S h o fElcrc E gn e ig a d Au o to ,
Hee ie s y o c n lg ,Hee 30 9 fiUnv ri fTe h oo y t fi2 O o )
基于VC++ 6.0的串口通信实验报告
网络与通信实验报告题目:串口通行实验班级:0309103学号:*********姓名:***指导老师:付大丰日期:2012-10-21一、实验要求把两台计算机的串口通过串口线连在一起,通过串口实现两台计算机通讯。
可以利用高级语言、C语言编程实现,要求程序界面友好,有发送和接收功能,其接收和发送内容可在屏幕上显示。
二、实验原理串口通讯把数据的字节分解成单个的二进制比特流依次传输,其结构简单,连接线少,应用非常广泛。
实现串口通信的方法很多。
如:利用标准通信函数实现串口通信、利用API实现串口通信和利用ActiveX控件实现。
本文主要采用ActiveX控件Microsoft CommunicationsControl(MSComm)编程,Windows平台先进的ActiveX技术使得对串口编程不再需要处理烦琐的细节。
利用已有的AxtiveX控件,只需要编写少量的代码,就可以轻松高效地完成任务。
以下对ActiveX控件属性进行简单介绍,在ClassWizard中为新创建的通信控件定义成员对象(CMSComm m_comm),通过该对象便可以对串口属性进行设置,MSComm控件共有27个属性,这里只介绍其中几个常用属性:CommPort:设置并回通讯端口号,缺省为COMl。
Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
PortOpen:设置并返回通讯端口的状态,也可以打开和关闭端口。
Input:从接收缓冲区返回和删除字符。
Output:向发送缓冲区写一个字符串。
InputLen:设置每次Input读入的字符个数,缺省值为0,表明读取接收缓冲区中的全部内容。
InBufferCount:返回接收缓冲区中已接收到的字符数,将其置0可以清除接收缓冲区。
InputMode:定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。
RThreshold和SThreshold:表示在OnComm事件发生之前,接收缓冲区或发送缓冲区中可以接收的字符数。
用VC6。0实现串行通讯的三种方法
摘要:本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。
在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。
依据不同的条件实现对串口的灵活编程控制是我们所需要的。
在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10S向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收,处理,记录,显示,实时绘制曲线。
串行通信程序开发环境为 VC++ 6.0。
Windows下串行通信与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。
串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。
与通信设备相关的结构有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTAT,DCB,MODEMDEVCAPS,MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,详细说明可参考MSDN帮助文件。
以下将结合实例,给出实现串行通信的三种方法。
实现串行通信的三种方法方法一:使用VC++提供的串行通信控件MSComm 首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。
此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。
VC60串口通信编程基础及缓冲器电源程序解析(精华)
VC++6.0串口通信编程基础及缓冲器电源程序解析目录一、概述 (3)二、开发平台 (3)2.1硬件平台 (3)2.2软件平台 (3)2.3源码 (3)三、用MFC创建一个空对话框程序 (4)四、关联变量介绍及实例 (9)五、串口通信编程的简单实现 (13)5.1界面及相关控件创建 (13)5.2数据接收和发送编程 (19)5.3程序测试 (21)六、缓冲器电源上位机程序简析 (23)6.1界面初始化编程 (24)6.2串口编程(采用C SERIAL P ORT类编写) (25)6.3上下位机通讯帧格式 (28)6.4控制按钮编程 (29)一、概述本文介绍了一种在VC++6.0中实现简单串口通信编程的方案,并在此基础上对实验室的旧版缓冲器电源上位机程序进行分析。
阅读本文之前最好已经了解C++及MFC的一些基础知识:类与对象的关系及各自定义、构造函数与析构函数、MFC常用类的分类、MFC消息定义、消息映射机制等。
C++编程已经有很多年了,而且不是纯粹的面向对象编程,有很多不完美的地方。
推荐使用C#编程,在这方面实验室已经有很好的基础。
本文简单介绍面向对向编程的一些初级知识。
二、开发平台2.1 硬件平台2.2 软件平台2.3 源码三、用MFC创建一个空对话框程序步骤一. 打开VC++6.0软件,在菜单栏选择【文件】—【新建】步骤二. 在弹出的【新建】对话框中单击【工程】选项卡,在该列表框列出的应用程序类型中选择【MFC AppWizard(exe)】选项接着输入工程名称并选择保存路径。
步骤三. 单击确定之后打开如下所示对话框,选择步骤四. 单击下一步,打开下面所示对话框,保持默认设置,不做改动步骤五. 单击下一步,继续打开如下对话框,风格只有MFC标准有效,源文件备注指的是产生一个关于源文件描述的文本文件,使用MFC类库的方式有两种:共享dll(动态链接库)和静态链接库,前者是动态调用MFC类库,即不包含在生成的可执行程序中,后者是静态调用MFC类库,即将MFC类一起编译在可执行程序中,方便应用程序移植到别的计算机上运行,这里也保持默认设置。
VC++6.0操作简介及编程规范
VC++6.0操作简介一、 VC++6.0VC++6.0二、 VC++6.0环境的基本操作1. 建立应用程序 操作步骤如下:(1) 关闭 当前工作区:【文件】→【关闭 工作区】 (必要时) (2) 建立工程: 【文件】 →【新建】(出现“新建”对话框)在“新建”对话框中选中“工程”选项卡→选中其中的“Win32 Console Application”项→选择存储“位置”→输入工程名→单击“确定”按钮(出现“Win32Console Application”对话框)在“Win32 Console Application”对话框中选择“An empty project”选项→单击“完成”按钮注意:在操作过程中,如果出现提示性对话框,可根据具体情况按“确定”或“取消”按钮。
至此,一个新的工程已经建立,接下来,可以在该工程中建立文件或(和)将已经存在的文件添加到工程中:在工程中新建文件:【工程】→【添加工程】→【新建】(出现“新建”对话框)在“新建”对话框中选中“文件”选项卡→选中其中的“C++ Source File”或者“C/C++ Header File”项→选择新建的置(目录)→输入文件名→单击“确定”按钮→输入文件内容。
例如,新建的名为M1.cpp的源文件内容如下:向工程中添加文件【工程】→【添加工程】→【Files…】(出现“插入文件到工程”对话框)在“插入文件到工程”对话框中选中要插入的文件→选择文件要插入的工程(插入到)→单击“确定”按钮2.编辑文件操作步骤如下:在“工作区”窗口中选择“FileView”选项卡→展开相应工程的文件分支(工程名files)→双击类要编辑的文件名(此时,相应文件的内容已经显示在编辑窗口中)→对文件进行编辑3.编译、构建与运行应用程序编译源文件:在“工作区”窗口选择“FileView”选项卡→选择要编译的源文件→【编译】→【编译xx】构建可执行文件:设置活动工程(工作区中有多个工程时):【工程】→【设置活动工程】→【xx (工程名)】【编译】→【构建xx.exe】运行应用程序:设置活动工程(工作区中有多个工程时):【工程】→【设置活动工程】→【xx (工程名)】【编译】→【执行xx.exe】4.在工程中新建类(1)新建类:设置活动工程(工作区中有多个工程时需要此步)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC++6.0串口通信编程基础及缓冲器电源程序解析目录一、概述 (3)二、开发平台 (3)2.1硬件平台 (3)2.2软件平台 (3)2.3源码 (3)三、用MFC创建一个空对话框程序 (4)四、关联变量介绍及实例 (9)五、串口通信编程的简单实现 (13)5.1界面及相关控件创建 (13)5.2数据接收和发送编程 (19)5.3程序测试 (21)六、缓冲器电源上位机程序简析 (23)6.1界面初始化编程 (24)6.2串口编程(采用C SERIAL P ORT类编写) (25)6.3上下位机通讯帧格式 (28)6.4控制按钮编程 (29)一、概述本文介绍了一种在VC++6.0中实现简单串口通信编程的方案,并在此基础上对实验室的旧版缓冲器电源上位机程序进行分析。
阅读本文之前最好已经了解C++及MFC的一些基础知识:类与对象的关系及各自定义、构造函数与析构函数、MFC常用类的分类、MFC消息定义、消息映射机制等。
C++编程已经有很多年了,而且不是纯粹的面向对象编程,有很多不完美的地方。
推荐使用C#编程,在这方面实验室已经有很好的基础。
本文简单介绍面向对向编程的一些初级知识。
二、开发平台2.1 硬件平台2.2 软件平台2.3 源码三、用MFC创建一个空对话框程序步骤一. 打开VC++6.0软件,在菜单栏选择【文件】—【新建】步骤二. 在弹出的【新建】对话框中单击【工程】选项卡,在该列表框列出的应用程序类型中选择【MFC AppWizard(exe)】选项接着输入工程名称并选择保存路径。
步骤三. 单击确定之后打开如下所示对话框,选择步骤四. 单击下一步,打开下面所示对话框,保持默认设置,不做改动步骤五. 单击下一步,继续打开如下对话框,风格只有MFC标准有效,源文件备注指的是产生一个关于源文件描述的文本文件,使用MFC类库的方式有两种:共享dll(动态链接库)和静态链接库,前者是动态调用MFC类库,即不包含在生成的可执行程序中,后者是静态调用MFC类库,即将MFC类一起编译在可执行程序中,方便应用程序移植到别的计算机上运行,这里也保持默认设置。
步骤六. 单击下一步,得到下图所示对话框,单击完成按钮则就完成了一个对话框应用程序的创建。
步骤七. 新建立的对话框程序,打开工作区的【ClassView】选项卡,得到下图表示类,粉红色小方块表示类的成员函数,绿色小方块表示成员变量,黄色钥匙表示保护类型(protected)的成员变量或成员函数,该工程中没有私有类型的成员,私有类型成员是在前面加一把锁标明。
步骤八. 打开工作区的【FileView】选项卡,得到下图,工作区是工程文件目录步骤九.打开工作区的【ResourceView 】选项卡,双击Dialog 中的IDD_MYDIALOG_DIALOG ,即可打开对话框编辑窗体。
步骤十. 标准控件工具栏,各控件功能请参考有关资料自带的串口通信控件MSComm 并不在工具栏里,需要自行添加,添加路径: 菜单栏【工程】——【增加到工程】——【Components and Controls Gallery 】,选择Registered ActiveX Controls 文件夹中的然后添加即可。
静态文本框 动态编辑框按钮MFC 自带的串口通信控件四、关联变量介绍及实例关联变量是C++/MFC 编程中一个重要概念,是进行数据交换的重要途径。
下面举一实例来说明关联变量。
创建一个新的MFC 对话框工程(定名为sample ),然后添加2个编辑框和一个按钮(窗体自带控件已删除),如下图: 注:在控件上右击选择【属性】,可以修改控件的名称及参数。
在对话框窗体上添加2个静态文本框IDC_EDIT1和IDC_EDIT2以及一个按钮IDC_BUTTON2。
要实现的功能:IDC_EDIT1为输入框,IDC_EDIT2为输出显示框,在输入框中输入一个整数,点击按钮实现×2,在输出框中得到输入值 2倍。
步骤一. 在编辑界面上右击鼠标,选择【建立类向导】,进入MFC ClassWizard 窗口,单击【Message Maps 】选项卡进入消息添加页面。
单击IDC_EDIT1 IDC_BUTTON2IDC_EDIT2步骤二.单击【Member Variables】选项卡,进入添加变量页面,如下图,分别为输入框和输出框添加一个int型的关联变量m_a和m_b。
注:每个控件可添加多个变量,变量类型可选。
添加方法:选择左图大方框内要添加变量的控件对象,然后单击Add Member Variable按钮,弹出右图,填入要添加变量的名字,选择类型,单击OK,然后在左图大方框内的相应控件上就会显示出来。
这些变量添加后在代码文件中就会体现,在主代码文件sampleDlg.cpp中:控件的数据交换,在本例中体现为关联变量,其代码在虚函数DoDataExchange 中。
如上所述在MFC ClassWizard中添加的关联变量都可以在DoDataExchange 中找到对应代码。
步骤三. 为按钮控件添加消息及消息响应函数。
首先介绍常用标准消息的添加方法,如下,进入MFC ClassWizard窗口,单击【Message Maps】选项卡进入消息添加页面。
如图给按钮IDC_BUTTON2添加BN_CLICKED消息(即按钮被单击的消息)。
对于按钮的单击消息有个更快捷的添加方式:直接在编辑窗体上双击该按钮,弹出下面窗口,该窗口为按钮添加一个单击消息,图中OnButton2为单击消息的消息响应函数。
单击OK,直接跳到OnButton2函数的代码区,此时单击消息及空的消息响应函数添加完毕。
1.选择控件或窗体2.选择相应的消息3.单击添加步骤四. 为空的消息响应函数OnButton2添加功能代码:这里有2行重要代码:UpdateData(TRUE);//关联变量时常用,把框体内容赋给与之相关联的变量UpdateData(FALSE); //关联变量时常用,把更新后的变量值返回给框体至此,程序设计完毕,编译运行即可。
编译生成运行有时候在某个代码文件上编译时,可能是因为其他文件的全局变量未传递过来,导致错误,此时直接点击【生成】即可,最终再点击【运行】,观察可执行程序的效果。
注:生成的可执行程序在该工程的Release文件夹或Debug文件夹下可以找到。
五、串口通信编程的简单实现常用串口通讯编程方法:1.利用VC++ 6.0提供的MSComm 控件编程2.使用32位的API 通信函数3.使用CserialPort 类进行编程本节将采用第三种方法编写一个简单串口通信程序。
所用的CserialPort 类由Remon Spekreijse 编写,使用时需下载源程序SerialPort.h 和 SerialPort.cpp 。
注:本节所有代码均可从网上找到,此处只是对代码进行介绍和实现。
5.1 界面及相关控件创建步骤一. 建立一个新MFC 对话框工程,命名为SCPortTest ,添加下图所示控件组合框控件IDC_COMBO_COMPORT 关联CComboBox 型变量m_ctrlComboComPort编辑框IDC_EDIT_RECEIVEMSG 关联CString 型变量m_strEditReceiveMsg编辑框IDC_EDIT_SENDMSG 关联CString 型变量m_strEditSendMsg组合框控件IDC_COMBO_COMPORT 按钮ID_OK 编辑框IDC_EDIT_RECEIVEMSG编辑框IDC_EDIT_SENDMSGCComboBox型变量m_ctrlComboComPort的添加:这里选ControlCComboBox型这两个地方务必选上此处选择“下移”或“下拉列表”按住Ctrl和回车键换行步骤二. 添加CserialPort 类及定义对象①把SerialPort.cpp 和SerialPort.h 文件复制到工程目录文件夹内,如下图步骤所示,将SerialPort.cpp 加入 SerialPort.h 加入注:VC++6.0上可能没有 解决方案见下文点击此处三角,控件的整体框架 显现,如图中所示的虚线框这个距离要够大,否则下拉的数据无法显示多行1.单击选择被添加到的文件夹2.单击这里执行添加★关于无法通过下图所示添加文件的问题:这是由Visio 及OFFICE 与VC++6.0冲突造成的,解决方案见网上资料。
本文解决此问题后在VC++6.0上添加了2个按钮: 用这两个按钮实现添加和打开。
3.选择文件然后确定②声明类对象和接口状态变量: 首先,在SCPortTestDlg.h 文件内添加语句,引入SerialPort 类,即添加#include "SerialPort.h"。
其次,在类class CSCPortTestDlg : public CDialog 中声明SerialPort 类的对象和一个状态变量。
本例中为:CSerialPort m_SerialPort BOOL m_bSerialPortOpened步骤三. 初始化界面及控件显示:在SCPortTestDlg.cpp 文件的BOOL CSCPortTestDlg::OnInitDialog()函数中添加代码:m_ctrlComboComPort 为组合框控件IDC_COMBO_COMPORT 关联的变量 GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow();的用法请参考有关资料程序初始运行显示COM1 串口还未打开,【打开串口】按钮可用,【关闭串口】按钮不可用步骤四.【打开串口】和【关闭串口】按钮功能的实现为添加单击消息,消息响应函数OnButtonOpen(),代码如下:为添加单击消息,消息响应函数OnButtonClose(),代码如下:5.2数据接收和发送编程功能:将接收到的数据放到编辑框IDC_EDIT_RECEIVEMSG显示点击【发送】按钮,将编辑框IDC_EDIT_SENDMSG的数据发送出去步骤一.窗口接收到串口数据的消息及其消息响应函数首先,窗口接收到串口数据消息为WM_COMM_RXCHAR,是在SerialPort.h中已经定义好的。
其次,命名与之对应的消息处理函数为OnComm,在SCPortTestDlg.h中声明最后,将消息WM_COMM_RXCHAR和处理函数OnComm映射到一起,在文件SCPortTestDlg.cpp中添加映射代码,如下:关于消息及消息响应函数的定义,映射机制的建立,请参考有关资料步骤二. 消息处理函数OnComm的实现,代码如下步骤三. 数据发送的实现,为按钮【发送】添加单击消息,响应函数如下:步骤四. 为按钮【退出】添加单击消息,响应函数如下:5.3程序测试经过上面步骤,程序设计完毕,编译运行。