1、各专业完整优秀毕业论文设计图纸 西安科技大学电子设计大赛(设计)题 目 基于单片机的温湿度监测系统设计指导教师 学生姓名 二O一四年五月二十日开题报告书2014年5月20日院(系)通信与信息工程学院姓 名学 号200811705106论文(设计)题目 基于单片机的温湿度监测系统设计一、选题目的和意义环境的监测与控制在工业、农业、国防等行业有着广泛的应用。由于应用的场合不同监测对象的不同,其系统设计也是千差万别。在实际生活中此类系统有着广泛的应用,室温环境检测系统中温度和湿度是两个重要的显示和分析指标,必须定期抽样检查室温环境温度和湿度,以便采取相应的措施。89C51单片机是常用于控制的芯片,在
2、智能仪器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成果,用其作为温湿度检测控制系统的实例也很多。使用89C51单片机能够实现温湿度全程的自动检测,而且89C51单片机易于学习、掌握,性价比高。使用89C51型单片机设计温湿度检测系统,可以及时、精确的反映室内的温度以及湿度的变化。当其超过设定范围时报警提醒人进行控制。将此系统应用到温室大棚当中无疑为植物的生活提供了更加适宜的环境。二、本选题在国内外的研究现状和发展趋势目前国内外的温湿度检测使用的温湿度检测元件种类繁多、应用范围也较广泛加之单片机和大规模集成电路技术的不断提高,出现了高性能、高可靠性的单片数据采集系统。基于单机片的温湿度
3、监测控制系统的设计研究较少。随着经济和社会的不断发展,人们对自己的生活环境越来越严格。特别在温室大棚中,对温湿度要求更为严格。基于单片机的温湿度监测控制统设计,将对环境的温湿度监测控制系统做详细的设计与实现。采用高性能的控制芯片89C51,高精度数字温湿度传感器AM2301。向模块化、高速化、智能化的单片机数据采集系统靠近。将此系统应用到温室大棚当中无疑为植物的生活提供了更加适宜的环境,符合植物的生活环境要求,具有良好的发展前景。三、课题设计方案 主要说明:研究(设计)的基本内容、观点及拟采取的研究途径和方法。 研究设计的基本内容和观点温度检测控制:对温室温度进行测量,便于方便及时的知道室内温
4、度湿度检测控制:对温室湿度进行测量,便于方便及时的知道室内湿度控制处理:当温度、湿度越限时声光报警,根据报警信号提示人采取一定手段进行控制。显示:1602 LCD显示相应的温湿度。人性化的设计:根据植物的生活需求,把温湿度值控制在一定的范围内。能够实时、准确的显示采样温度值与湿度值。通过采集温度及湿度值,准确的判断标准值与当前值之间的差异,及时的启动报警装置(包括警报灯的提示功能以及提示音等)进行报警。研究途径和方法:通过查阅图书管和网络搜集相关资料,并根据专业课中学习到的相关知识,系统的、全面的组织材料,确定设计思路。一方面通过系统的学习51单片机以及Keil软件的使用和AM2301数字温湿
5、度传感器的资料分析与研究确定编程思路,另一方面通过实物模拟,查看应用效果,最终达到设计的总体要求。四、主要参考文献1林国汉.基于单片机的温度控制系统设计J.微计算机信息,2009(25)2易顺明.基于单片机的大棚温湿度控制系统设计J.现代电子技术,2011 (7)3张毅刚.单片机原理及应用M.北京:高等教育出版社2008.4Atmel. Atmel 89C51 Microcontrollers Hardware Manual,2010.5陈桂友,柴远斌.单片机应用技术M.北京:机械工业出版社,2008.目 录摘 要11 引言11.1 课题背景11.2立题的目的和意义11.3国内外的研究现状和发
6、展趋势11.4本系统主要研究内容22 系统总体设计22.1系统功能设计22.2系统设计原则22.3系统的组成和工作原理33 系统硬件设计53.1单片机系统设计53.2传感器的设计83.3 液晶显示装置设计103.4 光声报警系统与温湿度控制系统设计124 软件系统设计144.1初始化模块154.2温湿度检测模块154.3 温湿度判断控制模块154.4 1602液晶显示模块164.5报警模块164.6 系统整体软件程序16总 结21参考文献:22谢 辞23基于单片机的温湿度检测系统设计 苏哲,骆红霞,孟超,严智勇摘要:本文利用89C51单片机设计一个温室大棚的温湿度检测系统,对室内的温湿度进行检
7、测控制并实时显示。其中温湿度传感器采用AM2301数字温湿度传感器,通过89C51单片机的处理把温湿度值显示在1602液晶上。并实时判断温湿度值是否满足设定的温湿度范围,若超出设定范围,通过89C51启动报警系统,达到检测室内温湿度的目的。关键字:89C51;AM2301;1602液晶显示;温湿度控制系统1 引言1.1 课题背景随着经济和社会的不断发展,人们对生活质量要求显著提高。对植被也要求越来越严格,如何种植出品种优良的植物,一直是人们研究的话题。而基于单片机的温湿度检测系统对解决这些问题有着非常重大的意义。以前种植植被一般都用温室栽培,为了充分的利用好温室栽培这一高效技术,就必需有一套科
8、学的,先进的管理方法,用以对不同种类植被生长的各个时期所需的温度及湿度等进行实时的监控。温湿度检测对于单片机的应用具有一定的实际意义,它代表了一类自动控制的方法。而且其应用十分广泛。1.2立题的目的和意义环境的监测与控制在工业、农业、国防等行业有着广泛的应用。由于应用的场合不同监测对象的不同,其系统设计也是千差万别。在实际生活中此类系统有着广泛的应用,室温环境检测系统中温度和湿度是两个重要的显示和分析指标,必须定期抽样检查室温环境温度和湿度,以便采取相应的措施。89C51单片机是常用于控制的芯片,在智能仪器仪表、工业检测控制、机电一体化等方面取得了令人瞩目的成果,用其作为温湿度检测系统的实例也
9、很多。使用89C51单片机能够实现温湿度全程的自动检测与控制,而且89C51单片机易于学习、掌握,性价比高。使用89C51型单片机设计温湿度检测控制系统,可以及时、精确的反映室内的温度以及湿度的变化。当其超过设定范围时报警提醒人进行控制。将此系统应用到温室大棚当中无疑为植物的生活提供了更加适宜的环境。1.3国内外的研究现状和发展趋势目前国内外的温湿度检测使用的温湿度检测元件种类繁多、应用范围也较广泛加之单片机和大规模集成电路技术的不断提高,出现了高性能、高可靠性的单片数据采集系统。基于单机片的温湿度监测控制系统的设计研究较少。随着经济和社会的不断发展,人们对自己的生活环境越来越严格。特别在温室
10、大棚中,对温湿度要求更为严格。基于单片机的温湿度监测控制统设计,将对环境的温湿度监测控制系统做详细的设计与实现。采用高性能的控制芯片89C51,高精度数字温湿度传感器AM2301。向模块化、高速化、智能化的单片机数据采集系统靠近。将此系统应用到温室大棚当中无疑为植物的生活提供了更加适宜的环境,符合植物的生活环境要求,具有良好的发展前景。1.4本系统主要研究内容本系统所要完成的任务是:1.4.1人性化的设计。根据植物的生活需求,把温湿度值控制在一定的范围内。1.4.2 能够实时、准确的显示采样温度值与湿度值。1.4.3通过采集温度及湿度值,准确的判断标准值与当前值之间的差异,及时的启动报警装置(
11、包括警报灯的提示功能以及提示音等)进行报警。2 系统总体设计2.1系统功能设计系统要完成的设计功能是:2.1.1 实现对温室大棚温湿度参数的实时采集,测量空间的温度和湿度,由单片机对采集的温湿度值进行循环检测、数据处理、显示,实现温湿度的智能检测。2.1.2 实现超越数据的及时报警,并启动控制系统,实现温室的目的。2.1.3 现场检测设备应具有较高的灵敏度、可靠性、抗干扰能力。要求达到的技术指标: 测温范围: 0。C -60。C 测温精度:+0.5。C 测湿范围:0-100%RH 测湿精度:+2.5%RH2.2系统设计原则要求单片机系统应具有可靠性高、操作维护方便、性价比高等特点。2.2.1可
12、靠性高可靠性是单片机系统应用的前提,在系统设计的每一个环节,都应该将可靠性作为首要的设计准则。提高系统的可靠性通常从以下几个方面考虑:使用可靠性高的元器件;设计电路板时布线和接地要合理;对供电电源采用抗干扰措施;输入输出通道抗干扰措施;进行软硬件滤波;系统自诊判断功能等。2.2.2操作维护方便在系统的软硬件设计时,应从操作者的角度考虑操作和维护方便,尽量减少对操作人员专用知识的要求,以利于系统的推广。因此在设计时,要尽可能减少人机交换接口,多采用操作内置或简化的方法。同时系统应配有现场故障自动诊断程序,一旦发生故障能保证有效地对故障进行定位,以便进行维修。2.2.3性价比单片机除体积小、功耗低
13、等特点外,最大的优势在于高性能价格比。一个单片机应用系统能否被广泛使用,性价比是其中一个关键因素。因此,再设计时,除了保持高性能外,尽可能降低成本,如简化外围硬件电路,在系统性能和速度允许的情况下尽可能使用软件功能取代硬件功能等。2.3系统的组成和工作原理2.3.1系统的组成以单片机为控制核心,采用温湿度测量,通信技术,控制技术等技术,以温湿度传感器作为测量元件,构成智能温湿度测量控制系统。可分为温湿度测量电路,显示电路,声光报警电路,温湿度控制电路,见图2.1选用的主要器件有:AT89C51,温湿度传感器AM2301,1602LCD显示模块,降温装置风扇,升温装置加热器,増湿装置喷雾器,除潮
14、装置除潮器,红绿LED灯,报警装置蜂鸣器等12。图1系统的组成2.3.2系统的工作原理本系统以单片机Atmel89C51为核心,数据采集、传输、显示、报警都要通过单片机。数据采集通过单总线的智能数字温湿度传感器AM2301完成;通过单片机把采集的数据显示在1602LCD上;当采集的数据超出给定范围时,有蜂鸣器实时报警,并显示红灯提示,并进行相应的控制处理。在整个系统中采用了AM2301单总线技术,单片机采用C语言编程。 89C51作为中央控制装置,负责中心运算和控制,协调系统各个模块的工作。 双色灯,报警模块:负责系统的报警功能。如果当前的温度超过用户设定的界限值时系统将自动警,双色灯在单片机
15、的控制下有规律的切换,同时报警模块发出报警声,通知用户采取相应的措施。系统工作流程图见图2系统初始化温湿度检测进行人工温湿调控不报警判 断51单片机51单片机报警LCD 液晶显示终止LCD 液晶显示图2系统的工作原理图3 系统硬件设计3.1单片机系统设计经过上面的总体方案和实施措施的讨论后可以开始着手硬件系统的设计,硬件系统是应用系统的基础、软件系统设计的依据根据总体功能和性价比及其运行速度等因素的考虑,选用MCS-51系列的89C51为主机,满足上面的要求而且设计方便,不需要再存储扩展。3.1.1 AT89C51单片机MCS-51系列单片机主要包括基本型产品8031/8051/8751(对应
16、的低功耗型80C31/80C51/87C51和增强型产品8032/8052/8752。虽然他们是8位的单片机,但是具有品种全、兼容性强性能价格比高等特点且软硬件应用设计资料丰富齐全,已为我国广大工程技术人员所熟悉和掌握。在20世纪80年代和90年代,MCS-51系列单片机是在我国应用最为广泛的单片机机型之一。中央微处理器 AT89C51: AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51
17、指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89C51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89C51设计和配置了振荡频率,并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系
18、统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式。AT89S51单片机综合了微型处理器的基本功能。按照实际需要,同时也考虑到设计成本与整个系统的精巧性,所以在本系统中就选用价格较低、工作稳定的AT89C51单片机作为整个系统的控制器3。图3 AT89C51单片机实物图图4 AT89C51 单片机的片内硬件组成结构3.1.2 AT89C51引脚简单介绍总线型 非总线型I图5 89C51的引脚封装40个引脚按其功能可分为如下3类:电源及时钟引脚VCC、VSS;XTAL1、XTAL2。控制引脚PS
19、EN、ALE/PROG、EA/VPP、RST。I/O口引脚P0、P1、P2、P3,为4个8位I/O口的外部引脚4。3.1.3 时钟电路AT89C51单片机各功能部件的运行都以时钟信号为准,有条不紊、一拍一拍地工作。因此时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。AT89C51单片机内部有一个用于构成震荡的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为XTAL2。这两个引脚跨接石英晶体和微调电容,构成一个稳定的自己振荡器。外部时钟方式时外部时钟电源直接接到XTAL1端,XTAL2端悬空。图6时钟电路3.1.4 复位电路复位是单片机的初始化操作,只需给AT
20、89C51的复位引脚RST加上大雨2个机器周期(即24个时钟震荡周期)的高电平就可使AT89C51复位。复位电路通常采用上自动复位和按钮复位两种方式。上电复位是通过外部复位电路给电容C充电加至RST引脚一个短的高电平信号,次信号随着VCC对电容C的充电过程而逐渐回落,即RST引脚上的高电平持续时间取决于电容C的充电时间。因此为保证系统能可靠地复位,EST引脚上的高电平必须维持足够长的时间。按键手动复位有电平和脉冲两种形式5。图7复位电路3.2传感器的设计3.2.1传感器的基本特性传感器的静态特性是指对静态的输入信号,传感器的输出量与输入量之间所具有相互关系。不含时间变量的代数方程,或以输入量作
21、横坐标,把与其对应的输出量作纵坐标而画出的特性曲线来描述。表征传感器静态特性的主要参数有:线性度、灵敏度、分辨力和迟滞等。传感器的动态特性: 所谓动态特性,是指传感器在输入变化时,它的输出的特性。在实际工作中,传感器的动态特性常用它对某些标准输入信号的响应来表示。这是因为传感器对标准输入信号的响应容易用实验方法求得,并且它对标准输入信号的响应与它对任意输入信号的响应之间存在一定的关系,往往知道了前者就能推定后者。最常用的标准输入信号有阶跃信号和正弦信号两种,所以传感器的动态特性也常用阶跃响应和频率响应来表示6。3.2.2 AM2301数字温湿度传感器 图8 数字温湿度传感器(1)AM2301产
22、品概述AM2301数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个AM2301传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合
23、的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。(2)产品亮点超低能耗、传输距离远、全部自动化校准、采用电容式湿敏元件、完全互换、标准数字单总线输出、卓越的长期稳定性、采用高精度测温元件。(3)单总线接口定义图10 AM2301引脚引脚说明(VDD SDA GND):AM2301的供电电压范围为 3.5V - 5.5V,建议供电电压为 5V。数据线 SDA 引脚为三态结构,用于读/写传感器数据。详细见单总线的通信协议说明。(4)接口说明 建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。 图10 AM2301典型接口电路3
24、.3 液晶显示装置设计3.3.1液晶简介1602液晶也叫1602字符型液晶 它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔 每行之间也有也有间隔 起到了字符间距和行间距的作用,正因为如此 所以他不能显示图形(用自定义CGRAM,显示效果也不好)1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的
25、字符型液晶8。 图11 1602实物图1602LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mmVSS1VDD2V03RS4R/W5EN6DB07DB18DB29DB310DB411DB512DB613DB714BLA15BLK16LCD1602P8LCD1602D0D1D2D3D4D5D6D710KR5123P10ENRSWRVCCGNDVCCGNDVoutGND图12 1602LCD引脚图引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口
26、说明如下:第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据
27、线。第15脚:背光源正极。第16脚:背光源负极。3.3.2液晶显示原理读写操作时序如图13和图14所示:图13 读操作时序图14 写操作时序3.4 光声报警系统与温湿度控制系统设计3.4.1光声报警系统本系统采用红绿LED灯作为光报警提示,当系统检测到的数据符合给定的要求时,现场始终绿灯显示;当系统检测到的数据不符合给定的要求时,现场转化为红灯报警提示;本系统采用蜂鸣器作为声报警提示,当系统检测到的数据符合给定的要求时,现场没有蜂鸣器报警提示;当系统检测到的数据不符合给定的要求时,现场蜂鸣器报警提示9。如图 15图15 光声报警系统电路图4 软件系统设计本系统软件系统设计包过:系统初始化模块,
28、温湿度检测模块,1602LCD显示模块,报警模块,温湿度判断控制模块。系统软件总体流程图如图17图17 系统流程图4.1初始化模块系统初始化模块的主要功能是完成系统的初始化以及设定系统的工作状态,初始化部分包括以下方面的内容:4.1.1 单片机初始化以及各种引脚定义。4.1.2 1602液晶初始化及工作方式。4.1.3 系统进入正常工作状态。4.2温湿度检测模块温湿度检测模块是本系统中的核心模块之一,它负责完成温度和湿度的测量及模拟量转换为数字量的全过程,这也是它为什么重要的原因。数字式温湿度传感器AM2301直接把检测到的模拟量转化为数字量送给单片机,在经过单片机的处理,把温湿度值显示在16
29、02液晶上。温湿度传感器的精确度值直接影响到整个系统的检测与控制,所以本系统采用数字式温湿度传感器AM2301采集温室内的温湿度10。4.3 温湿度判断控制模块温湿度判断控制模块也是系统的核心模块之一,所谓判断控制模块,就是对当前温室内的实际温湿度与给定的温湿度范围进行比较,先进行判断,然后再进行控制,控制模块是决定系统将要进行什么工作的。如温度高于上限时需要降温,低于下限时需要升温,如湿度高于上限时需要降湿,低于下限时需要増湿,同时还要启动警报等等。温湿度判断控制部分的程序整体思路如图18图18 温湿度判断控制程序整体思路4.4 1602液晶显示模块本系统采用1602液晶显示温湿度值,当系统
30、刚开始上电时1602液晶不显示任何数据,等待AM2301的监测数据,双行显示在1602液晶上。第一行显示:Temperature:-。C,第二行显示:Humidity: -%4.5报警模块报警模块具备两项功能,即为报警灯和声音报警。报警灯模块是完成LED有规律的转换,以便从视觉上提醒用户。LED是由单片机控制2个双色LED灯组成的,其转换规律为:1 系统温湿度值在给定的范围时,绿色LED亮。2 系统温湿度值超出给定的范围时,红色LED亮。在LED灯转换的同时,声音报警也会同时启动,可采用延时的方式来延长声音报警的声音。警报灯由2个双色的LED灯组成,一共需要2根数据线,使用单片机控制。要实现的
31、功能是使2个双色LED灯有规律的转换,当系统上电后,系统进行实时的采样,并判断出当前温湿度与给定温湿度之间的差异,如果当前温湿度低于用户给定的下限温湿度值,则说明当前温湿度过低,系统自动启动红色警报灯,通知加温増湿,直至加到所需温湿度值时警报灯熄灭。反之,如果当前温湿度高于用户设定的上限温湿度值,则说明当前温湿度过高,系统也会自动启动警报灯,通知降温减湿,直至降到所需温湿度值时警报灯熄灭。4.6 系统整体软件程序本系统采用C语言编程,使用单片机编程软件:Keil软件11。#include #include typedef unsigned char uint8;#define uchar un
32、signed char #define uint unsigned intsbit RS = P10 ;sbit RW = P11 ;sbit EN = P15 ;sbit BUSY = P07;sbit dht=P20;sbit fine=P21;sbit hot=P12;sbit pwq=P13;sbit ccq=P14;sbit beef=P16;sbit redled=P26;sbit greedled=P24;uint hum,temp;/定义湿度、温度(全局)uchar hum_h,hum_l,temp_h,temp_l,check;/湿度高、低8位,温度高、低8位,校验位ucha
33、r num,num1, bai,shi,ge,bai1,shi1,ge1,cnt=0; /uchar code table= Temperature: ; uchar code table1=Humidity: ;/unsigned char code word1=Welcome to;/unsigned char code word2=www.kingst.org;void delay_us(uint i);/* * 等待繁忙标志*/void wait(void)P0 = 0xFF;doRS = 0;RW = 1;EN = 0;delay_us(1);EN = 1;while (BUSY =
34、 1);EN = 0;/* * 写数据*/void write_data(uint8 dat)wait();EN = 0;P0 = dat;RS = 1;RW = 0;EN = 1;delay_us(1);EN = 0;/* * 写命令*/void write_com(uint8 cmd)wait();EN = 0;P0 = cmd;RS = 0;RW = 0;EN = 1;delay_us(1);EN = 0;/* * 写字符串到LCD*/void w_string(uint8 addr_start, uint8 *p)write_com(addr_start);while (*p != 0
35、)write_data(*p+);/* * 初始化1602*/void Init_LCD1602(void) write_com(0x38); / 16*2显示,5*7点阵,8位数据接口 write_com(0x0C); / 显示器开、光标开、光标允许闪烁write_com(0x06); / 文字不动,光标自动右移write_com(0x01); / 清屏/*DHT*/*-温湿度初始化(准备传送数据)-*/void delay_us(uint i)while(i-); /*-延时(ms级)-*/void delay(uint z)uint i,j;for(i=z;i0;i-)for(j=110
36、;j0;j-);void dht_init()/delay(1000); /延时一会,避开不稳定区域dht=0; /拉低延时500微秒,发送开始信号delay_us(50);dht=1; /释放总线,延时30微秒delay_us(4);while(!dht); /拉低等待while(dht); /拉高等待,即将传送数据uchar read_byte()uchar n,byte=0,dat;for(n=0;n8;n+) while(!dht);delay_us(4); /理论上28us延时70us,此处写2-6都可以dat=0;if(dht) dat=1;while(dht);byte=(byt
37、e=1)|dat; /0return byte; /*-读40位数据-*/void read_hum_temp()dht_init();hum_h=read_byte(); /读湿度hum_l=read_byte();temp_h=read_byte(); /读温度temp_l=read_byte();check=read_byte(); /读校验while(!dht); /等待低电平结束dht=1;/最后拉高总线void zhuanhuan() /提取各位数字uchar a;a=hum_h+hum_l+temp_h+temp_l;if(a=check)/P1=temp_l;hum=temp=
38、0;hum=(hum|hum_h)8)|hum_l;temp=(temp|temp_h)8)|temp_l; bai=(temp/100)+0x30;shi=(temp%100/10)+0x30;ge=(temp%10)+0x30;bai1=(hum/100)+0x30;shi1=(hum%100/10)+0x30;ge1=(hum%10)+0x30;else bai=shi=ge=bai1=shi1=ge1=0; void interrupt_init()TMOD=0X11; TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;TR0=1; T
39、H1=(65536-8000)/256;TL1=(65536-8000)%256;EA=1;ET1=1;TR1=0;void warm_control()/判断控制报警if(temp/1030)|(hum/1060)/判断温湿度值是否符合要求 TR1=1; else TR1=0; redled=1;greedled=0;/*控制模块待加入*if(temp/1030)fine=0; /风扇降温if(hum/1060)ccq=0;/除潮器除潮*/void Display() write_com(0x8c);write_data(bai);write_data(shi);write_data(.);
40、write_data(ge);write_data(C);write_com(0x80+0x49);write_data(bai1);write_data(shi1);write_data(.);write_data(ge1);write_data(%);write_data(H);void main()Init_LCD1602();interrupt_init();/w_string(0x80,word1);/w_string(0xC0,word2);write_com(0x80);for(num=0;num16;num+)write_data(tablenum);write_com(0x8
41、0+0x40); for(num1=0;num116;num1+)write_data(table1num1);while (1)read_hum_temp();delay(3000); /此处的时间不能小于3000,否则读不出!zhuanhuan();warm_control();/hum_h=hum_l=temp_h=temp_l=check=temp=hum=0; Display(); void timer0() interrupt1TH0=(65536-50000)/256;TL0=(65536-50000)%256;cnt+;if(cnt=10) cnt=0; void timer1() interrupt3TH1=(65536-100)/256;TL1=(65536-100)%256;beef=beef;redled=0;gr