基于单片机的一氧化碳检测仪的设计说明_第1页
基于单片机的一氧化碳检测仪的设计说明_第2页
基于单片机的一氧化碳检测仪的设计说明_第3页
基于单片机的一氧化碳检测仪的设计说明_第4页
基于单片机的一氧化碳检测仪的设计说明_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/Q才4才2011届毕业设计论文题目:学院:专业:班级:基于单片机的一氧化碳检测仪的设计上位机软件部分浦江学院通信工程浦通信0703志贤指导2011-3-12011-6-14起讫时间:二0一年六月基于单片机的一氧化碳检测仪的设计上位机软件部分摘要一氧化碳检测仪是一款用于检测室以及工作场所中一氧化碳浓度并且具有超限报警功能的仪器,对人们的生活和工作安全有很好的保障作用。因此,一氧化碳检测仪具有较高的研究价值和使用价值。本文主要介绍了上位机软件的设计容:串口通信、数据打点显示以及数据的存储功能。通过RS232用口接收单片机发送过来的一氧化碳浓度数据,在PC机上以直观图形的方式显示数据并且将其存储起

2、来以方便随时可以调用查看。本次设计成功的完成了上位机软件部分的制作,能够准确的接收单片机传输的数据并且很好的显示以及储存查看。关键词:一氧化碳检测仪数据处理串口通信TheDesignofcarbonmonoxidedetectorbasedonmicrocontrollerAbstractCarbonmonoxidedetectorisusedtodetectaparagraphofindoorandworkplacecarbonmonoxideconcentrationsandhastheoff-gaugealarmfunctioninstrument,forpeopleslifeandwo

3、rksafetyisverygoodsecurityrole.So,Carbonmonoxidedetectorhashighresearchvalueandusevalue.ThispapermainlyintroducesthePCsoftwaredesigncontent:Dataprocessing、DatadisplaythroughdotandDatastoragefunction.ThroughRS232serialreceivesthedataofmonoxideconcentrationssentovermicrocontroller,OnPCwithintuitivegra

4、phicdisplaydataandstoreitupwithconvenientcanalwayscalltocheck.ThisdesignsuccessfulcompletionofthePCsoftwarepartoftheproduction,thedataofSCMtransmissioncanbeaccuratereceivedandverygoodshowandstorageandexamine.KeyWords:Carbonmonoxidedetector;Dataprocessing;Serialcommunication摘要IAbstractII TOC o 1-5 h

5、z HYPERLINK l bookmark12 o Current Document 第一章绪论1 HYPERLINK l bookmark14 o Current Document 一氧化碳的危害1 HYPERLINK l bookmark16 o Current Document 一氧化碳检测仪的研究现状1基于单片机的分类的一氧化碳检测仪1基于传感器分类的一氧化碳检测仪2 HYPERLINK l bookmark18 o Current Document 多机串行通信研究现状3论文章节介绍3 HYPERLINK l bookmark22 o Current Document 第二章上位机

6、软件的设计4 HYPERLINK l bookmark24 o Current Document 上位机软件整体设计框架4 HYPERLINK l bookmark26 o Current Document 串口通信模块的设计4RS-232串口4VC6.0介绍6串行通讯的方法7MSComnt空件的介绍8串口设计流程9整数和小数位的处理13 HYPERLINK l bookmark28 o Current Document 数据直观图显示模块14基本的画线函数14CO数据图形化显示15 HYPERLINK l bookmark30 o Current Document 数据的存储以及查看模块17

7、类CFile17CFile操作详解19数据的保存方式21查看之前存储的数据21 HYPERLINK l bookmark37 o Current Document 程序显示界面模块23对话框概述23类CDialog介绍23对话框控件24对话框控件程序设计26串口采集数据实时显示窗口28 HYPERLINK l bookmark39 o Current Document 第三章系统调试和运行29测试工具介绍29 HYPERLINK l bookmark43 o Current Document 系统调试和运行29测试方法29系统联调29系统运行30 HYPERLINK l bookmark45

8、o Current Document 第四章总结和展望31 HYPERLINK l bookmark47 o Current Document 本次毕业设计总结31 HYPERLINK l bookmark49 o Current Document 下一步工作展望32参考文献33致35第一章绪论一氧化碳的危害一氧化碳是石油化工行业以及日常生活中常见的危害因素,分布围广,接触人员多,毒性危害高。尤其是随着煤气化工业的发展,人员遭受一氧化碳危害影响的可能性增大。一氧化碳是无色、无味的气体,易扩散,微溶于水。易燃、易爆,与空气混合有爆炸的危险1。一氧化碳使血液携氧能力下降,阻碍氧的释放和传递,导致低

