仓库温湿度的监测系统设计_第1页
仓库温湿度的监测系统设计_第2页
仓库温湿度的监测系统设计_第3页
仓库温湿度的监测系统设计_第4页
仓库温湿度的监测系统设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

仓库温湿度的监测系统设计1绪论1.1选题背景仓库的日常管理直接影响到储备物资的使用寿命和工作可靠性,而仓库管理的主要问题就是就是加强仓库内温度和湿度的监测与控制工作。传统的方法是用温度表、毛发湿度表、双金属式测量计和湿度试纸等测试器材,通过人工进行检测,对不符合温度和湿度要求的库房进行通风、去湿和降温等处理。显然这种人工检测控制的方法费时费力,且测试的温度及湿度误差很大,随机性很高,这会导致我们在仓库的管理上出现很多的不必要性。对此我们迫切需要一种测量准确的温湿度测量控制器来帮助我们更好的完成对仓库的日常管理,而基于电子方面的温湿度测量控制器就是我们最好的选择。1.2基本功能及技术要求基本功能检测温度、湿度显示温度、湿度过限报警控制温湿度1.2.2主要技术参数温度检测范围:-30℃-50℃测量精度:0.5℃湿度检测范围:0%-100%RH检测精度:1%RH显示方式:温度值和湿度值在一块显示器上显示。报警方式:蜂鸣音报警和LED闪烁报警。1.3设计的重点与难点本次系统设计的任务是设计一个仓库温湿度监测系统,它能够对仓库的温湿度进行实时检测,测量时能够清晰稳定的显示出检测结果,并且能够在仓库温湿度超过我们所设限度时,控制仓库的温湿度。设计的难点:温湿度控制模块设计显示电路模块设计流程图及程序的设计2系统总体分析与设计2.1系统总体方案温度监控:对仓库温度进行测量,并通过控制温度达到仓库的最佳温度。湿度监控:对仓库湿度进行测量,并通过控制湿度达到仓库的最佳湿度。控制处理:当温湿度值越过限度时报警,根据报警信号发出报警,并且通过温湿度控制模块采取一定手段控制温湿度。显示:显示模块显示仓库实时的温湿度。2.2系统实施措施实际仓库温度与给定界限比较,执行温度调控措施。实际仓库湿度与给定界限比较,执行湿度调控措施。越限报警:当温湿度越限时,系统通过蜂鸣器报警。显示:使用户能够实时观测仓库温湿度,本设计用的是LCD1602显示。2.3系统组成仓库温湿度的监测系统以89C51单片机作为中央控制装置,SHT10温湿度传感器模块,升温设备,降温设备,加湿设备,排潮设备,键盘显示模块,报警模块等组成。各模块功能如下:89C51作为中央控制芯片装置,负责整个系统的中心运算和控制,协调系统的各个模块工作。显示模块用液晶显示器LCD1602显示实时温湿度。温湿度传感器:采用的是SHT10温湿度传感器采集仓库的温湿度,简单,方便,直观。升温设备:负责系统的温度上升控制工作。降温设备:负责系统的温度下升控制工作。喷雾设备:负责系统的加湿工作。排潮设备:负责系统的去湿工作。蜂鸣器模块:负责系统的报警功能。如果当前的温度超过用户设定的界限值时系统将自动报警音效模块发出报警声,通知用户采取相应的措施。系统框图如图2.3-1所示:AT89C51AT89C51SHT10温湿度传感器温湿度控制系统矩阵键盘报警电路LCD1602图2.3-1系统框图3系统硬件设计3.1最小系统设计3.1.1最小系统芯片选择硬件系统是应用系统的基础、软件系统设计的依据,而硬件系统的核心就是主控芯片。我考虑了多种芯片,根据系统的总体功能和运行速度及其每个器件的性价比等因素考虑,最终选定了ATMEL公司的AT89C51为本次系统设计的主机,它满足本次设计方案措施的要求而且设计方便,不需要再存储扩展。89C51在工业应用方面有许多明显的特点,它作为一个8位的CPU,具有灵活方便的8位总线外围支持器扩展功能和快速的应用数据处理能力,使用非常方便。由于电子集成技术的飞速发展,许多常用的输入输出控制模块都制作在同一块硅片上,大大地方便灵活了外部连线,增强了系统的速度和稳定性,这使得它非常适合于在工业环境下使用,总的来说89C51系统的CPU具有体积小,重量轻,抗干扰能力强,售价低,使用方便等特点。89C51芯片简介及引脚介绍[1]89C51是Intel公司于80年代初推出的一种8位嵌入式微控制器。其内部数据总线为8位,外部数据总线为8位。89C51单片机引脚采用40双列直插式封装结构,引脚功能如下所示:VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下所示:P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。其引脚图如图3.1-1所示:图3.1.2-1AT89C51单片机引脚AT89C51CPU中的主要组件AT89C51CPU中的主要组件有:特殊功能寄存器、高速寄存器阵列、寄存器控制器和算术逻辑单元。它与外部通讯是通过特殊功能寄存器或存储器、控制器进行的。此外,它还可以通过特殊功能寄存器直接控制A/D、I/O、PWM、串行口等部件的有效运行。最小系统[2]AT89C51工作时所需的时钟可通过其XTALL输入引脚由外部输入,也可采用芯片内部的振荡器。其工作频率为6~12MHz,在本系统中采用11.0592MHz频率。最小系统图如图3.1-2所示:图3.1.4-1最小系统图3.2温湿度传感器模块设计3.2.1温湿度传感器的选择本次系统设计考虑了两种方案:第一种是采用AD590温度传感器和HS1100湿度传感器共同完成对仓库温湿度的采集,第二种是采用最新型的SHT10温湿度传感器完成对仓库温湿度的采集。SHT10温湿度传感器采用CMOS过程微加工专利技术(CMOSenstechnology),确保产品具有极高的可靠性和出色的长期稳定性,整个传感器组件采用单芯片无缝结合,且温度和湿度可以同时采集,使得该产品具有功耗低、反应快、抗干扰能力强等优点。相对于AD590和HS1100来说,这种新型的传感器更加符合本次设计,所以我选择了第二种方案。SHT10温湿度传感器介绍SHT10温湿度传感器是Sensirion温湿度传感器家族的一员,传感器由湿度传感器,温度传感器,校准存储器,14位A/D转换器,信号放大器和I2C总线接口构成;它是一种将传感元件和信号处理电路集成在一块微型电路板上,输出完全标准的数字信号的一种新型温湿度传感器。其外形实物图如图3.2.2-1所示:图3.2.2-1SHT10外形实物总的来说,它具有以下特点:相对温度和湿度的一体测量;精确露点测量;全量程的标定,不需要重新标定就可以互换使用;两线制的数字接口,具有最简单的系统集成和较低的价格;超小尺寸(7.5×5×2.5mm);高可靠性(工业CMOS工艺);具有长期稳定性;基于请求式的检测,能耗很低;具有湿度传感器元件的自检测能力;传感器元件加热应用,具有极高的精度和稳定性。技术参数如下所示:湿度测量范围:0~100%RH;湿度测量范围:-40~+123.8℃;湿度测量精度:±4.5%RH;温度测量精度:±0.5℃;响应时间:<4s。引脚说明及接口电路:SHT10内部结构框图:图3.2.2-2SHT10内部结构框图SHT10命令表如表-1所示表-1SHT10命令表命令代码保留0000X测量温度00011测量湿度00101读状态寄存器00111写状态寄存器00110保留0101X-1110X软复位,清除状态寄存器为默认值111103.2.3SHT10温湿度传感器性能特点[3]带有工业标准的I2C总线数字输出接口;将温湿度传感器、信号放大、A/D转换、I2C总线接口全部集成于一个芯片;可给出全校准相对湿度及温度值输出;具有露点值计算输出功能;湿度值输出分辨率为14位,温度值输出分辨率为12位,并可编程为12位和8位;具有数据传输校验功能;片内装载的校准系数可保证100%互换性;具有卓越的长期稳定性;电源电压范围为2.4~5.5V;电流消耗,测量时为550μA,平均为28μA,休眠时为3μA;体积小(7.65×5.08×23.5mm),可表面贴装。SHT10温湿度传感器接口电路设计电源引脚(VDD、GND)SHT10的供电电压为2.4V~5.5V。传感器上电后,要等待11ms,从“休眠”状态恢复。在此期间器件不发送任何指令。电源引脚(VDD和GND)之间可增加1个100nF的电容器,用于去耦滤波,使其更加准确。串行接口[4]SHT10的两线串行接口(bidirectional2-wire)在传感器温湿度信号的读取和器件的功耗方面都做了很大的优化处理,其总线类似I2C总线,但是不兼容I2C总线。串行时钟输入(SCK)。SCK引脚是系统主控芯片与SHT1O之间进行通信的同步时钟,其接口包含了全静态逻辑,因此没有最小时钟频率。串行数据(DATA)。DATA引脚是1个三态门,用于系统主控芯片与SHT10之间进行数据传输。DATA的状态在串行时钟SCK的下降沿之后发生改变,在SCK的上升沿有效。在数据传输期间,当SCK为高电平时,DATA数据线上必须保持稳定状态。为避免数据发生冲突,MCU应该驱动DATA使其处于低电平状态,而外部接1个上拉电阻将信号拉至高电平。由于AT89C51不具备I2C总线接口,故使用单片机通用I/O口线来虚拟I2C总线,利用P2.6来虚拟时钟线,利用P2.7口线来虚拟数据线DATA,并在DATA端接入一个10K的上拉电阻,同时在VCC及GND端接入一个0.1UF的去耦电容,AT89C51单片机与SHT10的接口电路如图3.2.4-1所示[5]。图SHT10接口电路图3.3液晶显示模块设计LCD1602是字符型液晶显示模块,它由字符型液晶显示屏、控制驱动主电路HD44780及其扩展驱动电路HD44100、少量电阻电容元件、结构件等装配在一起而成。LCD1602字符型液晶显示模块目前在国际上已经规范化,无论显示屏规格如何变化,其电特性和接口形式都是统一的。因此只要设计出一种型号的接口电路,在指令设置上稍加改动即可使用各种规格的字符型液晶显示模块。图3.3-1LCD1602LCD1602液晶显示模块的基本特点[6]液晶显示屏是以若干个58或511点阵块组成的显示字符群。每个点阵块为一个字符位,字符间距和行距都为一个点的宽度。主控制驱动电路为HD44780(HITACHI)及其他公司全兼容电路,如SED1278(SEIKOEPSON)、KS0066(SAMSUNG)、NJU6408(NERJAPANRADIO)。具有字符发生器ROM可显示192种字符(160个57点阵字符和32个510点阵字符,见附录一)具有64个字节的自定义字符RAM,可自定义8个58点阵字符或四个511点阵字符。具有80个字节的RAM。标准的接口特性,适配M6800系列MPU的操作时序。模块结构紧凑、轻巧、装配容易。单+5V电源供电。低功耗、长寿命、高可靠性。LCD1602与系统的连接图如图3.3-2所示图3.3-2LCD1602与系统连接图3.4报警系统设计报警系统由警报灯和声音报警报警组成。声音报警通过P3.2口接SD口控制系统的音效模块发声,用CPU控制P3.2产生一定频率的方波就可以实现音效模块的发声。音效模块是一个带有扬声器的放大电路,如图3.4-1所示:图3.4-1声音报警模块警报灯模块包含3个LED灯,分别由P2.0、P2.1、P2.2控制。其电路设计图3.4-2所示:图3.4-2警报灯模块3.5按键电路设计本论文中仓库温湿度监测系统的硬件设计中按键电路有单片机AT89C51的复位电路和矩阵键盘电路。以下便是该复位电路图和矩阵键盘电路。图3.5-1单片机AT89C51的复位电路图3.5-2矩阵键盘电路4软件系统设计该系统软件主要由主程序、系统中断子程序、SHT10温湿度传感器数据采集程序、液晶显示器LCD1602显示程序、报警程序等模块组成。因为用C语言编写的程序具有结构简单,程序的可读性强,语法限制不是很严格,生成的目标代码质量高,程序执行效率高,且具有很高的程序可移植性等特点,所以本次软件设计我们采用C语言来编写软件。程序基于KeiluVision3为开发环境,使系统实现如下的功能:控制SHT10温湿度传感器采集仓库的实时温湿度值;通过液晶显示器LCD1602显示仓库温湿度值;比较监测到的实时仓库温湿度值和我们所设置的温湿度报警值,发现其超出我们所设限度则系统控制报警模块发出报警提示;根据所显示的温湿度值控制系统温湿度调节模块工作,使仓库的温湿度值回到开始所设置的温湿度限度,且LCD1602显示子程序对每次由SHT10温湿度传感器所采集的数值进行显示。根据上述系统的功能,系统软件流程图如图4-1所示。1602和SHT10初始化1602和SHT10初始化延时0.2秒读取温湿度值读取成功1602显示数据是否超限延时0.8秒SHT10通讯重启动报警,发出控制信号图4-1系统软件流程图温湿度传感器SHT10完成一次测量的工作顺序一般为:设置传感器分辨率→发送“启动传输”命令→发送测量命令→读取输出的测量值→将输出测量值转换为物理量。则SHT10数据采集程序流程图如图4-2所示;NNYYYNNError=error+1Error=error+1设置传感器分辨率状态发送“启动传输”发送测量指令读出测量值测量值转化成物理量一次测量结束Error是否为0?测量值判断?指令判断图4-2SHT10数据采集程序流程图5系统调试方案5.1硬件电路的调试此部分的任务是在系统各方面都连接好后,调试各个组件能否正常运行,能否实现本次设计的预期目标。其步骤如下:按照系统设计,将系统需要的各个组件连接好。根据实验说明书,了解各个组件的工作原理,开始着手调试芯片。调试温湿度传感器SHT10,确保其各方面运行正常。按键电路,显示电路运行正常。报警模块运行正常。5.2功能模块的调试方案把各个功能模块编写成单独的源文件进行调试,调试成功以后,再将各部分联合在一起。温湿度判断控制模块是核心模块,由于温湿度对于仓库的物品保存起着重要的作用,因此,如果这两个因素不能控制好,这个系统就宣告失败。这使得我们需要认真的考虑这一模块的控制方式。外界温湿度发生超过所设限度的变化做出了报警能否使温湿度控制器件启动,达到控制温湿度的目的。键盘输入模块是这个系统在开始预设温湿度时应用,监测输入数字能否与显示相对应。报警模块在仓库温湿度超过所设限度时发挥作用,监测仓库温湿度超过所设限度能否报警。除了以上的模块之外,还有一些小的模块也很重要,我们都需要认真的调试,。调试了各模块之后,接下来的工作就是将各源程序段连接起来,进行综合调试了,综合调试需要我们特别注意细节部分,这样才能尽可能的减少错误的产生。如果整个调试都以完成,并且达到了我们预期的目标,我们都成功的完成了本次设计了。6结论经过了一段时间的毕业论文制作,使我学到了很多,也有了很多的感悟。我想到了设计开始时找到了梦寐以求的资料时那种兴奋与激动;想到了亲手设计电路图,理想中的每一步思路实现时那幸福的心情;想到了为了论文忘时奋战到深夜的激情;想到了在设计过程中学习到了一个新的知识和重新掌握了一个知识高兴得暗自微笑的愉悦。本次设计能够顺利的完成,我应该感谢我的指导老师,你为给我提供了许多好用的资料来源,并通过你仔细的检查,告诉我论文那里出了错,应该怎么改正,提出了最中肯的意见。老师的严谨治学态度、渊博的知识、无私的奉献精神使我深受启迪。从尊敬的导师身上,我不仅学到了扎实渊博的专业知识,也学到了做人的道理。在此我要向我的导师致以最衷心的感谢和深深的敬意。本次设计,我深深了解了“学无止境”的真正含义,在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。附录1:原理图附录2:程序//************************第一部分************************//Main.C#include<reg51.h>#include"LCD1602.h"#include"SHT10.h"//#include<intrins.h>//#include<math.h>//Keillibrarysbitkongtiao=P3^6;sbitjiashi=P3^7;#defineucharunsignedchartypedefunion //定义共用同类型{ unsignedinti; floatf;}value;//延时函数voiddelay(intz) //z为毫秒数{ intx,y; for(x=z;x>0;x--) for(y=125;y>0;y--);}voidmain(){ unsignedinttemp,humi; valuehumi_val,temp_val; //定义两个共同体,一个用于湿度,一个用于温度 unsignedcharerror; //用于检验是否出现错误 unsignedcharchecksum; //CRC ucharwendu[6]; //用于记录温度 ucharshidu[6]; //用于记录湿度 LCD_Initial(); //初始化液晶 GotoXY(0,0); //选择温度显示位置 Print("TEMP:%C"); //5格空格GotoXY(0,1); //选择湿度显示位置 Print("HUMI:%RH"); //5格空格 s_connectionreset(); //启动连接复位 while(1) { error=0; //初始化error=0,即没有错误 error+=s_measure((unsignedchar*)&temp_val.i,&checksum,TEMP);//温度测量 error+=s_measure((unsignedchar*)&humi_val.i,&checksum,HUMI);//湿度测量 if(error!=0)s_connectionreset();////如果发生错误,系统复位 else { humi_val.f=(float)humi_val.i;//转换为浮点数 temp_val.f=(float)temp_val.i;//转换为浮点数 calc_sth10(&humi_val.f,&temp_val.f);//修正相对湿度及温度 temp=temp_val.f*10; humi=humi_val.f*10; GotoXY(5,0); //设置温度显示位置 wendu[0]=temp/1000+'0'; //温度百位 wendu[1]=temp%1000/100+'0'; //温度十位 wendu[2]=temp%100/10+'0'; //温度个位 wendu[3]=0x2E; //小数点 wendu[4]=temp%10+'0'; //温度小数点后第一位 Print(wendu); //输出温度 GotoXY(5,1); //设置湿度显示位置 shidu[0]=humi/1000+'0'; //湿度百位 shidu[1]=humi%1000/100+'0'; //湿度十位 shidu[2]=humi%100/10+'0'; //湿度个位 shidu[3]=0x2E; //小数点 shidu[4]=humi%10+'0'; //湿度小数点后第一位 Print(shidu); //输出湿度 } if(temp>30) { kongtiao=1; //升温 } else kongtiao=0; //降温 if(humi>30) { jiashi=1; //加湿 } else { jiashi=0;//除湿 } delay(800);//等待足够长的时间,以现行下一次转换 }}//************************第二部分************************//SHT1O.C#include<SHT10.h>#include<intrins.h>sbitDATA=P2^7;sbitSCK=P2^6;#definenoACK0 //继续传输数据,用于判断是否结束通讯#defineACK1//结束数据传输; //地址命令读/写#defineSTATUS_REG_W0x06//00000110#defineSTATUS_REG_R0x07//00000111#defineMEASURE_TEMP0x03//00000011#defineMEASURE_HUMI0x05//00000101#defineRESET0x1e//00011110//写字节程序chars_write_byte(unsignedcharvalue){ unsignedchari,error=0; for(i=0x80;i>0;i>>=1)//高位为1,循环右移 { if(i&value)DATA=1;//和要发送的数相与,结果为发送的位 elseDATA=0; SCK=1; _nop_();_nop_();_nop_();//延时3us SCK=0; } DATA=1;//释放数据线 SCK=1; error=DATA;//检查应答信号,确认通讯正常 _nop_();_nop_();_nop_(); SCK=0; DATA=1; returnerror;//error=1通讯错误}//读字节程序chars_read_byte(unsignedcharack)//-------------------------------------------------------------------------{ unsignedchari,val=0; DATA=1;//释放数据线 for(i=0x80;i>0;i>>=1)//高位为1,循环右移 { SCK=1; if(DATA)val=(val|i);//读一位数据线的值 SCK=0; } DATA=!ack;//如果是校验,读取完后结束通讯; SCK=1; _nop_();_nop_();_nop_();//延时3us SCK=0; _nop_();_nop_();_nop_(); DATA=1;//释放数据线 returnval;}//启动传输voids_transstart(void)//generatesatransmissionstart//_____________//DATA:|_______|//______//SCK:___||___||______{ DATA=1;SCK=0;//准备 _nop_(); SCK=1; _nop_(); DATA=0; _nop_(); SCK=0; _nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0;}//连接复位voids_connectionreset(void)//communicationreset:DATA-line=1andatleast9SCKcyclesfollowedbytransstart//_____________________________________________________//DATA:|_______|//_______________//SCK:__||__||__||__||__||__||__||__||__||______||___||______{ unsignedchari; DATA=1;SCK=0;//准备 for(i=0;i<9;i++)//DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位 { SCK=1; SCK=0; } s_transstart();//启动传输}//软复位程序chars_softreset(void)//resetsthesensorbyasoftreset{ unsignedcharerror=0; s_connectionreset();//启动连接复位 error+=s_write_byte(RESET);//发送复位命令 returnerror;//error=1通讯错误}//温湿度测量chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)//进行温度或者湿度转换,由参数mode决定转换内容;{// enum{TEMP,HUMI}; //已经在头文件中定义 unsignederror=0; unsignedinti; s_transstart();//启动传输 switch(mode)//选择发送命令{ caseTEMP:error+=s_write_byte(MEASURE_TEMP);break; //测量温度 caseHUMI:error+=s_write_byte(MEASURE_HUMI);break; //测量湿度 default:break; } for(i=0;i<65535;i++)if(DATA==0)break;//等待测量结束 if(DATA)error+=1;//如果长时间数据线没有拉低,说明测量错误 *(p_value)=s_read_byte(ACK);//读第一个字节,高字节(MSB) *(p_value+1)=s_read_byte(ACK);//读第二个字节,低字节(LSB) *p_checksum=s_read_byte(noACK);//readCRC校验码 returnerror; //error=1通讯错误}//温湿度值标度变换及温度补偿voidcalc_sth10(float*p_humidity,float*p_temperature){ constfloatC1=-4.0;//12位湿度精度修正公式 constfloatC2=+0.0405;//12位湿度精度修正公式 constfloatC3=-0.0000028;//12位湿度精度修正公式 constfloatT1=+0.01;//14位温度精度5V条件修正公式 constfloatT2=+0.00008;//14位温度精度5V条件修正公式 floatrh=*p_humidity;//rh:12位湿度 floatt=*p_temperature;//t:14位温度 floatrh_lin;//rh_lin:湿度linear值 floatrh_true;//rh_true:湿度ture值 floatt_C;//t_C:温度℃ t_C=t*0.01-40;//补偿温度 rh_lin=C3*rh*rh+C2*rh+C1;//相对湿度非线性补偿 rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;//相对湿度对于温度依赖性补偿 if(rh_true>100)rh_true=100;//湿度最大修正 if(rh_true<0.1)rh_true=0.1;//湿度最小修正 *p_temperature=t_C;//返回温度结果 *p_humidity=rh_true;//返回湿度结果}//从相对温度和湿度计算露点/*floatcalc_dewpoint(floath,floatt){ floatlogEx,dew_point; logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2); dew_point=(logEx-0.66077)*237.3/(0.66077+7.5-logEx); returndew_point;} //************************第三部分************************//LCD1602#include<reg51.h>#include<intrins.h>sbitLcdRs=P2^3;sbitLcdRw=P2^4;sbitLcdEn=P2^5;sfrDBPort=0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//内部等待函**************************************************************unsignedcharLCD_Wait(void){LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;returnDBPort;}//向LCD写入命令或数********************************************************#defineLCD_COMMAND0//Command#defineLCD_DATA1//Data#defineLCD_CLEAR_SCREEN0x01//清屏#defineLCD_HOMING0x02//光标返回原点voidLCD_Write(bitstyle,unsignedcharinput){LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();//注意顺序LcdEn=1;_nop_();//注意顺序LcdEn=0;_nop_();LCD_Wait();}//设置显示模式************************************************************#defineLCD_SHOW0x04//显示开#defineLCD_HIDE0x00//显示关#defineLCD_CURSOR

温馨提示

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

评论

0/150

提交评论