串口温度数据采集并实时显示

上传人:桂梅 文档编号:167904223 上传时间:2022-11-06 格式:DOCX 页数:12 大小:78.54KB
收藏 版权申诉 举报 下载
串口温度数据采集并实时显示_第1页
第1页 / 共12页
串口温度数据采集并实时显示_第2页
第2页 / 共12页
串口温度数据采集并实时显示_第3页
第3页 / 共12页
资源描述:

《串口温度数据采集并实时显示》由会员分享,可在线阅读,更多相关《串口温度数据采集并实时显示(12页珍藏版)》请在装配图网上搜索。

1、请输入学校名称请输入专业论文毕业论文串口温度数据采集并实时显示(上位机部分)姓 名:请输入作者学 号:请输入学号指导教师:请输入指导教师2013年4月17日一、原理读串口数据的原理是,只要当有数据向串口发数据来时,计算机就 会自动将其数据写到一个特定的缓冲区,我们只要写程序去读那个特 定的缓冲区就可以了.有数据向串口发过来时,程序可以将数据接收到,接收的数据是字 符型的,那么将数据转化为数字型的,再将这个数据的大小作为画图的 某一个点的纵坐标,横坐标为数据的序号将这些点用线连起来就是一 个曲线图了,这个就是图形显示基本原理.查看原来的数据的原理也是这样的,不同的地方就是擞据是从文 件中来,同样

2、的也是将多个数据分成一个一个的,然后这一个数据的大 小就是画图的某一个点的纵坐标,横坐标同样为数据的序号,再将这些 点用线连起来就是曲线图.图形能移动的原理,是我们首先改变的只是数据,图形并没有变, 但图形的形式是由这些数据来确定的,当数据发生变化后,我们通过刷 新显示区来变化的.、程序流程三、串口程序设计IIIIIIIIIIIIII/文件 commDlg.cpp/一个类,对话框类,本程序使用的是对话框形式,这个类是在VC用MFC自动生 成的,其中包括了对话框程序应有的一些方法class CAboutDlg : public CDialog;I*以下的个方法也是VC的MFC的对话框程序固有的,

3、也 是MFC自动生成的*/CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX)BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CCommDlg:CCommDlg(CWnd*pParent/*=NULL*/):CDialog(CCommDlg:IDD, pParent)void CCommDlg:DoDataExchange(CDataExchange* pDX)/下面这个包括的是界面中的组件BEGI

4、N_MESSAGE_MAP(CCommDlg, CDialog)END_MESSAGE_MAP() CCommDlg message handlersBOOL CCommDlg:OnInitDialogOvoid CCommDlg:OnSysCommand(UINT nID, LPARAM lParam) The system calls this to obtain the cursor to display while the user drags the minimized window.HCURSOR CCommDlg:OnQueryDragIcon()BEGIN_EVENTSINK_

5、MAP(CCommDlg, CDialog)END_EVENTSINK_MAP()/*以上的个方法也是VC的MFC的对话框程序固有的,也 是MFC自动生成的*/*我在做这个程序时以上的程序并没有手动修改gMA AM MA AM MA AM MA AM MA AM MA AM MA AM MA AM MA AM MA AM MA AM MA AM MA AM MA AM MA AM MA g/画图函数/算法:运用LineTo函数把120个点连成折线 void CCommDlg:OnPaint()/对串口数据的处理,包括接收,保存等void CCommDlg:OnComm()开串口程序void C

6、CommDlg:OnButton1()/清除编辑框内容程序void CCommDlg:OnButton2()选择那一个串口程序void CCommDlg:OnComselect()选择波特率void CCommDlg:OnComspeed()停止/继续程序void CCommDlg:OnStoprecv()/对数据显示前的处理:将新数年据加到左边,原来的右移一位void CCommDlg:Display()以下四个函数是查看原来数据的程序/按钮程序void CCommDlg:OnButton4()/按钮程序void CCommDlg:OnButton5()/按钮 程序void CCommDlg

7、:OnButton7()此函数用来查看最后一屏数据 void CCommDlg:OnButton8() 对于其它的文件中的程序我没有手动修改,均为MFC自动生成,我在这就不作详 细介绍了.共有4个程序文件,5个头文件comm.cppcommDlg.cppmscomm.cppStdAfx.cppcomm.hcommDlg.hmscomm.hResource.hStdAfs.hI源码爱好者|III提供源码发布与下载IIIIIIII互助、分享、提高I田远驰 tyc163 .com四、数据采集实时显示程序设计1、串口控件使用说明本程序使用VC6.0的通用串口控件MSCOMM32.OCX来对发送到串口的