9、氧血症和组织缺氧。由于中枢神经系统对缺氧最敏感,故最易受到侵害。石化及煤矿等工作场所空气中时间加权平均容许溶度PC-TWA不超过25ppm,短时间接触容许浓度PC-STEL不超过35Ppm立即威胁生命或健康的浓度IDLH为1000Ppm一氧化碳检测仪的研究现状目前市场上的一氧化碳检测仪多种多样,由于所用单片机的种类和传感器的种类不同可以分为多类。基于单片机的分类的一氧化碳检测仪基于MSP430勺一氧化碳检测仪MSP43W片机拥有强大的处理能力,在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处,具有低功耗的特点。根据传感器的不同,可以选择不同的传感器。这种检测仪的单片机置温度传感器、

10、12位高精度A/D转换器、16X6位硬件乘法器,并有6个8位I/O端口可以使用。仪器的大部分功能均可以在MSP430片机中实现,大大简化了系统的接口设计,也减少了仪器原件的数量和功耗2。2讣于STC89C52勺一氧化碳检测仪STC89C5整一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS的微处理器,与MCS-51指令集和输出管脚相兼容。STC89g列单片机高速最高时钟频率90MHz,低功耗,带有4KB的存和程序保护系统,便于程序白修改和30基于传感器分类的一氧化碳检测仪电化学传感器采用了多孔性电极进行一氧化碳浓度的检测,有效地防止了溶解液的泄漏。该传感器具有反应时间短、探测围宽

11、以及使用寿命长的特点,完全满足工业现场及家庭生活的需要。红外气体传感器采用电调制非分光红外传感器LHI814,能够快速准确的检测一氧化碳的浓度。采用间歇式供电方式,单片机在读取传感器输出的稳定数据后,立即关闭其电源,待下次读取数据时再将电源打开。热催化传感器其具有抗高湿、粉尘等恶劣环境的能力及体积小、价格低的优点,在煤矿瓦斯的检测中发挥了巨大的作用。但由于该传感器的敏感原件和补偿原件本身是热敏原件,其电阻会随着环境条件和工作条件的改变而变化,多种可热性气体都能催化氧化燃烧,导致检测精度下降。半导体传感器以半导体敏感原件为核心的半导体传感器,具有灵敏度高、响应速度快、结构简单、体积小、重量轻、成

12、本低、便于集成化和智能化的优点,但是由于特性的分散性、温度的不稳定性和易受干扰的特点,在某些情况下又限制了半导体传感器的应用。半导体传感器是一种将检测到的气体成分和浓度转换为电信号的传感器,根据这些电信号的强弱就可以4获得与待测气体在环境中有关的信息,从而可以检测、监控、报警,还可以通过接口电路与计算机或单片机组成自动检测、控制和报警系统。多机串行通信研究现状随着多微机系统的应用和微机网络的发展,通信功能越来越显得重要。这里所说的通信既包括计算机与外部设备之间,也包括计算机和计算机之间的信息交换。由于串行通信是把组成信息的各个码位在同一根传输线上,从低位到高位,逐位地、顺序地进行传送的通信方式

13、,所用的传输线少,一个方向上只须一条传输线,并且可以借助现成的网进行信息传送,因此,特别适合于远距离传送。对于那些与计算机相距不远的人-机交互设备和串行外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式进行近距离交换数据也很普遍。在实时控制和管理方面,采用多台微处理机组成分级分布控制系统中,各CPS1间的通信一般都是串行方式。所以串行接口是微机应用系统常用的接口。论文章节介绍本文主要介绍基于单片机的一氧化碳检测仪的上位机软件部分。全文分四个章节,第一章绪论部分主要介绍一氧化碳检测仪的背景知识及研究现状以及多机串行通信的研究现状。第二章主要介绍上位机软件的设计。第三章是调试结果的展示。最后

14、一章是对本次设计的一个总结和展望。第二章上位机软件的设计上位机软件整体设计框架程序整体设计框架如图2-1所示。发送至I审口来的M化碳浓度数据选择接收数据的方式查看以前的数据接收数据打开存储的数据文件按方式查询据分析显示图2-1上位机软件设计框架计算机接通过RS-232用口接收到单片机发送过来的一氧化碳的浓度数据,将接收到的一氧化碳浓度数据以打点画图的形式在PC机上显示,并且将数据存储到文本文档中,在程序界面上,可以按秒移动和按页移动查看以前接收到的一氧化碳浓度数据。整体设计分为四个模块:串口通信模块数据直观图显示模块、数据的存储和查看模块以及程序显示窗口模块。下面将对各个模块的设计过程进行详细

