串口控件发送数据初始化设置(MFC-串口控件发送字符串)

串口控件发送数据初始化设置:

 

1,打开串口按钮初始化设置

void CSerialPortDlg::OnBnClickedButtonOpen()      //发送按钮程序初始化

{

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

       if(m_mscomm.get_PortOpen())    //r如果串口是打开的,则关闭串口

       {

              m_mscomm.put_PortOpen(FALSE);

       }

       m_mscomm.put_CommPort(1);        //选择COM1

       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())  //如果串口1没有打开成功,则打开串口

       {

              m_mscomm.put_PortOpen(TRUE);

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

       }

       Else  //

       {

              m_mscomm.put_OutBufferCount(0);  //串口1打开失败,则输出缓冲区计数为0

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

       }

}

 

2,关闭串口控件初始化

void CSerialPortDlg::OnBnClickedButtonClose()

{

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

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

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

}

 

 

3,控件消息事件处理程序

void CSerialPortDlg::OnCommMscomm()    //串口控件事件处理程序

{

       //TODO:  在此处添加消息处理程序代码

       staticunsignedintcnt = 0;

       VARIANT variant_inp;

       COleSafeArray safearray_inp;

       longlen, k;

       unsignedintdata[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 < len; k++)

              {

                     safearray_inp.GetElement(&k,rxdata + k); //转换为字节型数组

              }

              for(k = 0; k < len; k++)   //将数组转换为CString变量

              {

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

                     m_EditReceive+= strtemp;     //将采集到的数据加入接收编辑框变量

                     CString temp =_T("\r\n");      //换行

                     m_EditReceive+= temp;  //加入接收编辑框原有字符串

              }

       }

       UpdateData(FALSE);

 

}

 

4,发送按钮程序初始化

//发送数据函数调用很简单,关键是类中发送函数的定义

void CSerialPortDlg::OnBnClickedButtonSend()

{

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

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

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

       m_EditSend.Empty();         //发送后清空数据框

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

}

 

5,


注意:写串口通信时,总共有四步骤:

1,打开串口  一个open()函数搞定

2,设置串口(串口初始化:波特率9600,数据位8,停止位1,奇偶校验位0),可以在程序初始化中添加程序,也可以发送按钮中添加程序

3,接收数据(读取数据),一般在串口控件消息触发事件函数中添加程序。比如串口缓冲区接收到一个字符消息,则触发串口控件消息触发函数。

4,发送数据 一个函数搞定

 

 

现场辅助测试接口

1,直接调用源程序的open()函数,然后转到定义里,将相关的程序申明和定义复制到一个单独程序文件中

2,将设置串口的初始化定义在open()函数中

3,然后在串口触发事件中,从缓冲区读取数据read

4,写数据函数write

5,关闭串口close

 

20170619笔记

调用一个类中的成员函数

1,首先建立一个类PPI

2,然后建立一个PPI类的变量 PPI P01

3,接着PPI类的变量就可以调用PPI类中的成员函数:P01.open()

 

将控件的关联变量变为全局变量方法之一:

首先将关联变量值m_mo传给全局变量m_glbmo然后经过全局变量m_glbmo处理完后,再传给关联变量

 

遇到的问题1:之前不知道怎么从一个类移出,放在另外一个单独文件的类中

原因:我的基础知识不够扎实,或者说对程序的应用不够。其实这个问题很简单,利用的是类的定义。相当于在另外一个文件夹中定义一个新的类,只要将原来文件的类读懂,然后将相应的头文件,源文件复制到另一个新的类中,然后看看提示,就可以解决问题了。

比如在类头文件.h申明,在类源文件.cpp定义

// *************头文件申明类******************

#pragma once

class ppi02

{

public:

       ppi02();

       ~ppi02();

       intt;

       voidclose(bool a);

};

 

 

//***************源文件定义类**********

#include "stdafx.h"

#include "ppi02.h"

 

 

ppi02::ppi02()

{

}

 

 

ppi02::~ppi02()

{

}

 

void ppi02::close(boolt)

{

       AfxMessageBox(_T("this is a message!"));

}

 

//***************在DelG文件调用类*********

//***************只需在开头加一个头文件就行*********

 

void CSerialPort3Dlg::OnBnClickedButton2()

{

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

       ppi02 p02;

       boolC = 1;

       p02.close(C);

}

编译后的结果(单击按钮2,弹出如下信息)

 

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页