基于51单片机粮仓温湿度监测-VisualBasic上位机显示_第1页
基于51单片机粮仓温湿度监测-VisualBasic上位机显示_第2页
基于51单片机粮仓温湿度监测-VisualBasic上位机显示_第3页
基于51单片机粮仓温湿度监测-VisualBasic上位机显示_第4页
基于51单片机粮仓温湿度监测-VisualBasic上位机显示_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

/论文题目:粮仓温湿度监测系统〔软件专 业:自动化本科生:孙婷婷 〔签名___________指导教师:乐春峡 〔签名___________摘要本设计是以单片机为核心,配合温度传感器〔DS18B20和湿度传感器<HIH-4010>,相关的外围电路以及上位机〔VB显示组成了粮仓温湿度监测系统,可以监测粮仓环境的温度和湿度信号,检测人员可以通过LCD1602液晶显示的数据或者上位机〔VB,实时监控粮仓环境的温度和湿度情况。所有的测量操作都可以通过主机控制软件来实现,温度传感器得到的测量信号,经电路转换为电信号,直接送入单片机。湿度传感器则需要经过A/D转换芯片〔TLC549的处理送到单片机进行数据处理,然后经过软件分析处理后送显示装置。本系统还应用RS232与上位机相连接,可以设置温度、湿度的报警值,也可以实时显示温湿度的采样值,并将其存入数据库,便于以后对于数据的处理。关键词:STC89C52RC单片机,温度传感器,湿度传感器,LCD显示,上位机Subject:BarnTemperatureandHumidityMonitoringSystem<Software>Specialty:AutomationName:SunTingting<Signature>___________Instructor:YueChunxia<Signature>___________ABSTRACTThisdesignisbasedonsinglechipmicrocomputerasthecoreincludingthetemperaturesensor<DS18B20>,humiditysensor<HIH-4010>,therelatedperipheralcircuitandPC<VB>.Itcanmonitorthetemperatureandhumiditysignalofgranaryenvironment.WorkerscandisplaydatathroughtheLCD1602orPC<VB>intimetomonitorthebarnconditions.Allofthemeasuringtheoperationcanbecontrolledbysoftware.Temperaturesensorscangetthesignalandthecircuitconvertsthemintoelectricalsignalstosendthemicrocontroller.HumiditysensorneedtomakeuseofA/DconversionchiptoconvertthedatatoanalysisthembyMCUsendingthemtodisplaydevicebysoftware.ThissystemisconnectedwithPCbyRS232.Itcansetalarmvalueofthetemperatureandhumidity.Italsocandisplaytemperatureandhumidityintime,andsavetheminthedatabasetohandlethedataconvenientlyinthefuture.Keywords:STC89C52RCmicrocontroller,temperaturesensors,humiditysensors,LCDdisplay,PC目录第1章前言11.1背景11.2国内外研究现状及发展趋势11.3设计的目的及意义21.4设计的主要工作31.5本文的主要内容3第2章系统的软件设计42.1单片机及其外围电路软件设计4系统总体框图设计4主程序流程图52.1.3DS18B20温度传感器62.1.4HIH4010湿度传感器62.1.5TLC549A/D转换模块82.1.6LCD1602显示模块9按键模块10报警模块10串口通信模块12小结132.2上位机软件设计132.2.1上位机系统总体设计14系统各个模块142.2.3小结33第3章系统调试和结果分析343.1单片机调试及分析343.2上位机调试及分析34第4章总结35参考文献36致谢37附录381.仿真原理图382硬件原理图393.上位机显示图404.实物图405.单片机程序41第1章前言1.1背景俗话说"国以民为本,民以食为天",粮食是一个国家的立国之本。是一个国家稳定繁荣的基础。所以说粮食对于国家的重要性是不言而喻的。也正因为如此粮食的科学储藏就显得尤为重要。就我们国家来说,粮食一般存放在粮仓中。对于一些大型粮仓或多或少都还存在着不同程度的粮食储存变质问题。根据国家粮食保护法规定,必须定期抽样检查粮仓粮食的温度和湿度,以便及时采取相应的措施,防止粮食的变质。但大部分粮仓目前还是采取人工测量温度和湿度的方法,这不仅使粮仓工作人员工作量增大,且工作效率低,如果检测任务如不能及时彻底的完成,则很有可能会造成粮食大面积变质。1.2国内外研究现状及发展趋势随着传感器技术、计算机应用技术、超大规模集成电路技术和网络通信技术的发展,监控系统广泛应用于工农业生产等领域,在此同时,粮仓温湿度监控技术的研究在软、硬件等方面都有了一定的进展。初期,以热敏电阻,湿敏电阻作为传感器件,通过检测电阻的变化来反映粮食温湿度的变化,为粮食保管提供参考依据。采用人工测量与人工抄录、管理相结合的传统方法,并且用人工的办法对粮食进行晾晒,通风,喷洒药剂防止因存储不当引起的温湿度异常及虫害,消耗了大量的人力和财力,效率较低。这30年里,粮情检测技术在祖国的广大科技工作者不断地探索与努力下,不断完善、进步、并日趋成熟,逐步形成了多样化的粮仓检测系统,推动了安全、科学储粮了发展。目前,国内生产的粮仓温湿度监控系统种类繁杂,系统结构均不相同,在粮仓外部温湿度检测、粮食内部温湿度检测及分析、通风机械的控制等方面,比之前有了不少进步但仍有发展的空间。国外的温湿度监控系统相对比较先进,主要体现在以下三个方面:〔1无论是传感器的测量精度、反应速度、稳定性、功能多样性还是使用环境方面,国外的传感器都比较先进。〔2构成系统整体的测控技术和管理,无论是硬件还是软件,都已普遍采用相应的标准模块集成,并且早已实现组态。〔3系统结构已经普遍采用网络连接的现场总线技术<FCS>,有些需要的场合,则连接到Internet上,实现远程控制、远程诊断。粮仓温湿度监控系统主要应用于监测粮仓环境空间的温度及相对湿度,从系统控制的角度来看,属于纯滞后控制,而这一技术已经相当成熟。目前研制高精度,高性能,多功能的温湿度监控系统是主流,提高可靠性、灵活性和降低成本也是其考虑的重点,并且系统在报警、记录、控制、通信等方面的自动化和智能化也将逐步完善。1.3设计的目的及意义科学储粮是粮食生产的一个重要环节,若管理不当,粮食发霉或生虫会造成极大浪费,而粮仓管理中最重要的问题是监测粮堆中温度和湿度的变化。现在,我国在粮仓建设上己经实现了规范化,但是监测手段一直未能实现同步现代化。我国许多储备粮仓每年都因测控设备的不完善而导致部分粮食霉变,许多大型储备粮仓的测控设备仍需高价进口,因此国家准备在未来的几年内对全国所有的粮仓进行翻新和改造工作,要求规范粮仓管理,实现粮仓管理现代化。影响储粮安全的最主要因素是粮堆内的温度和湿度,因此这就要求有一种经济实用的粮仓温湿度监控系统能够及时监测粮仓温度和湿度分布,准确分析粮仓温湿度变化,并及时采取相应控制措施,使得管理人员能够方便有效地进行监控操作。基于以上内容,我们的目的是设计一款经济、操作方便、实用的粮仓温湿度监控系统。该系统,用单片机作为下位机,对现场的温湿度数据进行采集,同时采用PC机作为上位机,对粮仓进行实时监控。通过RS232实现下位机与上位机的数据通信。粮仓温湿度监控系统是通过现场的单片机检测粮库中粮食的基本温湿度情况。利用上位机对粮仓进行监控,用户可方便地构造自己需要的数据采集系统,可以查看历史数据,优化现场作业,提高了生产效率,增强了国家粮食储备安全水平,以获得实时粮仓管理,实现自动化、智能化,为实现我国粮仓管理现代化更近了一步。1.4设计的主要工作该系统主要利用单片机来测量粮仓中的温度和湿度,为了完成系统功能做以下设计:<1>根据粮仓温度、湿度的测量范围及要求,选择温湿度传感器。<2>设计温湿度测量系统,使之具有测量、报警、设定限定值及实时显示的功能。<3>设计基于RS232的通信系统及基于VisualBasic6.0的人机界面。1.5本文的主要内容本文对所设计的系统进行了介绍和总结,具体安排如下:第一章:引言,主要介绍了本系统的背景,研究现状,发展方向以及本设计主要内容;第二章:系统的软件设计,分为单片机〔下位机和VB〔上位机两大部分。第一部分主要介绍了单片机的各个功能模块的软件设计,如温湿度传感器,A/D转换芯片,LCD1602等,第二部分主要是VB上位机的软件设计第三章:总结,对本次毕业设计过进行总结,并对系统的功能和存在的问题进行分析,还陈述了可行的改进方案。第四、五、六章,分别为致谢,参考文献和附录。第2章系统的软件设计2.1单片机及其外围电路软件设计系统总体框图设计该系统主要由以下功能块构成:中央控制处理器STC89C52RC;数据采集系统〔包括温度传感器DS18B20,湿度传感器HIH4010,显示模块,报警电路,键盘控制系统以及上位机显示。系统总框图如图2-1所示:图2-1基于DS18B20和HIH4010的粮仓温湿度监测系统方框图主程序流程图图2-2系统流程图2.1.3DS18B20温度传感器DS1820数字化温度传感器是高度集成的单总线式的,体积小、功耗低,抗干扰是它的优点。所以本系统采用DS18B20测量粮仓温度值。单片机的P2.4作为其控制口,与其DQ端口连接。根据DS18B20必须严格遵守其读/写时序的特点,并且必须按照其单总线操作协议采集温度数据。协议的流程为:DS18B20的初始化—发送ROM操作命令—处理数据。以下是DS18B20流程图:图2-3DS18B20读温度流程图2.1.4HIH4010湿度传感器本系统的湿度传感器选用霍尼韦尔〔Honeywell公司生产的线性电压输出式集成湿度传感器HIH4010,该传感器内部包括湿敏电容和信号处理功能电路,可完成将相对湿度值变换成电容值,再将电容值转换成线性电压输出的任务.输出电压为:Vout=Vsupply在本系统中固定为+5V,其输出电压值与湿度测量值成正比。当湿度传感器把测量的湿度值转换成电压信号后,送入A/D转换芯片TLC549,,将其转换为数字量后送单片机I/O口。以下是在0℃、25℃、85℃时,HIH4010的输出电压Vout,与相对湿度〔RH的关系曲线:图2-4Vout由图可知:在0℃时相对湿度与电压的关系Vout=在25℃时相对湿度与电压的关系Vout=在85℃时相对湿度与电压的关系Vout=2.1.5TLC549A/D转换模块所谓A/D转换是指将模拟量转换成数字量。A/D转换器〔简称ADC是数据采集中常用的A/D转换元件,适用于测量系统及仪表。本系统采用HIH4010湿度传感器采集湿度,其将采集到的湿度值转换为线性电压最终输出,由于单片机只能处理数字信号,所以必须使用A/D转换芯片,将线性电压转换为数字型电压。本系统选用一款常用的A/D转换芯片—TLC549,进行湿度数据的转换。A/D程序流程图如下:图2-5TLC549流程图程序设计时,要将A/D转换输出的数字量转化成对应的电压值。设:X为模拟电压大小,Y为TLC549采集到的数字量,其中5V为电压最大值〔本系统为TLC549的基准电压值,255为5V对应的数字量。根据公式:QUOTEX5V=Y255〔2-5得:〔2-6通过该式可得到Y值所对应的模拟电压的大小,再根据湿度传感器的计算公式,算出湿度值。2.1.6LCD1602显示模块本系统为粮仓温湿度监测系统,需要将温度、湿度以及温湿度设置值显示出来,供用户使用。所以选用LCD1602作为显示器件,P0口为数据口,P2口为控制口。液晶第一行显示温度湿度值,第二行显示设置温湿度值。以下是运行时的图形以及程序流程图。图2-6运行时的LCD1602图2-7LCD1602流程图2.1.7按键模块主程序开始,单片机将温湿度报警线和当前温湿度数据显示在1602液晶屏上。如果K2键按下,则进入菜单1,光标闪烁到温度报警线。如果按下K0键,则温度报警线加1,如果按下K0键,则温度报警线加1;再次按下K2键,进入菜单2,光标闪烁到湿度报警线,如果按下K1键,则湿度报警线加1,如果按下K2键,则湿度报警线减1;再次按下K2,液晶屏正常显示温湿度。按键流程图如下:图2-8按键流程图2.1.8报警模块当温度测量值超过温度设定值时,绿灯亮,蜂鸣器报警;当湿度测量值超过湿度设定值时,黄灯亮,蜂鸣器报警。根据硬件电路:当P3.6=0,绿灯亮;当P3.7=0,黄灯亮。因为选择的是有源蜂鸣器,所以当P2.3=0时,蜂鸣器报警。硬件电路图如下:温度报警灯:湿度报警灯:图2-9温度报警灯电路图图2-10温度报警灯电路图蜂鸣器电路:图2-11温度报警灯电路图程序流程图如下:图2-12报警流程图2.1.9串口通信模块在粮仓温湿度监测系统中单片机作为下位机需要把"温度测量值"、"湿度测量值"、"温度设定值"、"湿度测量值"四种数据发送到上位机。为了上位机处理数据的方便,在发送数据时,将每个数据分为高低两个字节,按照"温度测量值高字节"、"湿度测量值高字节"、"温度设定值高字节"、"湿度测量值高字节"、"温度测量值低字节"、"湿度测量值低字节"、"温度设定值低字节"、"湿度测量值低字节"的顺序依次发送。同时由于单片机需要接收上位机传送过来的"温湿度设置值",所以使用了串口接收中断。以下分别是串口发送数据流程图2-13,串口接收中断流程图2-14。软件流程图:图2-13串口发送数据流程图图2-14串口接收数据流程图2.1.10小结本节主要介绍了单片机及其外围电路的软件设计,DS18B20是数字型温度传感器,采集的信号可以直接送入单片机,而HIH4010是集成型湿度传感器,输出的信号送入A/D转换芯片TLC549,然后送入单片机。同时可以通过按键设定报警值,最终LCD1602将采集数据显示出来。2.2上位机软件设计本次设计主要是完成粮仓温湿度数据的采集,以及上位机显示,所以需要串口通信的相关知识。用上位机显示,就要设计显示界面,因为数据的数目较多,所以采用表格,为了直观、具体同时绘成温湿度曲线。为了分析采集到的数据,需要建立数据库保存温湿度数据,同时设计与数据库相关的一系列模块,比如"查询模块"、"数据库模块"、"报表模块"。同时因为是一个系统,其必须具有完整的用户服务功能,所以设计了"用户登陆"、"注册用户"、"修改密码"模块。由于以上模块的建立,使得本系统的上位机部分,具有了一般软件的所具备的基本功能。上位机系统总体设计粮仓温湿度监控系统单片机采集检测的温湿度为上位机提供了数据,粮仓温湿度管理系统将实现对这些数据的查询、显示、报表生成等处理功能,建立一个方便使用、便于管理的人机交互界面。粮仓温湿度监测系统目的是对下位机检测的数据进行二次处理。主要包括以下功能:1.与温湿度度监控系统单片机进行数据通信。2.将测量数据存入数据库。3.实现温湿度度信息库的查询、显示、报表生成等处理功能。粮仓温湿度监测信息管理系统模块框图如下图所示:图2-15粮仓温湿度信息管理系统软件总体框系统各个模块1.启动模块运行本系统,首先出现启动窗体〔frmsplsh。向读者显示系统名称,版本信息等。系统启动时单击该窗体的任何一处,都将进入下一步,登录模块。软件设计:在"工程"中添加窗体,在"新建"的列表中选择"展示屏幕",并把"工程属性"中的"启动对象"设置为frmsplsh窗体。将所需控件拖入窗体中,并设置属性。编写窗体代码:①当卸载本窗体时,返回登录窗体SubUnloadForm<>UnloadMeFrm_login.ShowEndSub②只要单击窗体的任何部分或按下任何按键,都会用UnloadForm<>过程,退出该窗体。PrivateSubForm_Click<>'单击窗体UnloadFormEndSubPrivateSubForm_KeyPress<KeyAsciiAsInteger>'按键UnloadFormEndSubPrivateSubfraEdge_Click<>'单击框架UnloadFormEndSubPrivateSubimgLogo_Click<>'单击图标UnloadFormEndSubPrivateSublblInfo_Click<IndexAsInteger>'单击标签UnloadFormEndSub窗体图如下:图2-16启动窗体2.登陆模块为了防止非法用户的干扰,本系统只允许注册用户使用,并且当登录失败超过三次,系统将自动退出。登录模块窗体如下图:图2-17登录窗体图软件设计:〔1在"工程"中添加窗体,在"新建"的列表中选择"展示屏幕",并把"工程属性"中的"启动对象"设置为frmsplsh窗体。〔2将所需控件拖入窗体中,并设置属性。〔3编写窗体代码:①当用户名或密码为空时,点击"确定"按钮后会显示提示信息"用户名或密码不能为空"如图所示:图2-18提示信息图②当用户名或密码输入不正确时,点击"确定"按钮后会显示提示信息"对不起,无此用户或密码不正确!请重新输入"如下图所示:图2-19提示信息图③当操作三次仍未输入正确的用户名或密码时,系统将提示"您无权操作本系统!"并且自动关闭窗体,退出系统。如下图所示:图2-20提示信息图④输入正确的用户名或密码后,将显示MDI主窗体。3.MDI主窗体本系统采用多文档界面〔MultiDocumentInterface,MDI,来组织系统中的多窗体。多文档界面是一种Windows用户界面标准,它是由一个父窗体和多个子窗体构成。MDI窗体如下:图2-21MDI窗体图在"工程"中添加一个MDI窗体,将其〔名称属性设置为frmMain。它作为整个系统的框架和基础,包含"菜单栏","工具栏","状态栏"和"子窗体"。界面设计:〔1菜单栏:为了使用户操作简便,一般都会加入在主窗体中"菜单栏"。本系统的"菜单栏"中,设计了"系统功能"、"数据库"、"查询"、"显示"、"报表"和"帮助"这六个主菜单。其中系统功能又包括"用户管理"子菜单。〔2工具栏:在系统开发时,一般习惯将常用功能放在工具栏上,以方便与用户操作,当需要使用这些功能时,只要单击"工具栏"上的相应图标即可。这就避免了用户在菜单栏中层层查找的麻烦。本系统中设计了"查询"、"显示"、"报表"、"退出"和"修改密码"这几个工具栏按钮。〔3状态栏:状态栏用于显示当前状态下的系统的信息,本系统的状态栏包括系统名称"粮仓温湿度系统","设计者","指导老师","系统时间"4.注册新用户模块为了用户服务更加全面,本系统设计了"添加新用户"模块。登陆系统,然后进入MDI主窗体界面,在"系统功能"主菜单下,点击"添加新用户"的子菜单,便会弹出以下窗口。如下图所示:图2-22添加新用户图〔1当"用户名"的TextBox为空时,单击"确定"按钮会弹出"请输入用户名"的消息框。来提醒用户输入。如下图所示:图2-23信息提示图〔2当"密码"的TextBox为空时,单击"确定"按钮会弹出"请输入密码"的消息框。如下图所示图2-24信息提示图〔3当"用户名"的TextBox的用户名与数据库中用户信息表中的用户名相同时,按"确定"按钮会弹出"用户名已存在,请选择其他用户"的消息框。如下图所示:图2-25信息提示图〔4为了保证密码的正确性,本系统要求输入两次密码,如果两次输入的密码不同,按确定按钮会弹出"两次输入的密码不同,请重新输入密码"的消息框。如下图所示:图2-26信息提示〔5本系统的密码形式只允许"数字",所以当输入非数字型式的密码时,系统会弹出"密码只能为数字"的消息框。如图所示:图2-27信息提示〔6当用户名及"密码"均输入正确时,系统会弹出"注册成功,祝贺你"的消息框。如图所示:图2-28信息提示5.修改密码模块为了方便用户使用,本系统具有修改密码的功能。面,登陆系统,然后进入MDI主窗体界面,在"系统功能"主菜单下,点击"修改密码"的子菜单。将弹出"修改密码"的窗体。如下图所示:图2-29修改密码窗体图〔1为了用户输入密码的准确性,系统要求输入两次密码,如果两次输入的密码不一致,会弹出"密码不一致"的消息框。如下图所示:图2-30信息提示〔2本系统的密码形式只允许"数字",所以当输入非数字型式的密码时,系统会弹出"密码只能为数字"的消息框。如下图所示:图2-31信息提示〔3当没有输入密码时,系统会弹出"请输入密码"的消息框。如下图所示图2-32信息提示〔4当密码输入正确时,会弹出"注册成功"的对话框。如下图所示:图2-33信息提示6.实时显示模块本模块实现将单片机传送的温湿度数据,通过MSFlexGrid表格实时显示出来,并且利用Picture控件绘制实时曲线图,同时还显示有温湿度数据的"最大值"、"最小值",以及报警显示,串口号等。本系统具有通过上位机向单片机发送设置温湿度值的功能,按下"设置温湿度"按钮,便弹出"温湿度值设定"的窗体,在文本框中输入设定值。按"退出"按钮后,上位机发送数据,单片机接收。几秒后上位机又会重新收到单片机传来的温湿度设定值数据,并显示在上位机"设置温度","设置湿度"的文本框中。显示窗体如图所示:图2-34显示窗体图温湿度设置窗体如图:图2-35设置窗体图此系统的温湿度设置值默认为99℃和99%以下,当输入数据超出范围时,弹出以下窗体:图2-36警告窗体图图2-37设置值显示图<1>串行通信控件MSCommVisualBasic6.0是Microsoft公司推出的VisualStudio6.0可视化程序中一种编程语言,拥有当今世界主流的可视化编程技术。利用VisualBasic开发串口通信主要有两种方法,一种通过MSComm控件,二是调用WindowAPI函数。使用MSComm控件实现通信的方法比调用API函数更为简便、快速,并且用较少的代码可以实现相同的功能,可以大大地提高编程效率,也可以减少因为编程不当而导致的系统不稳定。本系统采用MSComm控件,实现与单片机的串口通信。其全称为MicrosoftCommunicationsControl,是微软公司提供的ActiveX控件,它不但可以进行串口通信,而且也可以用来创建功能完备的、事件驱动的高级通信工具。MSComm控件在串口编程时非常方便,设计人员不必花时间去了解较为繁杂的API函数,而且可以在多种语言中使用,比如:VisualBasic、Delphi、VisualC++等。利用它可以建立与串行端口的连接,通过串行端口连接到其它通信设备〔如调制解调器,发出命令,交换数据,以及监视和响应串行连接中发生的事件和错误。<2>MSComm控件的使用MSComm控件通信的流程图如图2-38所示。编写程序时,只需要按照下面流程图,即可实现通信功能。图2-38MSComm控件通信的流程图<3>PC机与单片机通信PC机与单片机之间的串行通信主要实现单片机〔下位机的温湿度数据的采集和传输。下位机程序用C语言编写,固化在单片机中。单片机是粮仓监测系统的温湿度数据采集端,它主要完成对温度传感器DS18B20以及湿度传感器HIH4010的控制和温湿度数据的读取以及实现与上位机的数据通信。上位机软件用VB编写,主要完成通信参数设置和温湿度数据的转换,还有对下位机温湿报警线的设置,以及实现与Access数据库的连接。通信参数设置主要用来完成对系统通信参数的设置,包括设定通信端口、波特率、数据位、奇偶校验位和停止位。温度数据的转换主要实现对接收到的温湿度数据由十六进制到十进制的转换,对下位机温湿报警线的设置,是通过MSComm控件的output属性发送数据到单片机,设置温湿度报警值。同时将下位机传送的温湿度数据存入Access数据库。<4>通信协议为实现PC和单片机之间的正确的传输,本文采用通信协议来规定数据的传输。通信协议如下:波特率:9600bit/s;数据格式:8位数据位,1位停止位,无奇偶校验;传送方式:PC机和单片机均采用查询方式收发数据,数据格式为二进制格式。为了上位机数据转换的方便,将单片机采集的各种数据值扩大十倍。各种数据均分为两个字节,一个为高字,一个为低字节。包括DS18B20测量出的温度数据,HIH4010湿度传感器的湿度数据,以及设置温度值、设置湿度值。单片机一边采集数据,一边发送数据到PC机,PC机将采集到的数据绘成表格、实时曲线图、并存入数据库。7.查询模块本系统将采集到的温湿度数据直接存入Access数据库中,由于数据庞杂,如果直接打开数据库查看,浪费时间和精力。所以本系统设计了查询模块,通过它用户可以根据自己的需要,选择查看数据库中的数据。本系统的"查询模块"可以实现按"日期"查询某一天的数据,按"时间"查询某一时刻的数据,以及按"时间"和"日期"查询某天某一时刻的数据。并且可以通过"刷新"按钮查看所有数据,利用"删除"按钮直接修改数据中的数据。如下图所示:图2-39查询窗体图〔1日期查询:首先勾选"日期查询"的复选框,再在Dtpicker控件中选择具体日期,按"查询"按钮,DataGrid控件中便会显示该天的温湿度数据信息。〔2时间查询:首先勾选"时间查询"的复选框,再在Dtpicker控件中选择具体时间,按"查询"按钮,DataGrid控件中便会显示该时刻的温湿度数据信息。〔3日期时间查询:首先勾选"时间查询"及"日期查询"的复选框,再在Dtpicker控件中选择具体日期时间,按"查询"按钮,DataGrid控件中便会显示该天该时刻的温湿度数据信息。〔4如果未勾选"复选框,则弹出"请选择查询条件"的消息框,如下图所示:图2-40信息提示图〔5如果点击"删除"按钮,则弹出"是否删除指定记录?"的消息框,点击"确定"则删除对象。如下图所示:图2-41信息提示图8.数据库模块数据库是存放数据的仓库,是以一定的组织方式存储在计算机中相关数据的集合。它能以最佳方式、最少的重复、最大的独立性为多种应用提供共享服务。粮仓温湿度信息管理系统数据库采用关系型数据库。用VB自带的Access数据库是开发,Access数据库是适用于中小型数据库的数据库管理系统,用VB创建数据库既简便,又快捷,而且VB可以通过ADO控件建立与Access类型数据库的快速连接。为了保存采集到的数据,便于后期的处理,本系统建立了Access数据库。数据库名:粮仓温湿度,其中有两个数据表,一个用于存放用户信息,一个用于存放温湿度数据。在Access数据库中,表的作用是组织信息,所谓"表"就是数据以行和列的形式组织在一起,每一行代表一条记录,每一列代表一个字段,描述它所含有的数据。根据该系统的需要,我设计了两个表:用户信息表和温湿度信息表。用户信息表用于存储用户名和密码,完成用户登陆和密码修改信息的验证;温湿度信息表用于保存单片机传送的测量信息,包含测量日期、测量时间、温度、温度报警信息、湿度、湿度报警信息。数据库窗体如2-42图所示:图2-42数据库窗体图两个表的结构分别如表2-1、2-2所示。表2-1粮仓温湿度度信息表字段名称字段大小必填字段数据类型编号4是Long测量日期8是Date/Time测量时间8是Date/Time温度50是Text温度报警信息50是Text湿度50是Text湿度报警信息50是Text表2-2用户信息表字段名称字段大小必填字段数据类型用户名50是Text密码50是Text由于单片机与上位机传送温度、湿度数据时间很短,所以设定温度、湿度信息传送至上位机的日期和时间分别为测量的日期和时间。同时本系统设计了"删除"功能,可以随意删除数据,对数据库进行修改。当按下"删除"按钮时,会弹出提示框询问是否删除数据。如下图所示:图2-43信息提示图9.报表打印模块在VisualBasic6.0中,因为有数据报表设计器〔DataReportDesigner模块,使得报表的制作变得简便、快速。数据报表设计器是ActiveXDesigner组中的一个成员,使用前需要执行"工程"中的DataReport"命令",将报表设计器加入到当前工程中,产生一个DataReport对象。设计报表模块目的是便于储存和汇总温湿度信息,具有显示粮仓温湿度信息报表及打印功能。本系统的数据报表包含了数据库中的全部信息,即编号、测量日期、测量时间、温度值、温度报警信息、湿度值、湿度报警信息,方便用户打印和浏览,并在右上角标有打印时间。创建好的数据报表界面如图2-43所示。图2-44数据报表界面10.退出系统本系统有三种退出方式,一种在菜单栏"系统的功能"主菜单下,一种是工具栏的"退出"按钮,还有就是点击MDI主菜单右上角的"关闭"无论使用哪一种退出方式,当点击后都会出现如下图的提示,以防误操作,但点击"是"的按钮后,系统退出。如下图所示:图2-45信息提示图小结本节主要介绍了粮仓温湿度监测系统的上位机软件部分,包括其模块,功能等。上位机部分主要包括显示,以及数据库等。通过VisualBasic6.0,将数据保存到数据库中,实现数据的处理,是本系统特点。第3章系统调试和结果分析3.1单片机调试及分析在调试程序的时候,给单片机烧入程序后,启动单片机进行温湿度测量,但是LCD1602没有显示,只是有二行黑框。对于这个问题,我们首先从程序源代码方面开始检查。但是检查了整个源程序都没有发现问题。然后我们把解决问题的重点放在硬件电路上。仔细检查电路后发现,有接线错误。总结这个问题,我们解决问题的时候首先从软件方面考虑,其实这种解决问题的思路有一定问题。因为对于这个问题,检查硬件电路的错误比检查软件错误要简单和方便,所以我们一开始应该首先从硬件考虑,确保硬件没有错误。另外一个问题是,在最初我们本来打算设计温湿度控制模块,即利用步进电机拖动风扇来调节粮仓的温湿度。但在最后的调试中发现,电机转速很慢,在查阅资料后,发现原来我们所选的四相五线步进电机28BYJ-48是减速电机,转速本就不高。因为时间仓促,我们只能将这一部分去掉,这也是本次设计的遗憾。3.2上位机调试及分析在这次设计中,我们使用VB做上位机显示,为了更具有实用性,我将上位机软件做成了一个完整的系统,具有登录模块,数据库模块,显示模块,查询模块等。起初我的设想是先把每个模块单独制作,最后在将其组合起来。因为单独制作,所以在每个模块定义的变量名都不同,在最后的组合时,浪费了很多时间来修改。尤其是数据库的连接,起初我为每个需要数据库的模块都建立了一个数据库,但最终是要求统一到一个数据库,为此,不仅要一个个修改界面中ADO控件与数据库的绑定,还要修改程序中数据库连接的目录,非常繁琐。总结以上问题,我们编程的时候,一定要有良好的编程习惯,不能一味求方便,要有逻辑、层次。第4章总结对于四年的大学生涯来说,毕业设计是一个重要的环节,是把理论与实践结合锻炼我们自己的一次很好的体验。从最初的选题,开题到构思、绘图、编写程序、仿真直到完成设计。每一步都包含着我的汗水。本论文题目是"粮仓温湿度环境监测系统设计",系统以STC89C52RC单片机为核心,主要由LCD1602显示电路、键盘控制、温湿度采集模块、报警系统。系统通过温湿度传感器采集环境的温湿度,并将采集的数据送入单片机中。在STC89C52单片机中,对送过来的数据进行处理和分析,并将数据通过LCD1602显示电路显示。若测定值超过设定值,则蜂鸣器会发出"滴滴"声音报警,并实现单片机控制板对设定参数进行控制。在设计中,也遇到很多问题。首先本系统需要串口通信,起初我们的单片机的晶振为12MHZ,串口可以通信,但是上位机显示的数据不准确。后来经过我们的努力查找,发现当波特率为12MHZ时,波特率的设置会不标准,会造成数据传送错误。应该把单片机的晶振换成11.0592MHZ。还有就是上位机的设计,由于我从未学习过VisualBasic6.0,所以设计时遇到不少问题,好在图书馆的藏书,非常丰富,从中我学习到不少知识。虽然整个设计已经完成,但是也存在许多不足之处,因为上位机接收数据将其存入数据库中,如果可以有历史曲线的绘制,就会更加完美。从系统测量的温湿度值来看,整个系统达到了初期预想的效果,测量精度也较高。只是在控制方面显得不足,希望以后能够能有机会继续完善。参考文献[1]柴钰.单片机原理及应用.XX电子科技大学出版社,2009.[2]常健生等.检测与转换技术.机械工业出版社,20011.[3]陈雷等.C51单片机实训.中国电力出版社,2006.[4]瓮嘉民,等.单片机应用开发技术.中国电力出版社,2010.[5]李江全.现代测控系统典型应用实例.电子工业出版社,2010.[6]老杨.51单片机工程师是怎样炼成的.电子工业出版社,2011.[7]张靖武,等.单片机原理、应用与Proteus仿真.电子工业出版社,20011.[8]李江全,等.VisualBasic串口通信与测控.人民邮电出版社,2007.[9]莫卫东,等.VisualBasic高级编程技巧.XX交通大学出版社,2007.[10]求是科技.单片机典型模块设计实例导航<第二版>.人民邮电出版社,2008.[11]谭浩强.C程序设计<第三版>.清华大学出版社,2007.[12]胡小江等.21天学通VisualBasic.电子工业出版社,2009[13]郭琦.VisualBasic数据库系统开发技术.人民邮电出版社,2004:[14]饶运涛,等.现场总线CAN原理与应用技术.北京航空航天大学出版社.2003[15]孙越.VisualBasic数据库开发自学教程.北京:人民邮电出版社,2005:[16]吴春雷,粮库温湿度智能检测系统的研究[D].天津:XX工业大学;2006[17]汤庆,基于单片机的粮库温度监控系统设计[D].XX:XX海事大学;2004[18]明日科技.VisualBasic控件参考大全.人民邮电出版社,2006:致谢本次毕业设计能够按时完成,我要衷心地感谢我这次毕业设计的导师乐春峡老师。乐老师对我们进行详细而悉心的教导,本着认真负责的态度指导我们,虽然工作很忙,但都会抽出时间对我们进行指导,帮助我们解决问题以及督促我们完成任务。在这过程中,乐老师教会了我许多解决问题的办法和思路,这些方法不仅使我解决了毕业设计的诸多问题,也是以后我工作中、学习中解决问题的宝贵经验。感谢我的搭档相征同学,正是由于他负责的硬件电路模块的按时完成,我才能把软件结合起来对系统进行调试,而且在软件方面也给了我不少建议,给我出谋划策,使我能够按时完成任务。感谢电控学院的其他老师和同学们给我提供的帮助和支持。在毕业设计过程中,我们需要用到一些仪器及设备,我们学院各个实验室的老师和同学都主动给我们提供帮助。无论在解决理论还是实际问题上,学习优秀的同学还有动手能力强的同学都给予了我很大的帮助,使我增长了理论知识的同时,也学到了不少实际操作的经验。在此论文完成之际,谨向所有曾给予我帮助和指导的老师、同学和朋友们致以衷心的感谢!附录1.仿真原理图2硬件原理图3.上位机显示图4.实物图5.单片机程序#include<reg52.h>#include<math.h>#include<intrins.h>#definebyteunsignedchar#defineucharunsignedchar#defineuintunsignedintunsignedchardispbuf[5]={0};unsignedchartemp[5];unsignedcharT0count;unsignedinttimecount;bitflag;signedcharRH;//湿度unsignedcharTset,Rset;//默认的温度报警线unsignedcharmenu;//菜单变量,0时正常,1时设置温度,2时设置湿度sbitK0=P3^2;//定义键盘K0sbitK1=P3^3;//定义键盘K1sbitK2=P3^4;//定义键盘K2sbitK3=P3^5;sbitbeep=P2^3;//定义蜂鸣器sbitDO=P2^6;//定义A/D转换sbitCS=P2^7;sbitSCLK=P2^5;unsignedcharADdata;sbits2=P3^6;//定义风干sbits4=P3^7;//定义降温sbitLCD_RS=P2^0;//定义LCD1602sbitLCD_RW=P2^1;sbitLCD_E=P2^2;#defineLCD_DATAP1/****************************************************函数名称:dellay**入口参数:h〔unsignedint型**出口参数:无**功能描述:短暂延时,使用11.0592晶体,约0.01MS****************************************************/voiddellay<unsignedinth>{while<h-->;//0.01MS}/****************************************************函数名称:WriteDataLcd**入口参数:wdata〔unsignedchar型**出口参数:无**功能描述:写数据到LCD****************************************************/voidWriteDataLcd<unsignedcharwdata>{ LCD_RS=1;LCD_RW=0; LCD_DATA=wdata; dellay<100>;//短暂延时,代替检测忙状态 LCD_E=1; dellay<100>;//短暂延时,代替检测忙状态 LCD_E=0;}/****************************************************函数名称:WriteCommandLcd**入口参数:wdata〔unsignedchar型**出口参数:无**功能描述:写命令到LCD****************************************************/voidWriteCommandLcd<unsignedcharwdata>{ LCD_RS=0;LCD_RW=0; LCD_DATA=wdata; dellay<100>;//短暂延时,代替检测忙状态 LCD_E=1; dellay<100>;//短暂延时,代替检测忙状态 LCD_E=0;}//LCD初始化voidlcd_init<void>{ LCD_E=0; WriteCommandLcd<0x38>; WriteCommandLcd<0x38>;//显示模式设置WriteCommandLcd<0x08>;//关闭显示 WriteCommandLcd<0x0c>; WriteCommandLcd<0x06>;//显示光标移动设置 WriteCommandLcd<0x01>;//显示清屏 WriteCommandLcd<0x90>;//显示开及光标移动设置}/****************************************************函数名称:display_xy**入口参数:x〔unsignedchar型,y〔unsignedchar型**出口参数:无**功能描述:设置光标位置,x是列号,y是行号****************************************************/voiddisplay_xy<unsignedcharx,unsignedchary>{ if<y==1> x+=0x40; x+=0x80; WriteCommandLcd<x>;}/**********************************************************************函数名称:display_char**入口参数:x<unsignedchar型>,y<unsignedchar型>,dat<unsignedchar型>**出口参数:无**功能描述:在具体位置显示单个字符,x是列号,y是行号*********************************************************************/voiddisplay_char<unsignedcharx,unsignedchary,unsignedchardat>{ display_xy<x,y>; WriteDataLcd<dat>;}/***********************************************************************函数名称:display_string**入口参数:x<unsignedchar型>,y<unsignedchar型>,s<指针型>**出口参数:无**功能描述:在具体位置显示字符串,以/0结束,x是列号,y是行号**********************************************************************/voiddisplay_string<unsignedcharx,unsignedchary,unsignedchar*s>{ display_xy<x,y>; while<*s> { WriteDataLcd<*s>; s++; }}//*****************////以下是DS18B20驱动程序//*****************//unsignedchardatatemp_data[2]={0x00,0x00};//读出温度暂放unsignedchardata_1820display[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用unsignedinttmp;sbitDQ=P2^4;//**************温度小数部分用查表法***********//unsignedcharcodeditab[16]={ 0x00,0x01,0x01,0x02, 0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07, 0x08,0x08,0x09,0x09};/*****************11us延时函数*************************///void_18B20_delay<unsignedintt>{for<;t>0;t-->;}/****************DS18B20复位函数************************/_18B20_reset<void>{ charpresence=1; while<presence> { while<presence> { DQ=1; _nop_<>;_nop_<>;//从高拉倒低 DQ=0; _18B20_delay<50>;//550us DQ=1; _18B20_delay<6>;//66us presence=DQ;//presence=0复位成功,继续下一步 } _18B20_delay<45>;//延时500us presence=~DQ; } DQ=1;//拉高电平}/****************DS18B20写命令函数************************///向1-WIRE总线上写1个字节void_18B20_write<unsignedcharval>{unsignedchari;for<i=8;i>0;i-->{ DQ=1; _nop_<>;_nop_<>;//从高拉倒低 DQ=0; _nop_<>;_nop_<>;_nop_<>;_nop_<>;//5us DQ=val&0x01;//最低位移出 _18B20_delay<6>;//66us val=val/2;//右移1位}DQ=1;_18B20_delay<1>;}/****************DS18B20读1字节函数************************///从总线上取1个字节unsignedchar_18B20read_byte<void>{ unsignedchari; unsignedcharvalue=0; for<i=8;i>0;i--> { DQ=1; _nop_<>;_nop_<>;//从高拉倒低 value>>=1; DQ=0; _nop_<>;_nop_<>;_nop_<>;_nop_<>;//4us DQ=1; _nop_<>;_nop_<>;_nop_<>;_nop_<>;//4us if<DQ>value|=0x80; _18B20_delay<6>;//66us } DQ=1; return<value>;}_18B20_read<> //读出温度函数{_18B20_reset<>;//总线复位 _18B20_delay<200>; _18B20_write<0xcc>;//发命令 _18B20_write<0x44>;//发转换命令 _18B20_reset<>; _18B20_delay<1>; _18B20_write<0xcc>;//发命令 _18B20_write<0xbe>; temp_data[0]=_18B20read_byte<>;//读温度值的低字节 temp_data[1]=_18B20read_byte<>;//读温度值的高字节 tmp=temp_data[1]; tmp<<=8; tmp=tmp|temp_data[0];//两字节合成一个整型变量。 returntmp;//返回温度值}/****************温度数据处理函数************************///二进制高字节的低半字节和低字节的高半字节组成一字节,这个//字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩//下的低字节的低半字节转化成十进制后,就是温度值的小数部分/********************************************************/_18B20_work<unsignedinttem>{ unsignedcharn=0; if<tem>6348>//温度值正负判断 { tem=65536-tem; n=1; }//负温度求补码,标志位置1 _1820display[4]=tem&0x0f;//取小数部分的值 _1820display[0]=ditab[_1820display[4]];//存入小数部分显示值 _1820display[4]=tem>>4;//取中间八位,即整数部分的值 _1820display[3]=_1820display[4]/100;//取百位数据暂存 _1820display[1]=_1820display[4]%100;//取后两位数据暂存 _1820display[2]=_1820display[1]/10;//取十位数据暂存 _1820display[1]=_1820display[1]%10;/******************1602液晶符号位显示判断**************************/ if<!_1820display[3]> { _1820display[3]=''-'0';//最高位为0时不显示 if<!_1820display[2]> _1820display[2]=''-'0';//次高位为0时不显示 } if<n> _1820display[3]='-'-'0';//负温度时最高位显示"-"}_18B20_init<>//18B20初始化{ _18B20_reset<>;//开机先转换一次 _18B20_write<0xcc>;//SkipROM _18B20_write<0x44>;//发转换命令}/********************************************************//*/*AD转换子程序/*/********************************************************/AD549<>{ unsignedchari; CS=0;_nop_<>;_nop_<>;_nop_<>;_nop_<>;for<i=0;i<8;i++> { SCLK=1; ADdata<<=1; if<DO>ADdata|=0x01; SCLK=0; } CS=1;_nop_<>;_nop_<>;return<ADdata>;}/********************************************************//*/*初始化串口波特率/*/********************************************************/voidserial_ini<>{SCON=0x50;//选择串口工作方式,打开接收允许PCON=0x00;TMOD=0x21;//定时器1工作在方式2,定时器0工作在方式1TH1=0xfd;//实现波特率9600〔系统时钟11.0592MHZTL1=0xfd;TR1=1;//启动定时器T1ES=1;}/********************************************************//*/*发送数据子函数/*/********************************************************/voidserial_send<>{ucharb;b=temp[1]*10+temp[0]; SBUF=<<_1820display[2]*10+_1820display[1]>*10+_1820display[0]>>>8;while<TI==0>;TI=0;//将原来的八位变为十六位,此处为温度高八位SBUF=<<b*10>>>8>;while<TI==0>;TI=0;SBUF=<<Tset*10>>>8>;while<TI==0>;TI=0;SBUF=<<Rset*10>>>8>;while<TI==0>;TI=0; SBUF=<<_1820display[2]*10+_1820display[1]>*10+_1820display[0]>&0x00ff;while<TI==0>;TI=0;//温度第八位SBUF=<<b*10>&0x00ff>;while<TI==0>;TI=0; SBUF=<<Tset*10>&0x00ff>;while<TI==0>;TI=0; SBUF=<<Rset*10>&0x00ff>;while<TI==0>;TI=0;}/********************************************************//*/*接收数据子函数/*/********************************************************/voidserial<void>interrupt4{uchari;uintnum[2];RI=0;num[0]=SBUF;for<i=1;i<4;i++>{ while<RI==0>;RI=0; num[i]=SBUF;}Tset=num[0];Rset=num[2];}/********************************************************//*

温馨提示

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

最新文档

评论

0/150

提交评论