8、数据 进行采集处理。主要使用方法串口设置:m_CommSetSettings(“波特率,校验方式,数据位数,停止位数”) 取串口数据:m_Comm.GetInput()你只首先要确定一个mscomm32.ocx控件在system目录下并且该控件已经被 windows注册,本程序才能正常运行。2、串口数据的获取if(m_Comm.GetCommEvent()=2)判断接收缓冲区内有无数据 m_input1=m_CommGetInput();/读取缓冲区内的数据m_input2GetOneDimSize();/确定数据长度 m_input2.GetElement(&i,data+i);/将数据转换

9、为 BYTE 型数组由于直接获取的数据为VARIANT型数据,我们再通过数据类型转换来变为我 们所要的数据类型INT和CString型。3、整数位与小数位的处理为了提高精度,对数据采用两位整数,一位小数年的方式,在发送数据时,最 前一个字节为FF起始位,接着的一个字节为整数部分,再接着发一个字节的数 据为小数部分。取数算法如下:BYTE a=* (char *)(data+i)BYTE b=* (char *)(data+(+i)float c=(float)a+(float)(b%10)/104、画图原理我画图使用的是画直线的方式(LineTo(),先定义一个全局变量用来保存采集 的数据值,

10、在画图函数OnPaintO中用这个全局变量来作为纵坐标,等分的120 个点作为横坐标,那么就有120个点,最后用直线将这120个点连接起来就组 成了一个完整的曲线图。只要当全局变量中的数值发生变化后就使用函数 this-Invalidate()强制重载 OnPaint()函数,那么数据图就可以动起来了。 OnPaint()画图函数如下:void CCommDlg:Display()if (NextTime = 600 & stop=FALSE)LineHightNextTime/5 = LineHight121; 中保存的是最新采集的一个tr-数据elsefor (int i=0;iInval

11、idate();return;5、查看以前的数据查看以前的数据的方法是,将数据从文件中取出并将每一个数据都付给那一个 全局变量,最后同样用this-Invalidate()就能显示以前的数据了。具体算法见 commDlg.cpp文件中的OnButton4()和 OnButton5()函数。按秒移动査看以前数 据算法见 OnButton6()和 OnButton7()。void CCommDlg:OnButton7()if (stop=FALSE)gogo=NextTime;DTemp=m_ReceiveData;for (int i =0;iv12O;i+) LHTempi=LineHight

12、i;stop=TRUE;/关闭接收数据,使显示区和数据区用来为显示原来数据用if (NextTime=0) NextTime=595;NextTime=NextTime-595;SetDlgttemText(IDC_STOPRECV继续显示);先取出文件中的数据,放入一个数组中CStdioFile file;if(file.Open(FilePath9CFile:modeRead)CString str;CString instr;CString outstr;CString sss;int i;while(fileReadString(str)逐行査询,至到文件尾instr+=str;if

13、(instr.GetLength()=600 & NextTimeinstr.GetLength()-600) NextTime=instr.GetLength()-600;for (i=0;iv120;i+)/T取出起点后的120个数据sss=instrNextTime; sss+=instrNextTime+1; outstr+=sss+instrNextTime+2+instrNextTime+3+; LineHighti=atoi(sss);NextTime=NextTime+5;m_ReceiveData=outstr;UpdateData(FALSE);/更新编辑框内容 this-

14、Invalidate();/更 新图相在移动数据以前要对当前显示的数据进行保存:gogo=NextTime;DTemp=m_ReceiveData;for (int i =0;i120;i+) LHTempi=LineHighti;以便在继续接收时能接着原来的。6、数据保存方式对采集的数据采用文本方式保存于一文件中,保存格式为,第120数据保存一次,数据采用推算法来确定时间。如:08.9 33.5 08.8 65.4 09.8 09.3程序算法为:if (file.Open(FilePath,CFile:modeCreate|CFile:modeReadWrite) fileWrite(m_R

15、eceiveDataj600);/写入 120 个数据 file.Close();完整算法见:OnComm()7、通用性为了提高程序的通用性,串口的波特率,串口号都采用下拉选择的方式,在使 用中可跟据情况选择。III提供源码发布与下载IIIIIIII互助、分享、提高I田远驰t.yc163 .com五、说明:你只需要确定一个 mscomm32.ocx控件在system目录下并且该控件已经被 windows 注册。方法:将 mscomm32.ocx copy 到 C:winntsystem32 目录下运行:regsvr32 mscomm32.ocxI源码爱好者IIII提供源码发布与下载IIIIIIII互助、分享、提高I

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!