【C++ MFC开发】串口通信之多个编辑框输出
##背景描述##
基于zigbee的温室大棚
一个协调器连接电脑,并接收多个zigbee终端发过来的数据
##目的:
1.编写上位机(MFC)
2.想把串口接收到的多个传感器的数据分别在不同的编辑框输出
解决方案:
1.发送过来的数据打包(必须)
*详情可以百度&谷歌
2.MFC串口控件缓冲区必须设定一个数值(触发OnComm函数)
*关键代码如下:
m_ctrlComm.SetSettings("115200,n,8,1");//打开软件时端口设置默认为波特率9115200,无校验位,8位数据,1位停止位
m_ctrlComm.SetInputMode(1);
//1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(12);
//参数12表示每当串口接收缓冲区中有12个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(12);//设置当前接收区数据长度为12
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
注:我这里设置的是 12 ,是和我发过来的数据包的字节大小是一直的。
3.直接上我的OnComm() 函数:
int o;
void CSmart_ZIGBEE_FLYDlg::OnComm()
{
VARIANT variant_inp;//定义一个VARIANT类对象
COleSafeArray safearray_inp;//定义一个COleSafeArray对象
LONG len,k;
o++;
BYTE rxdata[1024]; //设置BYTE数组 AN 8—intterthat is not signed.
CString strtemp;
//每次清屏
if(o>30) //定量清除 编辑框数据
{
m_strRXData = _T("");
m_strRXData2= _T("");
m_strRXData3 = _T("");
m_strRXData4= _T("");
m_strRXData5 = _T("");
o=0;
}
if (m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有数据
{
//OnSave();
///以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput();//读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //读取到的缓存区数据的长度 //得到有效数据长度
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
}
int h;
for(k=0;k<1;k++)//将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容
strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放
//备注:我一共有四个终端同时向协调器发送数据,
//每个终端的数据都进行了打包,然后设置一个标志位
//通过判别标志位,来进行调用不同的 编辑框进行输出
if(strtemp =='#')//温度
{
h=0;
//continue;
}
else
if (strtemp =='@')//光强
{
h=1;
//continue;
}
else
if (strtemp =='*')//湿度
{
h=2;
//continue;
}
else
if (strtemp =='$')// co2二氧化碳
{
h=3;
//continue;
}
else
if(strtemp =='&')// 烟雾
{
h=4;
//continue;
}
switch(h)
{
case 0:
{
for(k=1;k<len;k++)//将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容
strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放
m_strRXData+=strtemp;
}OnSave();//这是我数据保存函数(也是保存到不同的文本的)
break;
}
case 1:
{
for(k=1;k<len;k++)//将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容
strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放
m_strRXData2+=strtemp;
} OnSave_1();
break;
}
case 2:
{
for(k=1;k<len;k++)//将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容
strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放
m_strRXData3+=strtemp;
} OnSave2();
break;
}
case 3:
{
for(k=1;k<len;k++)//将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容
strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放
m_strRXData4+=strtemp;
}OnSave3();
break;
}
case 4:
{
for(k=1;k<len;k++)//将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型首先取得(rxdata+k),它是一个BYTE型的指针,
//然后强制转换为char型,然后逆向引用求出其中的内容
strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放
m_strRXData5+=strtemp;
} OnSave4();
break;
}
}
}
}
UpdateData(FALSE);//更新编辑框内容(主要是接收编辑框中的
}
这样就可以实现多个编辑框输出了
图示:
【C++ MFC开发】串口通信之多个编辑框输出相关推荐
- 基于VC++开发串口通信的方法
串行通信中的关键是串行通信设备的初始化.数据的发送和接收及其实现方式. 在Dos环境下,用户可以直接对通信设备编程,可以通过查询中断的方式使用通信设备.但是Windows不提倡应用程序直接控制硬件,而 ...
- 【转载】MFC实现串口通信编程nbsp;-nbsp;yu…
MFC实现串口通信编程 vc++.c#专题 2009-10-08 22:32 在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题.计算机和单片机(如MCS-51)都具 ...
- C#上位机开发串口通信编程——倒计时器开发
C#上位机开发串口通信编程--倒计时器开发 一.介绍 这是我按照B站上的一个上位机开发视频教程开发的倒计时器开发,本来只有开始计时功能,没有停止计时功能,停止计时功能后面我自己添加了. 视频网址:C# ...
- 用VC开发串口通信dll控件
VC串口通信技术网<VC串口上位机编程方法简介>介绍了串口编程的常见方法,其中就有使用串口dll控件的方法,dll是一种动态链接库,使用起来非常方便. 本文利用VC编程工具,对Window ...
- MFC COM 串口通信
最近最单片机时需要用RS232串口通信,PC端用MFC开发,现记录下关键代码,便于自己以后学习 PC端程序 步骤: 打开MFC,新建对话框工程 在窗体上右键插入ACTIVEX,选择Microsoft ...
- 嵌入式开发—串口通信
文章目录 1 概述 1.1 串口通信是什么 1.2 波特率 1.3 串口通信的用途 2 串口收发 2.1 波特率发生器 2.2 收发FIFO 2.3 DMA 3 串口收发程序设计 3.1 串口发送数据 ...
- C#上位机开发串口通信
一.创建一个Winform窗体,制作一个5s定时器 using System; using System.Windows.Forms;namespace 计时器 {public partial cla ...
- linux下QT开发串口通信助手
串口通信的应用十分广泛,所以在QT下编写一个串口通信程序就显得尤为重要.下面将一步一步叙述开发过程: 1.下载第三方QT串口类,免积分 http://download.csdn.net/detail/ ...
- python开发串口通信界面_python串口编程实例
Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其 ...
最新文章
- 【每日一算法】二叉树的最大深度
- Grails 1.2参考文档速读(15):验证
- MXNet学习:试用卷积-训练CIFAR-10数据集
- vue2.0路由之编程式导航
- 这几个技巧让你做出让导师眼前一亮的答辩 PPT
- 【Java多线程编程】选号程序
- MySQL高级 - 应用优化
- Hive更换TEZ引擎
- Binary Search二分法搜索C++程序
- Java线程池 / Executor / Callable / Future
- php pop3,php使用smtp,pop3协议收发邮件代码
- 范型编程系列二(非原创)
- 矩阵转置相关公式_线性代数入门——矩阵的转置运算及对称矩阵的概念
- java实现打字母小游戏
- VUE打印 每页顶部添加一个二维码
- LY系列之约会大作战 (10分)
- 关于left与offsetLeft的区别
- ECG分析:基于深度学习的ECG心律失常分类入门(2)
- 解决海信智能电视不能安装U盘上的安装包的问题
- 写了一个网站:12小时福利区
热门文章
- Java计算两个时间的小时差
- python股票交易编程最好的书_向大家介绍我的新书:《基于股票大数据分析的Python入门实战》...
- POJ1845 Sumdiv 递归
- 软件工程工程伦理案例分析_案例工具及其范围| 软件工程
- [从零学习汇编语言] - BX寄存器与loop指令
- 【csdn涨粉秘籍】亲身体验从一年才涨80粉到20天涨粉800多,规则内设置,一个步骤助你快速涨粉
- Three.js 实时更新几何体的方法
- 学富五车的你,敢迎战Python开发的成语接龙游戏吗?
- Tranformer模型与Softmax函数
- 问渠那得清如许,唯有源头活水来