15、说明。串口通信模块的设计RS-232串口RS-232串口是目前PC机与通信工业中应用最广泛的一种用行接口。RS-232被定义为一种低速率串行通讯中增加通讯距离的单端标准。RS-232采取不平衡传输方式,即所谓单端通讯。RS-232标准协议的全称是EIA-RS232C标准,其中EIAElectronicIndustryAssociation代表没过电子工业协会,RSRecommendedtandard代表推荐标准,232是标识号,C代表RS-232的最新一次修改1969,在这之前,有RS-232-B、RS-232-A。它规定连接电缆和器械、电气特性、信号功能及传输过程。常用的物理标准还有EIAR

16、S-232-C、EIARS-422-A、EIARS-423-A、EIARS-485计算机输入输出接口,是最为常见的串行接口,RS-232常规标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,常用的只有9根,常用于与25-pinD-sub端口一同使用,其最大传输速率为20kbps,线缆最长为15米。RS-232-C端口被用于将计算机信号输入控制投影机。典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5+15V,负电平在-5-15V电平。当无数据传输时,线上为TTL,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TT

17、L电平。接收器典型的工作电平在+3+12V与-3-12V0由于发送电平与接收电平的差仅为2V至3V左右,所以其共模才制能力差,再加上双绞线上的分布电容,其传送距离最大约为15米,最高速率为20kb/s。RS-232是为点对点即只用一对收、发设备通讯而设计的,其驱动器负载为37kQ0所以RS-232适合本地设备之间的通信。5其管脚图及管脚定义分别如图2-1和表2-1所示CD1:)RXI)DIKSG图2-1RS-232管脚接口表2-1RS-232管脚定义9芯仔号方向来自缩写描述1调制解调器CD载波检测2调制解调器RXD接收数据3PCTXD数据输出线4PCDTR告知数据终端处于待命状态5GNDSG机

18、器的接地线6调制解调器DSR告知本机在待命状态7PCRTS要求发送数据8调制解调器CTS回应对方发送的RTS的发行许可,告知对方可以发送。9调制解调器RI响铃指示器2.2.2VC6.0介绍VC+6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C+言的要求编写,并加入微软提供的强大的MFCMicrosoftFoundationClass类库。MFCt封装了大部分WindowsAPI函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MF8仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,

19、这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时问。另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。因此,使用VC+供的高度可视化的应用程序开发工具和MFCCfe库,可使应用程序开发变得简单串行通讯的方法同步通信通信双方必须先建立起同步,即双方的时钟必须要调整到同一个频率。收发双方不停地发送和接收连续的同步比特流。但这时还有两种不同的同步方式。一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步。另一种是使用准同步,各结点之间的时钟允许有微小的误差,然后使用其他措施实现同步传输。6异步通信

20、异步通信在发送字符时所发的字符之间的时间间隔可以是任意的。当然,接收端必须时刻做好接收的准备。发送端可以在任何时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。异步通信的好处是通信设备简单,便宜,但是传输效率较低因为开始位和停止位的开销所占的比例较大。6比较起来,在传输速率相同的情况下,同步通信方式的信息传输有效率要比异步的高。但是同步由于在信息传输的过程中要求双方必须使用同一个时钟,而异步方式却不一定要求完全一致,只要比较相近即可。因此在串口通信中,比较多的采用异步通信。串口通信最重要的参数是波特率、数据位、停

21、止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配:a、波特率:这是一个衡量通信速度的参数,它表示每秒钟传送bit的个数,例如300波特表示每秒钟发送300个bit。当提到时钟周期时,就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz这意味着串口通信在数据线上的采样率为4800Hz通常线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比,高波特率常常用于放置的很近的仪器之间的通信,典型的例子就是GPIB设备的通信。b、数据位:这是衡量通信中实际数据为的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。

22、如何设置取决于想传送的信息。比如,标准的ASCII码是0127。扩展的ASCII码是02558位。如果数据使用简单的文本标准的ASCII码,那么每个数据包使用7位数据,每个包指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语包指任何通信的情况。c、停止位:用于表示每个包的最后一位,典型的是1、1.5和2位,由于数据是在传输线上定时的,并且每一个设备都有自己的时钟,很有可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅表示传输的结束,并且提供计算机校正时间同步的机会。适用于停止位的位数越多,不同时钟同步的容忍度越大,但是数据传输率同时也越慢。d、奇

23、偶校验位:在申口通信中一种简单的校错方式。有四种校错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位数据位后面的一位,用一个只确保传输的数据有偶个或奇个逻辑高位,例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验数为1,这样就有3个逻辑高位。高位和低位不真正的校验数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。6MSComr件的介绍MSCom通信控件的工作原理类似于中断方式,每当有通信事件发生,均会触发OnComm事件发生

