您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 基于vs2010-mfc简易串口数据波形显示软件(入门篇)
基于vs2010-mfc简易串口数据波形显示软件(入门篇)软件版本vs2010旗舰版文件—新建—项目选择基本对话框语言—美国英语,若选择中国汉语,可能这版本没破解好,会有些问题。后面就一直下一步,直到完成。在右边工具箱中,添加下面需要用到的控件。如下图右击类向导---项目com类名CcomDlg。点击成员变量,分别给他们添加变量名。添加完如下图:添加串口控件。右击插入Active控件(X),找到如下确定。界面出现串口控件(小电话一样的东东)点击串口控件(小电话)右键添加变量,输入变量名m_mscomm,同时下方出现mscomm1.h和mscomm1.cpp,点击确定,坐标目录生成该两个文件点击菜单栏工具---选择工具箱项(X)--点击COM组件,浏览找到TeeChart8.ocx,可由网上下载。然后添加如下之后再工具箱中最下面便可看到该控件接下来拉出图形界面。进入类向导,点击右上角添加类(C)—类型库中的MFC类(T)…添加这5个类这里有很多这里有很多这里有很多在comDlg.cpp文件中添加头文件#includeCTChart.h#includeCAxis.h#includeCAxes.h#includeCScroll.h#includeCSeries.h双击teechart,添加曲线Add这里模板很丰富,这里我们选择FastLine标题命名、初值点设置Data中、左轴底轴显示设置在Axis中,以及其他功能到此,基本框架已经搭好了后面添加程序双击打开串口按钮添加代码如下:voidCcomDlg::OnBnClickedButtonOpen(){//TODO:在此添加控件通知处理程序代码if(!m_mscomm.get_PortOpen()){m_mscomm.put_PortOpen(true);SetDlgItemText(IDC_BUTTON_OPEN,_T(关闭串口));AfxMessageBox(_T(串口打开成功));}else{m_mscomm.put_PortOpen(FALSE);SetDlgItemText(IDC_BUTTON_OPEN,_T(打开串口));}}双击发送按钮。添加代码如下:voidCCommTestDlg::OnBnClickedButtonSend(){//TODO:在此添加控件通知处理程序代码UpdateData(true);//读取编辑框内容m_mscomm.put_Output(COleVariant(m_EditSend));//发送数据UpdateData(false);//更新编辑框内容}双击清除接收区按键。添加代码:voidCCommTestDlg::OnBnClickedButtonClear(){//TODO:在此添加控件通知处理程序代码m_EditReceive.Empty();//清除接收对话框中的数据UpdateData(FALSE);}双击串口combobox框,添加代码如下:voidCcomDlg::OnCbnSelchangeComboCom(){//TODO:在此添加控件通知处理程序代码if(m_mscomm.get_PortOpen()){m_mscomm.put_PortOpen(FALSE);}m_mscomm.put_CommPort(m_comsel.GetCurSel()+1);UpdateData(FALSE);//更新编辑框内容}双击波特率combobox框添加代码如下voidCcomDlg::OnCbnSelchangeComboBandrate(){//TODO:在此添加控件通知处理程序代码CStringtemp;inti=m_bandratesel.GetCurSel();intspeed;switch(i){case0:speed=2400;break;case1:speed=4800;break;case2:speed=9600;break;case3:speed=19200;break;case4:speed=38400;break;}temp.Format(_T(%d,n,8,1),speed);m_mscomm.put_Settings(temp);}右击串口控件,刚才那“电话“一样的东西—添加消息处理函数添加编辑----生成串口消息处理函数,添加代码//注意:这里只做了简单处理,接收区只是16进制代码voidCcomDlg::OnCommMscomm1(){//TODO:在此处添加消息处理程序代码VARIANTvariant_inp;doublechartdata;COleSafeArraysafearray_inp;longlen,k;byterxdata[1024];//设置BYTE数组CStringstrtemp;if(m_mscomm.get_CommEvent()==2)//值为2表示接收缓冲区内有字符{variant_inp=m_mscomm.get_Input();//读缓冲区消息safearray_inp=variant_inp;///变量转换len=safearray_inp.GetOneDimSize();//得到有效的数据长度for(k=0;klen;k++){safearray_inp.GetElement(&k,rxdata+k);}for(k=0;klen;k++)//将数组转换为CString型变量{strtemp.Format(_T(%x),*(rxdata+k));//数据之间增加1或2个空格m_EditReceive+=strtemp;chartdata=_ttof(strtemp);CSeries(m_chart.Series(0)).Add(chartdata,_T(),1);CAxeschartaxis=(CAxes)m_chart.get_Axis();CAxischartaxisbottom=(CAxis)chartaxis.get_Bottom();chartaxisbottom.Scroll(1,TRUE);}}UpdateData(FALSE);//更新编辑框内容}在comDlg.cpp文件中注释点下面一行在comDlg.cpp文件的BOOLCcomDlg::OnInitDialog()中添加初始化代码m_mscomm.put_CommPort(1);//选择COM1m_mscomm.put_Settings(_T(9600,n,8,1));//波特率9600无检验位,8个数据位,1个停止位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个停止位//chart初值随意CSeries(m_chart.Series(0)).Add(68,_T(),1);编译发现出错无法打开预编译头文件:“Debug\opencv.pch”:Nosuchfileordirectory解决方法stdafx.cpp右键——属性,预编译头选“创建(Y/c)”.点击应用—确定再次编译(Crl+F7)点击调试运行为了调试是否成功,这里连接了一个stm32开发板验证。Stm32串口接收程序中,每次中断分别循环发送十六进制373539’a’调试助手中接收37353961OK,到此结束,一个简易的串口接收数据的上位机显示软件便完成,可以在此基础上修改自己所需要的形式!ByDragonF2014/8/15
本文标题:基于vs2010-mfc简易串口数据波形显示软件(入门篇)
链接地址:https://www.777doc.com/doc-4699033 .html