MFC编程实例:MFC串口的编程mscomm控件与SerialPort类
小职 2017-11-28 来源 :网络 阅读 2533 评论 0

摘要:本文将为大家讲解关于MFC编程实例中FC串口的编程,通过MFC编程实例的内容让你对相关知识点有进一步的认识和理解!

本文将为大家讲解关于MFC编程实例中FC串口的编程,通过MFC编程实例的内容让你对相关知识点有进一步的认识和理解!

MFC制作上位机,首先需要了解的是串口的编程,一般有两种方法,一个是使用ActiveX控件,例如mscomm串口控件,还有一个是用SerialPort类或者一些其他的串口类,这两个的区别是使用SerialPort类不需要注册控件,在其他没有安装控件的电脑上也能够用。

一·使用mscomm串口控件

使用mscomm串口控件的方法网上一大堆,大致说一些方法和一些需要注意的地方。如果是使用VC6.0在WIN7上来编写就会有个问题会通常说添加控件的方法为选中项目à“工程”à“添加到工程”à“Components and Controls”à“Microsoft Communications Control”这样添加会出错,提示为不支持此接口,这是因为此软件在Win7上面不兼容,解决办法是直接在工程界面上右击à“插入ActiveX控件”然后选择相关的控件,然后给用建立类向导,给控件添加变量名,控件相关的类会自动添加,然后就可以用了。这个控件类在但是这个在VS2008以上版本也是一样的,对于有多种类的控件就不一样了。

然后右击控件添加事件,这是事件就是收到串口数据的处理函数,接下来就初始化串口就可。

二·使用SerialPort类

         SerialPort类是开源的,使用起来也方便,下面是复制的其他人的教程:

1       建立程序框架工程

1、在VC6.0开发环境中,新建基于对话框的MFC应用程序名为exp,并添加主要控件,更改控件ID。

2、用Class Wizard为相应控件添加变量。主要添加的变量为显示类型的,如编辑框、组合框等。

3.添加类文件。下载或者拷贝类文件serialport.h和serialport.cpp复制到工程所在的文件夹下,然后点击VC6.0菜单Project->Add to Project->Files…,选择serialport.h和serialport.cpp点击OK,就把类文件加入了当前工程。

4.在FileView中打开expDlg.h,将头文件说明,即加入#include "SerialPort.h",这样就加入了CSerialPort类。通过CSerialPort类完成串口操作。

5. 在主对话框头文件expDlg.h中定义CserialPort类对象,如果只操作一个类对象,就只定义一个类对象。

 

public:

         CSerialPort m_SerialPort; //CSerailPort类对象

         BOOL  m_bSerialPortOpened; //标志串口是否打开

  若要操作多个串口则要为每个串口定义一个类对象,这个可以通过数组方式来定义,这里定义的类对象为m_SerialPort,再定义一个布尔变量用来标志串口是否打开,如上。

2       添加消息响应(添加3处地方)

2.1   在头文件expDlg.h中添加消息响应函数的声明

在CSerialPort类中有多个串口事件可以响应,在一般串口编程中,只需要处理WM_COMM_RXCHAR消息就可以了,该类所有的消息均需要人工添加消息处理函数。将处理函数名定义为OnComm(),首先在expDlg.h中添加串口字符接收消息WM_COMM_RXCHAR(串口接收缓冲区内有一个字符)的响应函数声明:

protected:

         HICON m_hIcon;

         // Generated message map functions

         //{{AFX_MSG(CExp2Dlg)…… ……

         afx_msg LONG OnComm(WPARAM ch, LPARAM port); //只需添加这一行

         //}}AFX_MSG

2.2   在expDlg.cpp文件中进行WM_COMM_RXCHAR消息映射:

BEGIN_MESSAGE_MAP(CExp2Dlg, CDialog)

         //{{AFX_MSG_MAP(CExp2Dlg)…… ……

         ON_MESSAGE(WM_COMM_RXCHAR, OnComm) //只需添加这一行

         //}}AFX_MSG_MAP

END_MESSAGE_MAP()

2.3   接收数据  的消息处理函数。手动输入:接着在expDlg.cpp文件中手动输入函数OnComm()的实现(注意:这里不添加按钮,而是直接  手动输入  整个函数体!!!)。

并在其中完成对接收到的字符的处理,将接收到的字符显示在接收编辑框中:

LONG CExp2Dlg::OnComm(WPARAM ch, LPARAM port)

{

         m_strEditReceiveMsg += ch;

         UpdateData(FALSE);  //将接收到的字符显示在接收编辑框中

         return 0;

}

3       串口操作函数

3.1   打开串口和关闭串口(必须先打开串口,才能发送数据,否则发生内存地址写的错误!)

为按钮添加单击响应函数,分别为“打开串口”按钮添加OnButtonOpen(),为“关闭串口”按钮添加OnButtonClose(),并在OnButtonOpen()中进行初始设置:

void CExp2Dlg::OnButtonOpen()

{

         // TODO: Add your control notification handler code here

         int nPort=1; //选择串口COM1

         if(ChuankouDX.InitPort(this, nPort, 9600,‘N‘,8,1,EV_RXFLAG | EV_RXCHAR,512))

         {

                   ChuankouDX.StartMonitoring();

                   m_bSerialPortOpened=TRUE;

         }

         else

         {

                   AfxMessageBox("没有发现此串口或被占用");

                   m_bSerialPortOpened=FALSE;

         }}void CExp2Dlg::OnButtonClose()

{

       // TODO: Add your control notification handler code here

         ChuankouDX.ClosePort();//关闭串口   

    m_bSerialPortOpened=FALSE;

3.2   发送数据

为“发送”按钮添加OnButtonSend()。

void CExp2Dlg::OnButtonSend()

{

         // TODO: Add your control notification handler code here

         if(!m_bSerialPortOpened)

         return; //检查串口是否打开

         char buf[100];

         memset(&buf, 0, sizeof(buf));

         GetDlgItemText(IDC_send, buf, sizeof(buf));

         if (strcmp("NOT FOUND", buf) == 0)

                   return;

         ChuankouDX.WriteToPort(buf);       //发送数据

}

希望这篇MFC编程文章可以帮助到你。总之,同学们,你想要的职坐标MFC频道都能找到!

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 4 不喜欢 | 0
看完这篇文章有何感觉?已经有4人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程