24、。MSComm主要属性如下:(1)Commport端口号;(2)InBufferSize输入缓冲区大小;(3)InputLen从接收缓冲区读取的字节数,如果为0则全部读取;(4)InputMode接收数据的类型,0表示文本类型,1表示二进制类型;(5)OutBufferSize输出缓冲区大小;(6)RThreshold设定当接收几个字符时触发OnCom靠件,0表示不产生事件,1表示每接收一个字符产生一个事件;(7)SThreshold设定在触发OnComm件前,发送缓冲区送允许的最小字符数,0表示发送数据时不产生事件,1表示当发送缓冲区空时产生OnCom靠件;(8)Settings串口的参数设

25、置,依次为波特率、奇偶校验、数据位数、停止位数。6用口设计流程建立应用工程打开VisualC+,建立一个基于对话框的MF(B用程序,在对话框中添加控件,用ClassWizard为相应控件设置属性及添加变量如表2-2所示。表2-2控件机器属性设置情况控件控件IDCaption需要添加的变量及变量类型静态文本IDC_STATIC接收显示静态文本IDC_STATIC发送输出编辑框IDC_ED-IT_RXDATAm_strEditRXDataValuaCString编辑框IDC_ED-IT_TXDATAm_strEditRXDataValuaCString按钮IDC_BUTTON_MANALSEND发

26、送MSComm件IDC_MSComm1m_ctrlCommcontrol在当前工程中添加MSComm件点击菜单AddToProjectComponentsandControls,在打开的对话框中选择RegisteredActiveXControls,再双击此项出现控件选择对话框ComponentandControlsGallery,在该框中选择MicrosoftCommunicationscontrol,version6.0控件,再单击Insert按钮,提示Insertthiscomponent?,确认后,可以看到加入CMSComm类的ConfirmClass对话框,提示加入到当前工程中的CM

27、SComm头文件为MSComm.l现文件为MSComm.cpp单击OK按钮关闭ConfirmClass对话框,在关闭对话框,则在VC集成环境中,当前工程ClassView中就出现了CMSComm,同时在对话框资源空间中出现了一个机形状的控件,就是MSComm件7。初始化串口通过前面的操作,ClassWizard自动在SCommTestDlg.h中加入了includemscommh语句。串口初始化流程如图2-2所示。/AFX_INCLUDESincludemscomm.h/AFX_INCLUDES下面,在SCommTestDl:g:OnInitDialog函数中写入对串口的初始化语句,串口的初始

28、化由IDC_MSCOMM1CMSComm制变量m_ctrlComm来设置串口的控件属性。代码如下:m_comm.SetCommport/打开COM伸口m_comm.SetInBufferSize;/设置输入缓冲区的大小m_comm.SetOutBufferSize;/设置输出缓冲区的大小m_comm.SetInBufferCont;/清空接收缓冲区if!m_comm.GetPortOpenm_comm.SetPortOpen;/打开串口m_comm.SetInPutMode;m_comm.SetSettings;/9600bps波特率,8位数据,1位停止位,无奇偶校验m_comm.SetRTr

29、eshold;/*在MSComm件设置CommEventll性为ComEvRecieive并产生OnComm之前,设置并返回的要接收的字符数*/m_comm.SetSThreshold;/*设置、返回在通信控件置ComEvSen拼激发OnComm1件前要发送缓冲区中的最少字符数*/m_comm.SetInputLen;/*决定每次Input读入的字符个数,缺省为0,表示读取接收反冲去的全部容*/8图2-2串口初始化流程从用口接收数据读用口数据的原理是,只要当有数据向串口发数据来时,计算机就会自动将其数据写到一个特定的缓冲区,我们只要写程序去读那个特定的缓冲区就可以了。具体流程如图2-3所示。串

30、口通信线程函数CommThreadB是CserialPort类的最重要函数。函数原型:staticUINTCommThreadLPVOIDpParam该线程函数将作为工作线程WorkerThread被启动,一旦该线程被激活,它将负责监视串口的接收字符事件、发送字符事件和关闭串口事件,并调度与上述事件相关的处理函数,从而完成对串口的操作。为了防止这三个事件同时对同一个对象用口实例进行操作,它们之间的同步方式采用CriticalSection。这里用到的主要API函数有:WaitCommEventClearCommError、GetCommMaSk10。BYTEComm_Packet_Len;/需

31、要接收到的数据个数BYTEComm_DataBuffer20;/依次存放串口接收到的数据longComm_Packet_Index;/每次收到数据个数,并标志数据应放在全局数组位置的索引/每次处理完数据后清空,为下一次接收做准备void CEOLDlg:OnMscomm VARIANT variant_inp;COleSafeArray safearray_inp;long len=0, k=0;BYTE rxdata204;CString strtemp;int temp = 0;unsigned char ecuchecksum = 0;ifm_ctrlComm.GetCommEvent

32、= 2m=m_Com.GetInBufferCount ;variant_inp = m_ctrlComm.GetInput /safearray_inp = variant_inp;len = safearray_inp.GetOneDimSize,/ 转换为数组时使用的变量/设置BYTE数组/ 字符型变量/ 临时变量/ecu 回传校验码/ 事件值为 2 表示接收缓冲区有字符fork = 0; k safearray_inp.GetElementfortemp = 0; temp Comm_DataBuffer Comm_Packet_Index + temp = rxdata temp C

33、omm_Packet_Index += len ; if 读缓冲区/VARIANT 型变量转换为 ColeSafeArray 型变量 得到有效数据长度/将ColeSafeArray型变量转换为BYTE型数组;转换为BYTE型数组;/ 接收到的数据个数由于直接获取的数据为VARIANT型数据,需要再通过数据类型转换来变为我们所需要的INT和CString型数据。串口接收数据等待接收l-接收数据为0?”A清除错误标记读串口cV读串口成功?,二.否1是*读出0个数据求异域值清空接收返回J1图2-3串口接收数据流程图2.2.6整数和小数位的处理为了提高数据精度,对一氧化碳浓度数据采用两位整数和一位小数

34、的方式显示,在发送数据时,最前一个字节为FF起始位,接着的一个字节为整数部分,再接着发一个字节的数据为小数部分。取数算法如下:BYTEa=*BYTEb=*data+floatc=a+/102.3数据直观图显示模块基本的画线函数1CDC:MoveTo改变当前点的位置;功能:将画笔移到;用法:oidfarmoveto;CDC:MoveTointx,intyCpointMoveToCpointMoveTox:新位置的横坐标y:新位置的纵坐标;point:标识的一个新的位置,以POINT结构或CPoint类对象的形式表示。122CDC:LineTo画一条由当前点到参数指定点的线;功能:函数lineto

35、使用当前绘图色、线型及线宽,从当前位置画一直线到指定位置。用法:此函数调用方式为voidlineto;说明:参数x,y为指定点的坐标,函数调用后,当前位置改变到指定点。该函数对应的头文件为graphics.h;返回值:无。123CDC:BOOLArc画弧线;功能:函数arc使用当前绘图色并以实线画一圆弧。用法:函数调用方式为voidarc,说明:参数x,y为圆心坐标,startangle与endangle分别为起始角与终止角,radius为半径。圆心坐标和半径以像素个数给出,起始角和终止角以度为单位,0度位于右边,90度位于顶部,180度位于左边,底部是270度。同往常一样,360度与0度重合

36、。角度按逆时针方向增加,但并不要求终止角一定比起始角大。例如指定300度和90度分别为起始角和终止角,与指定300度和450度分别为起始角和终止角可画出相同的弧。大于360度可作为参数,它将被化到0度360度围里。函数arc能画封闭圆,只要取起始角为0度,终止角为360度即可。此函数中,屏显纵横比可自动调节。arc函数对应的头文件为graphics.h;返回值:无。124CDC:BOLLPolyline将多条线依次序连接。11功能:将多条线按照次序连接起来;用法:hdcLong,在其中绘图的设备场景IpPoint-POINTAPI,nCountPOINTAPI结构数组中的第一个POINTAPI

37、结构。nCountLong,lpPoint数组中的点数。会从第一个点到第二个点画一条线,依次类推CO数据图形化显示当有数据向串口发过来时,程序可以将数据接收到,接收的数据是字符型的,那么将数据转化为数字型的,再将这个数据的大小作为画图的某一个点的纵坐标,横坐标为数据的序号。将这些点用线连起来就是一个曲线图了,这个就是图形显示基本原理。绘图程序首先通过图形设备接口获取设备环境句柄,只有得到这个句柄,Windows才允许应用程序使用设备;之后调用绘图函数,在函数中僵局并作为一个参数传入,想Windows标明需要使用的设备,并最终完成图形绘制。设备环境使得图形设备接口摆脱了具体设备的限制,以至获得设

38、备环境句柄后,同一个函数可以用来向多种输出设备上绘图。Windows应用程序绘制图形具体步骤如下:取得指定窗口的当前显示设备环境;2)选择用户坐标系及映射方式;设备用户坐标系中的观察窗口和设备坐标系中的显示视区;输出图形;释放所使用的显示设备环境。13画图使用的是画直线的方式LineTo,先定义一个全局变量用来保存采集的数据值,在画图函数OnPaint中用这个全局变量来作为纵坐标,等分120个点作为横坐标,那么就有120个点,最后用直线将这120个点连接起来就组成了一个完整的直观图。只要当全局变量中的数值发生变化后就使用函数this-Invalidate强制重载OnPaint函数,那么数据图就

39、可以动起来了。OnPaint画图函数如下:voidCCommDlg:OnPaint/用于在窗口客户区绘图inthoc;ifNextTimehoc=600;/接收600个字节elsehoc=NextTime;CStringTabStr=;CPaintDCdc;/ 定义画线颜色dc.GetNearestColorRGB;dc.MoveTo;/画笔位置ifNextTimeforinti=0;i;i+/进行连续画点将点连成线dc.LineTo108+,250-LineHighti;/elseforinti=0;i/连续画点/ 将点连成线/ 数组中保存的是最新采集的一组数据dc.LineTo108+,2

40、50-LineHighti,voidCCommDlg:DisplayifNextTimeLineHightNextTime/5=LineHight121elseforinti=0;i依次采集120个以的数据LineHighti=LineHighti+1;/保存最新采集的数据LineHight120=LineHight121;NextTime=NextTime+5;/继续采集数据this-Invalidate;/重载OnPaint函数return;2.4数据的存储以及查看模块类CFileCFile是MFCC件类的基类,它直接提供非缓冲的二进制磁盘输入/输出设备,并直接地通过派生类支持文本文件和存

41、文件。CFile与CArchive类共同使用,支持MFC寸象的串行化。该类与其派生类的层次关系让程序通过多形CFile接口操作所有文件对象。通常,一个磁盘文件在CFile构造时自动打开并在析构时关闭。静态成员函数使你可以在不打开文件的情况下检查文件状态。类CFile直接派生于类CObject,是所有MFCC件类的基类,其继承关系如图2-4所示。类CFile提供了完整的方法操作二进制文件,分别有构造方法、I/O方法、文件定位方法、文件锁定方法、文件状态方法和文件静态操作方法。CObject*CMemFileCCfile*COleStreamFileCSocketFileCStudioFile图2

42、.4文件类的继承关系类CFile的构造函数CFile用于创建文件类对象,函数声明如下:CFile;CFile;CFile;Throw;其中,参数hFile是已打开文件的句柄;参数IpszFileName是表示文件路径的字符串;参数nOpenFlags是共享和访问模式标识,其取值如表2-3所示。13表2-3参数nOpenFlags的取值模式标志说明CFile:modeCreate建立新文件,若文件已存在,是文件长度归零CFile:modeNoTruncate与CFile:modeCreate配合使用,右文件已存在,文件长度小艾CFile:modeRead文件以只读方式打开CFile:modeRe

43、adWrite文件以读写方式打开CFile:modeWrite文件以只写方式打开CFile:modeNoInherit禁止文件被子程序继承CFile:shareDenyNone打开文件,不禁止其他进程对文件的读写访问CFile:shareDenyRead打开文件,禁止其他进程对文件的读访问CFile:shareDenyWrite打开文件,禁止其他进程对文件的写访问CFile:shareExclusive以独占方式打开,禁止其他进程对文件的读写访问CFile:shareCompat此标识在32位MFC中无效,与操作CFile:Open时的标志CFile:shareExclusive配合使用CFi

44、le:typeText设置文本模式,对换行进行特殊处理只用于派生类CFile:typeBinary设置二进制模式只用于派生类构造函数:CFile从一个路径或文件句柄构造一个CFile对象;Abort不管任何警告和错误,关闭一个文件;Duplicate构造一个基于该文件的副本;Open带错误检验选项安全打开一个文件;Close关闭文件,删除对象。输入/输出:Read从文件的当前位置读数据;ReadHuge可从文件的当前位置读取大于64K数据,Write将文件数据写入当前文件位置;WriteHuge可将文件的大于64K数据写到当前文件位置;Flush溢去未被写入的任何数据。文件定位:Seek定位于

45、当前文件指针;SeekToBegin定位当前文件指针到文件开头;SeekToEnd定位当前文件指针到文件尾;GetLength获取文件长度;SetLength改变文件长度。文件封锁方法:LockRange在文件中封锁一定围的字节;UnlockRange解锁一定围的字节。文件状态方法:GetPosition获取当前文件指针;GetStatus获取打开文件的状态;GetFileName获取被选文件的文件名;GetFileTitle获取被选文件的标题;GetFilePath获取被选文件的完整路径;SetFilePath设置被选文件的完整路径。文件静态方法:Rename改名指定文件静态函数;Remov

46、e删除指定文件静态函数;GetStatus获取指定文件的状态静态;SetStatus设置指定文件的状态静态。142.4.2CFile操作详解1.文件的查找当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。文件的打开/保存对话框让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。MFC的类CFileDialog用于实现这种功能。使用CFileDialog声明一个对象时,第一个BOOL参数用于指定文件的打开或保存,当为TRUEM将构造一个文件打开对话框,为FALSE时构造一个文

47、件保存对话框。在构造CFileDialog对象时,如果在参数中指定了OFN_ALLOWMULTISELECT,则在此对话框中可以进行多选操作。此时要重点注意为此CFileDialog对象的m_ofn.lpstrFile分配一块存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的存过小就会导致操作失败。文件的读写文件读写的最普通的方法是直接使用CFile进行,但是它的使用繁琐,而且功能非常简单。可以使用CArchive,它的使用方法简单且功能十分强大。首先还是用CFile声明一个对象,然后用这个对象的指针做参数声明一个CArchive对象,就可以非常方便地存储各种复杂的数据类型了。

48、CArchive的操作符用于简单数据类型的读写,对于CObject派生类的对象的存取要使用ReadObject和WriteObject。使用CArchive的ReadClass和WriteClass还可以进行类的读写。如果要进行的文件操作只是简单的读写整行的字符串,建议使用CStdioFile,用它来进行此类操作非常方便,如下例。CStdioFilemFile;CFileExceptionmExcept;mFile.Open;CStringstring=Iamastring.;mFile.WriteString;mFile.Close;临时文件的使用正规软件经常用到临时文件,经常可以会看到C:

49、WindowsTemp目录下有大量的扩展名为tmp的文件,这些就是程序运行是建立的临时文件。临时文件的使用方法基本与常规文件一样,只是文件名应该调用函数GetTempFileName!得。它的第一个参数是建立此临时文件的路径,第二个参数是建立临时文件名的前缀,第四个参数用于得到建立的临时文件名。得到此临时文件名以后,就可以用它来建立并操作文件了。14文件的复制、删除等MFC中没有提供直接进行这些操作的功能,因而要使用SDKSDK中的文件相关函数常用的有CopyFile、CreateDirectory、DeleteFile、MoveFile。2.4.3数据的保存方式对采集的CO浓度数据采用文本方

50、式保存于一文件中,保存格式为,第120数据保存一次,数据采用推算法来确定时间。如:08.933.508.865.409.809.3其算法如下:/ 将数据保存到文件中if m_ReceiveData.GetLength=600/600CStdioFile readfile,CString readstr, readstr2,ifreadfile.Open/whilereadfile.ReadString/readstr2+=readstr ; readfile.Close;/关闭文件if file. OpenFilePath,CFile:modeCreatefile.Writereadstr2,

51、readstr2.GetLengthfile.Write ;/file.Close; m_ReceiveData= ; break ;2.4.4 查看之前存储的数据120 个数据以只读方式打开文件逐行查询 , 至到文件尾/ 依次查询CFile:modeReadWrite文件以读写方式打开; / 原来的数据写入新的 120 个数据/ 清除编辑框容查看以前的数据的方法是,将数据从文件中取出并将每一个数据都付给那一个全局变量,最后同样用this-Invalidate就能显示以前的数据了。上面给出的是按秒移动查看的程序,其他按、按和按秒移动程序和上面程序操作相似,具体算法见commDl件中的Butto

52、n按查询、Button按查询方式和Button按查询方式。voidCCommDlg:OnButton7/按秒移动查看之前的数据即按方式查看if/继续接收数据gogo=NextTime;DTemp=m_ReceiveData;forinti=0;iLHTempi=LineHightistop=TRUE;显示原来数据用ifNextTime=595;NextTime=NextTime-595;SetDlgItemText;/依次接收120以个数据/关闭接收数据,使显示区和数据区用来为接收数据做多为595个字符先取出文件中的数据,放入一个数组中CStdioFilefile;iffile.OpenCSt

53、ringstr;CStringinstr;CStringoutstr;CStringsss;inti;whilefile.ReadStringinstr+=str;/以只读方式打开文件/定义全局变量/逐行查询,至到文件尾ifinstr.GetLength=600&NextTimeinstr.GetLength-600NextTime=instr.GetLength-600;fori=0;i/取出起点后的120个数据sss=instrNextTime;sss+=instrNextTime+1;outstr+=sss+instrNextTime+2+instrNextTime+3+LineHigh

54、ti=atoiNextTime=NextTime+5;ReceiveData=outstr;UpdateData;this-Invalidate;在移动数据以前要对当前显示的数据进行保存:/读取下一秒的数据/更新编辑框容/更新图相gogo=NextTime;DTemp=m_ReceiveData;forinti=0;iLHTempi=LineHighti;以便在继续接收时能接着原来的数据。2.5程序显示界面模块对话框概述对话框DialogBox,简称Dialog在应用程序与用户交互的过程中扮演着非常重要的角色,大部分的Windows应用程序都要借助于对话框及其控件接收用户输入或反映应用程序信息

55、。对话框可以是最简单的消息框,也可以是复杂的数据输入窗体。对话框是应用程序中功能非常强大的元素,它是一个真正的窗口,不但能接受信息,还可以移动和关闭,甚至可以在他的客户区中进行绘图操作。对话框一般分为两种,一种是模式对话框Modal,另一种是非模式Modeless对话框。当模式对话框出现时,调用该对话框的父窗口会关闭,窗口上的用户接口无法使用;而非模式对话框出现时,调用该对话框的父窗口功能不受任何影响。两种对话框的生成方式不同,但对于对话框上的呃控件的操作方式却基本无差异。MFC等对话框的功能封装在类CDialog中,为对话框变成带来了方便,往往只需要一些简单的操作并添加几行代码,就可以建立一

56、个复杂的对话框。创建一个模式对话框,首先要创建一个对话框模版,描述对话框及包含的控件;再为该对话框创建一个派生于CDialog的类,封装该对话框模版及对话框的所有操作;最后调用函数DoModal建立并显示模式对话框,同时也使得所有用户对应用程序的操作在该对话框外无效。函数DoModal被调用后,只有当用户通过操作直接或间接关闭对话框后,函数DoModal才返回,并将返回值1传递给函数EndDialog,该函数负责清楚模式对话框。13类CDialog介绍MFCg供白类CDialog既支持模式对话框,也支持飞模式对话框。类CDialog继承于类CWind,如图2-6所示。这也表示对话框是一个窗口。

57、图2-6对话框类的继承关系类CDialog包含了对话框操作的所有基本方法,有构造与初始化方法、操作方法和虚拟方法。构造与初始化方法如表2-4所示。表2-4类CDialog的构造和初始化方法方法说明CDialog仓ij建CDialog类象Create创建一个非模式对话框并将其连接到CDialog对象上Createlndirect基于存中的对话框模版创建一个非模式对话框,对话框不基于模版资源InitModalIndirect基于存中的对话框模版创建一个模式对话框,对话框基于模版资源创建模式对话框的、需要从类CDialog派生出一个对话框类,这时就需要重写类CDialog的虚拟函数以获得特定的功能。

58、类CDialog包含多个派生类以封装特殊对话框的属性与操作,继承关系如图2-5所示CDialog图2-5类CDialog的派生类对话框控件1编辑框EditBox编辑框是一种非常重要的控件,它为用户提供了一个可输入字符串、整数等数据的窗口。如果用户不输入任何数据,则编辑框就直显示预设初始值。MFCS用类CEdit包含编辑框控件的属性及操作,通过类Edit的函数Creat可讲编辑框实例初始化,函数声明如下。BOOLCreatSWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID;其中,参数dwStyle是编辑框控件的模式,参数rect是控件所在位置的

59、大小,参数pParentWnd是控件的父窗口,参数nID则是控件的ID。2单选按钮、复选框、下压按钮与组框单选按钮、复选框与组框通常配合使用,目的是将单选按钮或复选框组合为一组,用户在组只能选择一个单选按钮火选择多个复选框。需要注意的是,控件的Group属性用于标识是否为一组空间中的第一个,如果某个控件的Group属性设置为TRUE共后面的所有Group属性为FALSE的控件都将与其一组,知道出现下一个Group属性为TRUE勺控件。而下压按钮是最常见的对话框控件,默认的对话框模版就包含OK和Cancel两个下压按钮。MF0用类CButton包含按钮控件的属性及操作,通过类CButton的函数

60、Creat可将按钮控件实例初始化,函数声明如下。BOOLCreat;其中,参数lpszCaption是按钮空间显示的文本,参数DWStyle是控件的样式,参数rect是控件所在的位置和大小,参数pParentWnd是控件的父窗口,参数nID是控件的ID。3列表框、组合框列表框常用于集中显示童子功红类型的容,他可提供大量的选项供用户选择,也允许用户单项选择或多项选择。MFCS用类CListBox包含列表框控件的属性及操作,通过类CListBox的函数Creat可将列表框控件实例初始化,函数声明如下。BOOLCreat;其中,参数dwStyle是列表框控件的样式,参数rect是控件所在位置的大小,

温馨提示

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

评论

0/150

提交评论