当前位置:首页 >> 工学 >>

温湿度传感器的毕业设计


淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
1. 引言
1.1 温室控制系统设计背景

第 1 页 共 40 页

中国农业的发展必须走现代化农业这条道路,随着国民经济的迅速增长,农业的 研究和应用技术越来越受到重视,特别是温室大棚已经成为高效农业的一个重要组成 部分。现代化农业生产中的重要一环就是对农业生产环境的一些重要参数进行检测和 控制。例如:空气的温度、湿度、二氧化碳含量、土壤的含水量等。在农业种植问题 中,温室环境与生物的生长、发育、能量交换密切相关,进行环境测控是实现温室生 产管理自动化、 科学化的基本保证, 通过对监测数据的分析, 结合作物生长发育规律, 控制环境条件,使作物达到优质、高产、高效的栽培目的。以蔬菜大棚为代表的现代 农业设施在现代化农业生产中发挥着巨大的作用。大棚内的温度和湿度参数,直接关 系到蔬菜和水果的生长。国外的温室设施己经发展到比较完备的程度,并形成了一定 的标准,但是价格非常昂贵,缺乏与我国气候特点相适应的测控软件。而当今大多数 对大棚温度、湿度的检测与控制都采用人工管理,这样不可避免的有测控精度低、劳 动强度大及由于测控不及时等弊端,容易造成不可弥补的损失,结果不但大大增加了 成本,浪费了人力资源,而且很难达到预期的效果。因此,为了实现高效农业生产的 科学化并提高农业研究的准确性,推动我国农业的发展,必须大力发展农业设施与相 应的农业工程,科学合理地调节大棚内温度、湿度,使大棚内形成有利于蔬菜,水果 生长的环境,是大棚蔬菜和水果早熟、优质、高效益的重要环节[1]。 影响作物生长发育的环境条件主要包括:温度、湿度、光照、CO2 浓度、土壤等。 所有这些环境条件之间是相互作用、 相互联系、 相互耦合的, 某个控制变量发生改变, 会影响其它控制变量的变化。作物的生长发育是所有这些环境条件综合作用的结果。 温度和湿度一直是人类关注的对象,这两种环境因素时刻影响着人们的生产和生活, 下面主要就温度和湿度对作物的影响进行简略说明。 (1)温度 温室内气温、地温对作物的光合作用、呼吸作用、根系的生长和水分、

养分的吸收有着显著的影响, 因此影响作物生长发育的环境条件中, 以温度最为敏感, 也最为重要,对温室环境控制的研究也是最先从温度控制开始的。不同种类的作物对 温度的要求是不同的,同一作物在不同发育阶段对温度的要求亦有所不同,而且在同 一发育期阶段内对温度的要求也会随着昼夜变化而呈周期性地变化。一般说来在白天 作物进行光合作用需要的温度较高,晚上维持呼吸作用所需的温度要低一些。

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )

第 2 页 共 40 页

作物生长发育适宜的温度,随种类、品种、生育阶段及生理活动的变化而变化。 为了增加光合产物的生成, 抑制不必要的呼吸消耗, 在一天中, 随着光照强度的变化, 实行变温管理是一种很有效的管理方法[1]。 (2)湿度 温室内作物对水分的要求体现为对温室内空气湿度和土壤湿度的要

求。空气湿度用相对湿度来表示,因为相对湿度更能反应事实。根据有关研究记载, 除了阴雨天以外,温室内午后过低的空气湿度会导致作物发生光合作用的午休现象, 因此空气相对湿度的大小直接影响到作物的光合作用,这时就需要增加温室内的空气 湿度。当温室内的空气湿度较高时,可能会诱发一些病虫害。温室中空气湿度的管理 包括增湿和降湿。 土壤湿度对作物的影响也很大。如果土壤中水分过剩,湿度过高,导致土壤中的 氧气含量减少,作物根部呼吸困难,进而危害作物的生长发育。相反,当土壤中含水 量减少时,作物根部吸收的水分就相应的减少,从而阻碍作物的生长,严重时作物出 现萎蔫现象。不同的作物对湿度的要求不同,即使是同一种类在不同发育阶段对湿度 的要求也不尽相同。 土壤湿度的管理就是把包括渗灌、滴灌、微灌等灌溉技术应用到温室中来。传统 的大水漫灌既浪费水资源,又容易使土壤发生板结,提高了室内湿度。在温室中应用 渗灌技术具有灌水均匀,提高地温,保持土壤疏松,降低室内湿度,减轻病害发生, 生育期提前等优点。 从很久以前人类就想出各种方法控制温度和湿度,以满足人们生产生活的需要。 从古代人们通过扇子、雨伞、毛巾等试图去控制温度和湿度到今天高科技发展迅速的 社会所发明出的各种工具,如风扇、空调、加热器等,表明人类一直努力去控制这两 种和人类密切相关的环境因素。现代科技的发展,使得温度和湿度的控制更容易,更 高效,特别是传感器和单片机的应用,使得温度和湿度控制系统性能有了根本性的提 高,精度更高,而且实现了自动化[2]。 人们使用温度计、湿度计来采集温度和湿度,通过人工操作加热、加湿、通风和 降温设备来控制温湿度,这样不但控制精度低、实时性差,而且操作人员的劳动强度 大。即使有些用户采用半导体二极管作温度传感器,但由于其互换性差,效果也不理 想。在某些行业中对温湿度的要求较高,特别是在大型的电力系统中,由于温度过高 或过低引起的元器件失效或由于环境湿度过高而引起的漏电事故时有发生。对电力系 统的可靠运行造成影响,甚至危及到电力系统局部及操作人员的安全。为了避免这些

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
故障,需要在电力设备柜体内安装控温、除湿设备。

第 3 页 共 40 页

1.2

本设计的内容及意义

1.2.1 本设计的主要内容 本设计以 STC89C51 单片机的温度、湿度测量和控制系统为核心来对温湿度进行 实时巡检。单片机能独立完成各自功能,同时能根据主控机的指令对温度进行定时采 集。测量结果不仅能在本地显示,而且可以利用单片机的串行口和 RS-232 总线通信 协议能把温室中的温度、湿度等参数及时上传至上位机,并与设定值进行比较,与设 定值不符时采取相应的处理措施,以实现恒温恒湿环境。 在设计的过程中充分考虑到性价比和精度, 在选用低价格、 通用元件的的基础上, 尽量满足设计要求,并使系统具有高的精度。本控制系统以单片机的控制为核心,实 时监测环境的温度和湿度,并设定了这两个参数的上下限定值,并具有相应的报警系 统,当超过设定的限定值时,单片机控制报警系统进行报警,而且同时驱动继电器打 开相应的开关使相应的执行机构运行。当参数值恢复到设定值范围内时,单片机控制 执行机构停止运行。从而使环境的温湿度在一定的范围内得到控制。 本设计主要内容包括以下几个方面: (1)掌握 STC89C51 单片机的主要功能和特性,以其为核心设计控制系统。 (2)设计简单的人机对话接口系统,如键盘、显示、报警等。 (3)利用 RS232 实现单片机与上位机的通信。 (4)实现系统的可靠性和抗干扰性。 (5)选择适合的传感器,设计相应的信号采集和处理电路。 1.2.2 本设计的意义 传统的方法,人们主要采用温度计、湿度计来采集温度值和湿度值,通过人工操 作加热、加湿、通风和降温设备来控制温湿度。但是由于温度计、湿度计精度比较低, 以及人工读数的人为因素等原因,温湿度检测不仅速度慢,精度低,实时性差,而且 操作人员的劳动强度大。随着科技的发展,采用各种传感器、模数转换器、报警器等 组成的温湿度监测系统的出现,可对环境内的各个测点进行巡回检测,检测速度、精 度有了一定的提高,降低了劳动强度,但由于所采用的传感器灵敏度比较低、稳定性 比较差,致使检测精度、系统可靠性还不够理想,同时在农业生产和农业科研过程中 的很多场合需要对上面提到的物理量进行精确的检测和控制。由于现在基本沿用人工 的测控方法,这就不可避免的存在着劳动强度大、繁琐、测量精度低,并且由于检测

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
报警不及时,给生产和科研工作造成了一定的损失[2]。

第 4 页 共 40 页

近年来,随着单片机功能的日益强大和计算机的广泛应用,人们对参数监测的准 确性、稳定性要求也越来越高。本设计就是针对此问题,设计相对精度高、性能稳定 的、的温度湿度控制装置。该仪器可广泛应用于大棚、仓库、体育场等领域。

2.
2.1

温室控制系统总体设计
测控系统的设计要求

(1) 能够实时采集与显示室内环境温度、湿度等参数。主要参数的监测范围和 检测精度如表 2.1 所示:
表 2.1 主要环境参数

参数名 温度 相对湿度

检测范围 -30℃~+50℃ 10%~100%RH

检测精度 ±0.5℃ ±3.0%RH

(2) 能够根据每天各个阶段以及季节等的外部环境变化通过键盘输入改变对参 数的设置,以满足不同的要求达到最佳效益; (3) 声音报警功能; (4) 根据检测到的信号,实时控制执行机构的开启与关断。 (5) 自带+5 V 和+12 V 直流稳压电源。

2.2

设计目标
本设计是基于 STC89C51 单片机的温湿度智能控制采集系统,主要完成一下主要

任务: (1)选择 STC89C51 单片机,了解其基本特性和功能,使用 STC89C51 实现对温湿 度的智能控制。 (2)使用温度传感器测量环境的温度,进行数据的采集并传送到单片机进行数据 处理,实现范围为-30℃~+50℃温度采集和控制。 (3)使用湿度传感器对现场环境湿度数据采集,由单片机进行数据处理和控制, 实现范围为 10%~100%RH 的湿度控制。 (4)采用串行总线 RS-232 实现单片机和上位机通讯。 (5)设计人机对话接口,键盘、显示和报警系统。 (6)设计执行机构电路,使单片机能自动控制执行机构工作。

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
定的工作。还要尽量实现系统的低成本、低功耗和高精度。

第 5 页 共 40 页

使系统完成特定功能的同时,要保证系统的可靠性和稳定性,使系统能够长期稳

2.3

测控系统的组成及控制原理
本设计是以 STC89C51 单片机为核心的自动控制系统,硬件系统由键盘输入电路、

LCD 显示电路、传感器和 A/D 转换电路、和执行电路、报警电路等组成。 硬件系统原理框图如图 2.1 所示: 键盘输入 MCU STCT8 9C51 LCD 显示

温度传感 器 报警电路 湿度传感 器 A/ D 转 换
图 2.1 测控系统硬件组成原理框图

传感器一般输出的为模拟量,需要通过 A/D 转换,转换为单片机能够接收的数字 信号, 若模拟信号太弱, 还需经过运算放大器放大信号。 键盘输入的是系统参数的上、 下限极限值,若检测到的信号值出现不在此极限区间的情况,单片机就会驱动蜂鸣器 产生报警,此时就需要执行机构控制室内环境相应的改变,使得环境参数重新回到设 定的理想区间。

3.

硬件设计
硬件元器件的选择,必须考虑到功能的实现、器件的适时性、价格和通用性等几

个方面。在电路的设计中,在实现所要求功能的基础上,尽量使电路简单。

3.1

单片机的选择及其特性
计算机的产生加快了人类改造世界的步伐,但是它毕竟体积庞大。单片机(微控

制器)就是在这种情况下诞生的。微控制器,亦称单片机或者单片微型计算机。它是 把中央处理器(CPU)、 随机存取存储器(RAM)、 只读存储器(ROM)、 输入/输出端口(1/0) 等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。它的结构与指令

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
用。

第 6 页 共 40 页

功能都是按照工业控制的要求设计的,在智能控制系统中,微控制器得到了广泛的应

单片机目前己被广泛地应用于家电、医疗、仪器仪表、工业自动化、航空航天等 领域。 市场上比较流行的单片机种类主要有 Intel 公司、Atmel 公司和 Philip 公司的 8951 系列单片机,Motorola 公司的 M6800 系列单片机,Intel 公司的 MCS96 系列单片 机,Microchip 公司的 PIC 系列单片机等。各个系列的单片机各有所长,在处理速度、 稳定性、I/O 能力、功耗、功能、价格等方面各有优劣。这些种类繁多的单片机家族, 给我们单片机的选择也提供了很大的余地。本设计选用 STC89C51 单片机,它是一种 低功耗、低价格,高性能 8 位微处理器[3]。

3.2

STC89C51 系列单片机介绍
STC89C51 是美国 ATMEL 公司生产的低电压,高性能 CMOS 8 位单片机,片内含

4k bytes 的可反复擦写的 Flash 只读程序存储器和 256 bytes 的随机存取数据存储 器 (RAM) 器件采用 ATMEL 公司的高密度、 , 非易失性存储技术生产, 与标准 MCS-51 指 令系统及 8051 产品引脚兼容,片内置通用 8 位中央处理器(CPU)和 Flash 存储单 元,功能强大的 STC89C51 单片机适合于许多较为复杂控制应用场合。 3.2.1 STC89C51 基本特性 STC89C51系列单片机主要性能参数如下: ·与MCS-51产品指令和引脚完全兼容 ·4k字节可重擦写Flash闪速存储器 ·1000次擦写周期 ·全静态操作:0Hz-24MHz ·三级加密程序存储器 ·256字节内部RAM ·32个可编程I/O口线 ·3个16位定时/计数器 ·8个中断源 ·可编程串行UART通道 ·低功耗空闲和掉电模式。 STC89C51 提供以下标准功能: 4k字节Flash 闪速存储器,256字节内部RAM,32 个I/O 口线,3 个16 位定时/

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )

第 7 页 共 40 页

计数器, 一个6 向量两级中断结构, 一个全双工串行通信口, 片内振荡器及时钟电路。 同时,STC89C52 可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。 空闲方式停止CPU 的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工 作。掉电方式保存RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下 一个硬件复位。 3.2.2 STC89C51 单片机的内部组成结构 STC89C51单片机的内部结构如图3.1所示:

图3.1 STC89C51单片机的内部结构

3.2.3 STC89C51 的引脚功能 引脚功能说明如图 3.2: ·Vcc:电源电压 ·GND:地 ·P0 口:P0 口是一组 8 位漏极开路型双向 I/O 口,也即地址/数据总线复用口。 作为输出口用时, 每位能吸收电流的方式驱动 8 个 TTL 逻辑门电路, 对端口 P0 写 “1” 时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时 转换地址(低 8 位)和数据总线复用,在访问期间激活内部上拉电阻。

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
时,要求外接上拉电阻。

第 8 页 共 40 页

在 Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验

图3.2

STC89C52单片机封装图

·P1 口:P1 口是一个带内部上拉电阻的 8 位双向 I/O 口,P1 的输出缓冲级可驱 动(吸收或输出电流)4 个 TTL 逻辑门电路。对端口写“1” ,通过内部的上拉电阻把 端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个 引脚被外部信号拉低时会输出一个电流(IIL)。 STC89C51 不同之处是, 与 P1.0 和 P1.1 还可分别作为定时/计数器 2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX) ,参见 表 3.1。
表 3.1 引脚 P1.0 和 P1.1 的第二功能

引脚号 P1.0 P1.1

功能特性 T2(定时\计数器 2 外部计数脉冲输入),时钟输出 T2EX(定时\计数器 2 捕获\重装载触发和方向控制

Flash 编程和程序校验期间,P1 接收低 8 位地址。 · P2口: P2是一个带有内部上拉电阻的8位双向I/O口, P2的输出缓冲级可驱动 (吸 收或输出电流)4个TTL逻辑门电路。对端口P2写“1” ,通过内部的上拉电阻把端口拉 到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
外部信号拉低时会输出一个电流(IIL)。

第 9 页 共 40 页

在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX @DPTR 指 令)时,P2口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX @RI 指令)时,P2口输出P2 锁存器的内容。 Flash 编程或校验时,P2亦接收高位地址和一些控制信号。 ·P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动 (吸收或输出电流)4个TTL 逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻 拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL) 。 P3 口除了作为一般的 I/O 口线外, 更重要的用途是它的第二功能, 如表 3.2 所示:
表 3.2 引脚 P3 口的第二功能

端口引脚号 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

第二功能 RXD(串行输入口) TXD(串行输出口) /INTO(外中断 0) /INT1(外中断 1) T0(定时/计数器 0) T1(定时/计数器 1) /WR(外部数据存储器写选通) /RD(外部数据存储器读选通)

此外,P3 口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。 ·RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使 单片机复位。 ·ALE/PROG: 当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输 出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6 输出固 定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部 数据存储器时将跳过一个ALE脉冲。对Flash 存储器编程期间,该引脚还用于输入编 程脉冲(PROG) 。 如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )

第 10 页 共 40 页

止ALE 操作。该位置位后,只有一条MOVX 和MOVC指令才能将ALE 激活。此外,该引 脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。 ·PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉 冲。此期间,当访问外部数据存储器,将跳过两次PSEN信号。 · EA/VPP: 外部访问允许。 欲使CPU 仅访问外部程序存储器 (地址为0000H—FFFFH) , EA 端必须保持低电平(接地) 。需注意的是:如果加密位LB1 被编程,复位时内部会 锁存EA端状态。如EA端为高电平(接Vcc端) ,CPU 则执行内部程序存储器中的指令。 Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是 使用12V 编程电压Vpp。 ·XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 ·XTAL2:振荡器反相放大器的输出端[4]。 3.2.4 STC89C51 的存储器 ·中断寄存器: STC89C51有6个中断源,2个中断优先级,IE寄存器控制各中断位,IP寄存器中6 个中断源的每一个可定为2个优先级。 ·数据存储器: STC89C51 有 256 个字节的内部 RAM,80H-FFH 高 128 个字节与特殊功能寄存器 (SFR)地址是重叠的,也就是高 128 字节的 RAM 和特殊功能寄存器的地址是相同的, 但物理上它们是分开的。 当一条指令访问 7FH 以上的内部地址单元时,指令中使用的 寻址方式是不同的, 也即寻址方式决定是访问高 128 字节 RAM 还是访问特殊功能寄存 器。如果指令是直接寻址方式则为访问特殊功能寄存器。 例如,下面的直接寻址指令访问特殊功能寄存器 0A0H(即 P2 口)地址单元。 MOV 0A0H,#data 间接寻址指令访问高 128 字节 RAM,例如,下面的间接寻址指令中,R0 的内容 为 0A0H,则访问数据字节地址为 0A0H,而不是 P2 口(0A0H) 。 MOV @R0,#data 堆栈操作也是间接寻址方式,所以,高 128 位数据 RAM 亦可作为堆栈区使用。 ·定时器 0 和定时器 1: STC89C51 的定时器 0 和定时器 1 的工作方式与 STC89C51 的相同。

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
·定时器 2:

第 11 页 共 40 页

定时器 2 是一个 16 位定时/计数器。它既可当定时器使用,也可作为外部事件 计数器使用,其工作方式由特殊功能寄存器 T2CON 的 C/T2 位选择。定时器 2 有三种 工作方式:捕获方式,自动重装载(向上或向下计数)方式和波特率发生器方式,工 作方式由 T2CON 的控制位来选择。 ·波特率发生器: 当 T2CON 中的 TCLK 和 RCLK 置位时,定时/计数器 2 作为波特率发生器使用。如 果定时/计数器 2 作为发送器或接收器,其发送和接收的波特率可以是不同的,定时 器 1 用于其它功能。若 RCLK 和 TCLK 置位,则定时器 2 工作于波特率发生器方式。 波特率发生器的方式与自动重装载方式相仿,在此方式下,TH2 翻转使定时器 2 的寄存器用 RCAP2H 和 RCAP2L 中的 16 位数值重新装载,该数值由软件设置。 ·中断: STC89C51 共有 6 个中断向量:两个外中断(INT0 和 INT1) ,3 个定时器中断 (定时器 0、1、2)和串行口中断。这些中断源可通过分别设置专用寄存器 IE 的置 位或清 0 来控制每一个中断的允许或禁止。IE 也有一个总禁止位 EA,它能控制所有 中断的允许或禁止。定时器 2 的中断是由 T2CON 中的 TF2 和 EXF2 逻辑或产生的, 当转向中断服务程序时, 这些标志位不能被硬件清除, 事实上, 服务程序需确定是 TF2 或 EXF2 产生中断, 而由软件清除中断标志位。 定时器 0 和定时器 1 的标志位 TF0 和 TF1 在定时器溢出那个机器周期的 S5P2 状态置位,而会在下一个机器周期才查询到 该中断标志。 然而, 定时器 2 的标志位 TF2 在定时器溢出的那个机器周期的 S2P2 状 态置位,并在同一个机器周期内查询到该标志[5]。 · STC89C51 的 直 流 参 数 有 一 定 的 温 度 适 用 范 围 , 见 表 3.3 :
表 3.3 T=-40℃~+85℃ 和 Vcc=5.0V±20%下的直流参数

符号
VL

参数 输入低电压 输入低电压 输入高电压

条件 (Except EA)

最小值 -0.5 -0.5

最大值

单位

0.2VCC-0.1 V 0.2VCC-0.3 V V

VL1
VH

(Except XTAL1,RST)

0.2VCC+0.9 VCC+0.5

VH1

输入高电压

(XTAL,RST)

0.7VCC

VCC+0.5

V

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
VOL VOL1
VOH
输出低电压(P1,2,3) 输出低电压(P0,ALE/PSEN) 输出高电压 输出高电压 I=1.6mA I=32mA I=-25uA I=-300uA 0.75VCC 0.75VCC

第 12 页 共 40 页

0.45 0.45

V V V V

VOH1
I IL

逻辑 0 输入电流(P1,2,3) V=0.45V 逻辑 1 到 0 转换电流(P1,2,3) V=2V 复位下拉电阻 引脚电容 1MHz, 50

-50 -650 300

uA uA K pF

I TL
RST

C IO
I CC
消耗电流 Active Mode,12MHz ·Flash存储器的编程:STC89C51单片机内部有4k字节的Flash PEROM,这个Flash 存储阵列出厂时已处于擦除状态(即所有存储单元的内容均为FFH) ,用户随时可对其 进行编程。编程接口可接收高电压(+12V)或低电压(Vcc)的允许编程信号。低电 压编程模式适合于用户在线编程系统,而高电压编程模式可与通用EPROM编程器兼容。 STC89C51单片机中,有些属于低电压编程方式,而有些则是高电压编程方式,用户可 从芯片上的型号和读取芯片内的签名字节获得该信息,见表3.4。
表 3.4 顶面标记及签名字节

25

mA

Vpp=12V 顶面标记 AT89C52 Xxxx yyww 签名字节 (030H)=1EH (031H)=52H (032H)=FFH

Vpp=5V AT89C52 xxxx-5 yyww (030H)=1EH (031H)=52H (032H)=05H

STC89C51 的程序存储器阵列是采用字节写入方式编程的,每次写入一个字节,要 对整个芯片内的 PEROM 程序存储器写入一个非空字节,必须使用片擦除的方式将整个

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
存储器的内容清除。

第 13 页 共 40 页

图 3.5

STC89C51 编程电路

·程程序序校验:如果加密位 LB1、LB2 没有进行编程,则代码数据可通过地址 和数据线读回原编写的数据,采用如图 3.5 的电路。加密位不可直接校验,加密位的 校验可通过对存储器的校验和写入状态来验证。 ·编程方法: (1)在地址线上加上要编程单元的地址信号。 (2)在数据线上加上要写入的数据字节。 (3)激活相应的控制信号。 (4)在高电压编程方式时,将 EA/Vpp 端加上+12V 编程电压。 (5)每对 Flash 存储阵列写入一个字节或每写入一个程序加密位,加上一个 ALE/PROG 编程脉冲。每个字节写入周期是自身定时的,通常约为 1.5ms。重复 1—5 步骤,改变编程单元的地址和写入的数据,直到全部文件编程结束。 ·Ready/Busy:字节编程的进度可通过“RDY/BSY 输出信号监测,编程期间,ALE 变为高电平“H”后,P3.4(RDY/BSY)端电平被拉低,表示正在编程状态(忙状态) 。 编程完成后,P3.4 变为高电平表示准备就绪状态。 ·芯片擦除:利用控制信号的正确组合并保持 ALE/PROG 引脚 10mS 的低电平脉冲 宽度即可将 PEROM 阵列(4k 字节)和三个加密位整片擦除,代码阵列在片擦除操作中

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
将任何非空单元写入“1” ,这步骤需再编程之前进行[11]。

第 14 页 共 40 页

3.3

传感器的选型及其性能特征
用于测温的传感器种类繁多, 但大多是模拟传感器, 在以往组建温度采集系统时,

由于经传感器输出的是模拟信号,系统必须接入 A/D 转换器,由此增加了构件系统的 复杂性且成本较高。 温度的检测方法,一般采用热电偶、热敏电阻以及集成温度传感器等测温元件。 热电偶的工作原理: 两种不同成份的导体两端经焊接,形成回路,直接测温端叫工作 端 ,接线端叫冷端,也称参比端。当工作端和参比端之间存在温差时,就会在回路 中产生热电动势,接上显示仪表,仪表上就会指示出热电偶所产生的热电动势的对应 温度值。热敏电阻的工作原理:热敏电阻的阻值随温度的升高而成非线性急剧变化, 一般具有负的温度系数, 其阻值随温度升高而急剧减小, 只有少数具有正的温度系数。 集成温度传感器的工作原理:集成温度传感器实质上是一种半导体集成电路,它是利 用晶体管的 b 一 e 结压降的不饱和值 Vbe 与热力学温度 T 和通过发射极电流 I 的关系 实现对温度的检测[12]。 热电偶和热敏电阻的测量精度都比较高, 成本比较低, 而且测量的范围也比较宽, 但是它容易受到测量场所以及环境的限制,高温或长期使用时由于环境的影响会使其 性能下降, 需要定期检查与更换, 给实际应用带来了很大不便。 经过论证及多次实验, 本设计决定采用 SHT11 传感器[6]。 3.3.1 温度传感器 SHT11 SHT11 的内部结构和工作原理: 温湿度传感器 SHT11 将温度感测、湿度感测、信号变换、A/D 转换和加热器等功 能集成到一个芯片上,其内部结构如图七所示。该芯片包括一个电容性聚合体湿度敏 感元件和一个用能隙材料制成的温度敏感元件。这两个敏感元件分别将湿度和温度转 换成电信号,该电信号首先进入微弱信号放大器进行放大;然后进入一个 14 位的 A /D 转换器;最后经过二线串行数字接口输出数字信号。SHT11 在出厂前,都会在恒 湿或恒温环境巾进行校准,校准系数存储在校准寄存器中;在测量过程中,校准系数 会自动校准来自传感器的信号。此外,SHT11 内部还集成一个加热元件,加热元件接 通后能将 SHT11 的温度升高 5℃左右,同时功耗也会有所增加。此功能主要为了比较 加热前后的温度和湿度值,能综合验证两个传感器元件的性能。在高湿(>95%RH)环

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
温度升高、相对湿度降低,较加热前,测量值会略有差异[7]。

第 15 页 共 40 页

境中,加热传感器可预防传感器结露,同时缩短响应时间,提高精度。加热后 SHT11

图 3.6 SHT11 内部结构

微处理器是通过二线串行数字接口和 SHT11 进行通信的。通信协议和通用的 I2C 总线协议是不兼容的,因此需要用通用微处理器 I/O 口模拟该通信时序。微处理器 对 SHT11 的控制是通过 5 个 5 位命令代码来实现的,命令代码的含义如表 3.7 所列。
表 3.7 SHT11 控制命令代码

SHT11 应用设计: 微处理器采用二线串行数字接口和温湿度传感器芯片 SHT11 进行通信,所以硬 件接门设计非常简单;然而,通信协议是芯片厂家自己定义的,所以在软件设计中, 需要用微处理器通用 I/O 口模拟通道。SHT11 通过二线数字串行接口来访问,所以 硬件接口电路非常简单。需要注意的地方是:DATA 数据线需要外接上拉电阻,时钟 线 SCK 用于微处理器和 SHT11 之间通信同步,由于接口包含了完全静态逻辑,所以 对 SCK 最低频率没有需求;当工作电压高于 4.5V 时,SCK 频率最高为 10 MHz,而当 工作电压低于 4.5 V 时,SCK 最高频率则为 1 MHz[11]。硬件连接如图 3.8 所示。

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )

第 16 页 共 40 页

图 3.8 SHT11 硬件连接

应用信息: (1)工作与贮存条件 超出建议的工作范围可能导致高达 3%RH 的临时性漂移信号。返回正常工作 条后,传感器会缓慢地向校准状态恢复。要加速恢复进程/可参阅 7.3 小节的“恢 复处理”。在非正常工作条件下长时间使用会加速产品的老化过程。 (2)暴露在化学物质中 电阻式湿度传感器的感应层会受到化学蒸汽的干扰,化学物质在感应层中 的扩散可能导致测量值漂移和灵敏度下降。在一个纯净的环境中,污染物质会缓 慢地释放出去。下文所述的恢复处理将加速实现这一过程。高浓度的化学污染会 导致传感器感应层的彻底损坏。 (3)恢复处理 置于极限工作条件下或化学蒸汽中的传感器,通过如下处理程序,可使其 恢复到校准时的状态。在 50-60℃和< 10%RH 的湿度条件下保持 2 小时(烘干) ; 随后在 20-30℃和>70%RH 的湿度条件下保持 5 小时以上。 (4)温度影响 气体的相对湿度,在很大程度上依赖于温度。因此在测量湿度时,应尽可能 保证湿度传感器在同一温度下工作。如果与释放热量的电子元件共用一个印刷线 路板,在安装时应尽可能将 DHT11 远离电子元件,并安装在热源下方,同时保持 外壳的良好通风。为降低热传导,DHT11 与印刷电路板其它部分的铜镀层应尽可 能最小,并在两者之间留出一道缝隙。 (5)光线 长时间暴露在太阳光下或强烈的紫外线辐射中,会使性能降低。 (6)配线注意事项 DATA 信号线材质量会影响通讯距离和通讯质量,推荐使用高质量屏蔽线。

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
焊接信息

第 17 页 共 40 页

手动焊接,在最高 260℃的温度条件下接触时间须少于 10 秒。 注意事项: 避免结露情况下使用,长期保存条件:温度 10-40℃,湿度 60%以下[10]。

3.4

单片机外围控制电路设计
在本系统中单片机的外围电路较多, 可分为以下几部分: 看门狗电路、 系统电源、

温湿度信号采集电路、执行机构电路 LED 显示电路、键盘输入及报警电路、与上位机 通信的接口电路图等。 3.4.2 电源电路 在本设计中主要用到+5V,+12V,15V。为得到所需电压,系统采用了电压转换 芯片LM7815、LM7805和LM7812,三个芯片的输入分别取+19V、+23V和+12V,经 转换后输出端输出分别为系统所需的+15V、+5V和+12V电压,电源电路图见图3.9

图 3.9 电源电路

3.4.3 LCD 显示电路 (1)简介 工业字符型液晶,能够同时显示 16x02 即 32 个字符。 (16 列 2 行) 注:为了表示的方便 ,后文皆以 1 表示高电平,0 表示第电平。 (2)管脚功能 1602 采用标准的 16 脚接口,其中: 第 1 脚:VSS 为电源地 第 2 脚:VDD 接 5V 电源正极 第 3 脚:V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对 比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对 比度) 。

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
存器。

第 18 页 共 40 页

第 4 脚:RS 为寄存器选择,高电平 1 时选择数据寄存器、低电平 0 时选择指令寄

第 5 脚:RW 为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第 6 脚:E(或 EN)端为使能(enable)端。 第 7~14 脚:D0~D7 为 8 位双向数据端。 第 15~16 脚:空脚或背灯电源。15 脚背光正极,16 脚背光负极。 3.4.4 执行机构电路 常用的温室环境调控设备主要有以下几种: ①加热系统 ②降温系统 ③加湿系统 ④降湿系统 其电路图相似,现仅示加热系统的电路,电路图分别如图 3.10:

图 3.10 加热电路

图 3.10 中,当反向驱动器 7404 左边输入为高电平时,经 7404 变为低电平,使 发光二极管发光,从而使光敏三极管导通,同时是三极管 9013 导通,因而使继电器 J 的线圈通电,继电器的触点闭合,使交流 220V 电源接通。反之当反向驱动器 7404 左 边输入为低电平时,使继电器触点断开。图中电阻为限流电阻,二极管 D 的作用是保 护晶体管 T。当继电器 J 吸合时,二极管 D 截止,不影响电路工作。继电器释放时, 由于继电器线圈存在电感,这时晶体管 T 已经截止,所以会在线圈的两端产生较高的 感应电压。 此电压的极性为上正下负, 正端接在晶体管的集电极。 当感应电压与与 12V 之和大于晶体管 T 的集电结反向电压时,晶体管 T 有可能损坏。加入二极管 D 后,继 电线圈产生的感应电流由二极管 D 流过,因此,不会产生很高的感应电压,因而使晶

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
体管 T 得到保护[7]。 3.4.5 键盘输入与报警电路

第 19 页 共 40 页

单片机的按键输入一般可分为简单的独立式按键输入及行列式键盘输入两种。独 立式键盘输入适合于按键输入不多的情况,具有占用口线较少、软件编写简单容易等 特点。 通常所用的按键为轻触机械开关,正常情况下按键的接点是断开的,当我们按压 按钮时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在 断开时也不会一下子断开。因而机械触点在闭合及断开的瞬间均伴随有一连串的抖 动, 抖动时间的长短由按键的机械特性及操作人员按键动作决定,一般为 5ms~20ms; 按键稳定闭合时间的长短是由操作人员的按键按压时间长短决定的,一般为零点几秒 至数秒不等。 由于该款温湿度计应用于对空气中的温湿度进行测量,当湿度达到某一数值时需 要启动加湿功能,因此需要设定一个湿度值。为此,本设计增加了 4 个按键,其中 K1 光标移位键, 键为确定, 为循环加 1 键, 为循环减 1 键, K2 K3 K4 分别与单片机的 P1.0、 P1.1、P1.2、P1.3 口相连。按键未被按下时,4 个 I/O 口均为高电平;一旦按键按下, 对应的 I/O 口被拉为低电平。以此来实现软件程序设计中的按键扫描。 报警采用单片机外接一个三极管驱动蜂鸣器来实现。

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )

第 20 页 共 40 页

图 3.11 键盘输入电路

图 3.12 报警电路

4.
4.1

温室控制系统软件设计
中断服务程序:

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
开始

第 21 页 共 40 页

P2.0=?

温度转

湿度转

显示 结束

显示

图 4.1 中断服务程序

4.2

主程序

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )

第 22 页 共 40 页

图 4.2 主程序

软件设计的主程序,开始后先经过初始化再根据要求来选择对应的通道,然后结 束。图五为中断服务程序,开始后看 P2.0 等于多少,对应的选择温度转换还是湿度 转换,对应着显示,然后结束。 微处理器和温湿度传感器通信采用串行二线接口 SCK 和 DATA, 其中 SCK 为时钟线, DATA 为数据线。该二线串行通信协议和 I2C 协议是不兼容的。在程式开始,微处理器 需要用一组"启动传输"时序表示数据传输的启动,如图 3 所示。当 SCK 时钟为高电平 时,DATA 翻转为低电平;紧接着 SCK 变为低电平,随后又变为高电平;在 SCK 时钟为 高电平时,DATA 再次翻转为高电平[8]。

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )

第 23 页 共 40 页

图 4.3 数据传输启动程序

4.3

显示原理图

开始 单片机初始 化化化 接 收 数 据 地址校验
Y N

取温湿度给定 值 采样温湿度 值 液晶显示 上 传 数 据
图 4.4 LCD 显示原理图

图 4.4 为软件方面的显示原理图,开始后,单片机经过初始化后接收数据,然后 进行地址校验,校验不合格继续接受数据,校验合格的话取湿度给定值进而采样温湿 度值,然后数码显示后上传数据,继续循环。 温度和湿度值的计算: (1)SHT11 可通过 DATA 数据总线直接输出数字量湿度值。该湿度值称为“相对湿 度”,需要进行线性补偿和温度补偿后才能得到较为准确的湿度值。由于相对湿度数 字输出特性呈一定的非线性,因此为了补偿湿度传感器的非线性,可按下式修正湿度 值:

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
C3 为线性补偿系数,取值如表 4.5 所列。

第 24 页 共 40 页

式中:RHlinear 为经过线性补偿后的湿度值,SORH 为相对湿度测量值,C1、C2、

由于温度对湿度的影响十分明显,而实际温度和测试参考温度 25℃有所不同,所以对 线性补偿后的湿度值进行温度补偿非常有必要。补偿公式如下:

式中: RHtrue 为经过线性补偿和温度补偿后的湿度值, 为测试湿度值时的温度(℃), T t1 和 t2 为温度补偿系数,取值如表 4.6 所列。

表 4.5 湿度线性补偿系数

表 4.6 湿度值温度补偿系数

(2)温度值输出 由于 SHT11 是采用 PTAT 能隙材料制成的温度敏感元件,因而具有非常好的线性 输出。实际温度值可由下式算得: Temperature=d1+d2×SOT 式中:d1 和 d2 为特定系数,d1 的取值和 SHT11 工作电压有关,d2 的取值则和 SHT11 内部 A/D 转换器采用的分辨率有关, 其对应关系分别如表 4.7 和表 4.8 所列[9]。
表 4.7d1 与工作电压关系 表 4.8d2 与分辨率的关系

4.4

C 语言和控制程序设计
软件对整个系统来说是至关重要的,是整个系统的灵魂,整个系统的执行操作都

是在软件的协调指挥下进行的。用于计算机程序设计的语言分为机器语言、汇编语言 和高级语言。本测控系统的软件的编写主要采用 C 语言编写。 本系统软件设计采用模块化的设计思路,即整个系统的程序软件由许多独立的子 程序模块组成,它们之间通过软件接口进行连接。连接的原则是:模块内数据关系紧 凑,模块间数据关系松散,按功能划分模块。

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )

第 25 页 共 40 页

整个软件系统的程序可分为四个大模块,即主程序模块、参数设置程序模块、现 场数据采集显示模块和执行处理程序模块。每个模块都具有一定的功能,每个模块又 可分为许多子模块,既相互独立又相互联系,低级模块可以被高级模块调用。主程序 是整个测控系统中最重要的程序,各个子程序都在主程序的协调指挥下运行,是一个 顺序执行的无限循环程序,可以被任何优先级的中断请求所打断。各个环境参数的测 试和控制指令的判断都在各个测控子程序中进行,主程序的主要功能是实现系统的初 始化、实现系统自检、响应中断请求进而调用数据处理子程序。 主程序如下: /******************************************************************* ********* 文件名称:main.c 版 本:Keil uVision4

控 制 器: STC89C52RC 晶振频率: 12MHz 说 明:基于单片机的温湿度测试仪程序

******************************************************************** ********/

/*includes----------------------------------------------------------------*/ #include <reg52.h> #include <SHT1X.h> #include <intrins.h> #include <LCD1602.h> #include <Button.h> #include <BuzzePhone.h> #include <Simulate_IIC.h> /*defines------------------------------------------------------------------*/ #define Time0_TH0 0xc6 //定义计数器 0 计数寄存器装载的高 8 位

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
值,可自行修改 #define Time0_TL0 值,可自行修改 #define State_Idle #define State_AdjustHumidity #define State_AdjustTemperature 0x00 0x01 0x02 0x0d

第 26 页 共 40 页

//定义计数器 0 计数寄存器装载的低 8 位

//定义空闲状态 //定义湿度调整状态 //定义温度调整状态

/*variable------------------------------------------------------------------*/ unsigned char DHT22_ValueArray[5]; 数组变量 unsigned int unsigned int TemperatureValueLimit; HumidityValueLimit; //定义温度极限值变量 //定义湿度极限值变量 // 定 义 数 据 转 换 值 //定义 SHT22 读取数据的存储

unsigned int Value_Measured; 变量

unsigned int 量 unsigned int 量

TemperatureValue;

//定义 SHT22 的读出温度值变

HumidityValue;

//定义 SHT22 的读出湿度值变

unsigned char ButtonValue; unsigned char CheckValue;

//定义读出的 P1 口按键值变量 //定义温湿度数据效验值变量

unsigned char 变量 unsigned char 变量 unsigned char 量

SweepInterval_Show;

//定义显示扫描时间累加

SweepInterval_Button;

//定义按键扫描时间累加

SweepInterval_Alarm;

//定义报警扫描时间累加变

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
unsigned char State_Control = 0;

第 27 页 共 40 页

//定义状态转换变量

bit Flag_Show bit Flag_Alarm bit Flag_Button

= 0; = 0; = 0;

//定义显示处理标志变量 //定义报警处理标志变量 //定义按键处理标志变量

/******************************************************************* ********** 函数名称:System_DelayMicrosecond(unsigned int Number) 入口参数:unsigned int Number 出口参数:无 函数功能:延时 Number 个机器周期 备 同 ******************************************************************** *********/ void System_DelayMicrosecond(unsigned int Number) { while (Number--) { _nop_(); _nop_(); } } 注:此延时函数是使用 1T 的指令周期进行计算,与传统的 12T 的 MCU 不

/******************************************************************* ********** 函数名称:Time0_Initialization(void) 函数功能:定时器 0 初始化函数 备 注:定时器工作于方式 1,定时器计数寄存器 16 位全部用于计数

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
**********/ void Time0_Initialization(void) { TMOD=0x21; TH0=Time0_TH0; TL0=Time0_TL0; TR0=1; ET0=1; EA=1; } //T0,工作方式 1 //装载定时器 0 寄存器高 8 位值 //装载定时器 0 寄存器低 8 位值 //开启 T0 定时器 //允许 T0 定时器中断 //开启总中断允许

第 28 页 共 40 页

********************************************************************

/******************************************************************* ********** * 函数名称: LCD1602_ShowTemperatureAndHumidity(void)

* 输入参数: void * 输出参数: void * 功能书名: LCD1602 显示湿度和温度值 ******************************************************************** **********/ void LCD1602_ShowTemperatureAndHumidity(void) { Value_Measured = SHT1X_MeasuredData(HUM_TEST,55); HumidityValue = SHT11_ConvertFor12BitHumidity(Value_Measured); LCD1602_DisplayTwoNumber(3,0,HumidityValue); LCD1602_SetCursorPosition(16,0); Value_Measured = SHT1X_MeasuredData(TEM_TEST,210); TemperatureValue = SHT11_ConvertFor14BitTempeture(Value_Measured); LCD1602_DisplayTwoNumber(12,0,TemperatureValue); LCD1602_SetCursorPosition(16,0);

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
}

第 29 页 共 40 页

/******************************************************************* ********** * 函数名称: Handle FunctionButton(void)

* 输入参数: void * 输出参数: void * 功能书名: 功能按键处理函数 ******************************************************************** **********/ void Handle_FunctionButton(void) { if(State_Control == State_AdjustTemperature) { State_Control = State_Idle; } else { State_Control++; } } /******************************************************************* ********* 函数名称:KeyHandle_AffirmControl(void) 入口参数:void 出口参数:void 函数功能:确认按键处理函数 ******************************************************************** ********/ void KeyHandle_AffirmControl(void)

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
{ State_Control = State_Idle;//进入调整空闲状态 }

第 30 页 共 40 页

/******************************************************************* ********** * 函数名称: Handle_UpButton(void)

* 输入参数: void * 输出参数: void * 功能书名: 向上按键处理函数 ******************************************************************** **********/ void Handle_UpButton(void) { switch(State_Control) { case State_AdjustHumidity: { if(HumidityValueLimit < 99) { HumidityValueLimit = HumidityValueLimit +1; LCD1602_DisplayTwoNumber(3,1,HumidityValueLimit); } else { HumidityValueLimit = HumidityValueLimit; LCD1602_DisplayTwoNumber(3,1,HumidityValueLimit); } LCD1602_SetCursorPosition(2,1); break; }

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
case State_AdjustTemperature: { if(TemperatureValueLimit < 75) {

第 31 页 共 40 页

TemperatureValueLimit = TemperatureValueLimit +1; LCD1602_DisplayTwoNumber(12,1,TemperatureValueLimit); } else { TemperatureValueLimit = TemperatureValueLimit; LCD1602_DisplayTwoNumber(12,1,TemperatureValueLimit); } LCD1602_SetCursorPosition(11,1); break; } default:LCD1602_SetCursorPosition(16,1); break; } } /******************************************************************* ********* * 函数名称: Handle_DownButton(void)

* 输入参数: void * 输出参数: void * 功能书名: 向下按键处理函数 ******************************************************************** **********/ void Handle_DownButton(void) { switch(State_Control) {

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
case State_AdjustHumidity: { if(HumidityValueLimit > 2) {

第 32 页 共 40 页

HumidityValueLimit = HumidityValueLimit-1; LCD1602_DisplayTwoNumber(3,1,HumidityValueLimit); } else { HumidityValueLimit = HumidityValueLimit; LCD1602_DisplayTwoNumber(3,1,HumidityValueLimit); } LCD1602_SetCursorPosition(2,1);break; } case State_AdjustTemperature: { if(TemperatureValueLimit > 1) { TemperatureValueLimit = TemperatureValueLimit -1; LCD1602_DisplayTwoNumber(12,1,TemperatureValueLimit); } else { TemperatureValueLimit = TemperatureValueLimit; LCD1602_DisplayTwoNumber(12,1,TemperatureValueLimit); } LCD1602_SetCursorPosition(11,1);break; } default:LCD1602_SetCursorPosition(16,1);break; }

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
}

第 33 页 共 40 页

/******************************************************************* *********** 函数名称:main() 函数功能:主函数 备 注:

******************************************************************** **********/ void main() { /*************************存储器 AT24C02 初始化************************/ TemperatureValueLimit = IIC_ReadOneByteFromE2PROM(0x01); if(TemperatureValueLimit >= 99) { TemperatureValueLimit = 25; IIC_WriteOneByteToE2PROM(0x01,TemperatureValueLimit); }
/*************************存储器 AT24C02 初始化************************/

HumidityValueLimit = IIC_ReadOneByteFromE2PROM(0x02); if(HumidityValueLimit >= 99) { HumidityValueLimit = 65; IIC_WriteOneByteToE2PROM(0x02,HumidityValueLimit); }
/*-----------------------------LCD160 初始化-----------------------------*/

LCD1602_Initialization();
/*------------------------------清屏 LCD160------------------------------*/

LCD1602_ClearScreen();
/*-----------------------------显示等待界面-----------------------------*/

LCD1602_DisplayOneCharacterString(0,0,"SensorInitialize"); LCD1602_DisplayOneCharacterString(0,1,"LH:40%RH LT:24 C"); LCD1602_DisplayOneCharacter(14,1,0xdf);//显示温度符号

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
LCD1602_DisplayTwoNumber(3,1,HumidityValueLimit);

第 34 页 共 40 页

LCD1602_DisplayTwoNumber(12,1,TemperatureValueLimit); LCD1602_SetCursorPosition(15,0);//光标消隐
/*--------------------------状态控制变量初始化--------------------------*/

State_Control

= State_Idle;

//初始化状态值变量 %RH CT: C");

/*----------------------------清屏显示样板-----------------------------*/

LCD1602_DisplayOneCharacterString(0,0,"CH:

LCD1602_DisplayOneCharacter(14,0,0xdf);//显示温度符号 LCD1602_ShowTemperatureAndHumidity(); //显示测量的温湿度

LCD1602_SetCursorPosition(16,1);//光标消隐 System_DelayMicrosecond(0xff);//延时等待 DHT22 传感器释放 /*------------------------------Time0 初始化 -----------------------------*/ Time0_Initialization(); while(1) {
/*-------------------------按键状态更新操作--------------------------*/

while(Flag_Button) { EA = 0; //关闭总中断

/*------------------------读取按键的状态-------------------------*/

ButtonValue = Check_ButtonState(); switch(ButtonValue) { case 0x01: { Handle_FunctionButton(); IIC_WriteOneByteToE2PROM(0x01,TemperatureValueLimit); BuzzePhone_Music(1,400); IIC_WriteOneByteToE2PROM(0x02,HumidityValueLimit); break;

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
} case

第 35 页 共 40 页

0x02:BuzzePhone_Music(1,200);KeyHandle_AffirmControl();break; case 0x03:BuzzePhone_Music(1,200);Handle_UpButton();break; case 0x04:BuzzePhone_Music(1,200);Handle_DownButton();break; default: } Flag_Button EA = 1; }
/*--------------------------显示状态更新操作-------------------------*/

break;

= 0;

//按键扫描标志变量清零 //打开总中断

while(Flag_Show) { EA = 0; //关闭总中断

LCD1602_ShowTemperatureAndHumidity();//显示温湿度值 switch(State_Control) { case State_Idle:LCD1602_SetCursorPosition(16,1);break; case State_AdjustHumidity:LCD1602_SetCursorPosition(2,1);break; case State_AdjustTemperature: { LCD1602_SetCursorPosition(11,1);break; } default: LCD1602_SetCursorPosition(16,1);break; } Flag_Show = 0; EA = 1; }
/*-------------------------报警状态更新操作--------------------------*/

//显示扫描标志变量清零 //开启总中断

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
while(Flag_Alarm) { EA = 0; //关闭总中断

第 36 页 共 40 页

if(HumidityValue <= (HumidityValueLimit)) { BuzzePhone_Music(2,200);//蜂鸣器发连续的三声报警 } else if(TemperatureValue >= (TemperatureValueLimit)) { BuzzePhone_Music(4,200);//蜂鸣器发连续的三声报警 } Flag_Alarm = 0;//报警标志变量清零 EA = 1; } } } /******************************************************************* ********* 函数名称:time0_Handle(void) interrupt 1 using 1 函数功能:定时器 0 中断处理函数 备 备 注: 定时器 0 计数寄存器计数到 0xff-0xff 时溢出,65535,关闭定时器 0 注:重新装载定时器 0 初始值,置位定时器 0 标志变量,再打开定时器 0 //开启总中断

******************************************************************** *********/ void Time0_Handle(void) interrupt 1 using 3 { TR0 = 0; TH0 = Time0_TH0; 值 TL0 = Time0_TL0; //重新装载定时器 0 寄存器低 8 位 //关闭 T0 定时器 //重新装载定时器 0 寄存器高 8 位

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
值 TR0 = 1; if(SweepInterval_Show >= 20) { Flag_Show = 1; SweepInterval_Show = 0; } else if(SweepInterval_Button >= 10) { Flag_Button = 1;

第 37 页 共 40 页

//开启 T0 定时器 //大约 1s 更新扫描一次

/*---------------------------状态更新判断------------------------------*/

//显示处理标志变量置位 //显示扫描时间变量清零

//大约 30Ms 更新扫描一次

//按键处理标志变量置位 //按键扫描时间变量清零

SweepInterval_Button = 0; } else if(SweepInterval_Alarm >= 30) { Flag_Alarm = 1; SweepInterval_Alarm = 0; } else { SweepInterval_Show++; SweepInterval_Alarm++; SweepInterval_Button++; } }

//大约 2s 更新扫描一次

//报警处理标志变量置位 //报警扫描时间变量清零

//警报扫描时间累加 //显示扫描时间累加 //按键扫描时间累加

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )

第 38 页 共 40 页





为了设计出基于单片机的环境温湿度检测系统,搜集了大量的芯片手册,查阅了 较多的图书资料,复习了所学的课本教材。 对温湿度控制系统的要求,主要是保证温湿度在一定范围内变化,稳定性好,不 振荡,对系统的快速性要求不高。在论文中简单分析了单片机温湿度控制系统设计过 程及实现方法。本系统的温湿度检测系统根据用户设定的范围完成一定范围的温湿度 控制。由信号采集、信号分析和信号处理三个部分,温度检测范围:-30℃-+50℃; 湿度检测范围:10%-100%RH;温度、湿度显示方式 LCD 显示;报警方式:声光报警。 具体包括 A/D 转换、单片机系统、复位电路、温度检测、湿度检测、键盘及显示、 报警电路、温湿度控制电路等部分的设计 因此,探索设计从不同场合的实际要求出发,根据需要扩展系统的功能。 由于第 一次设计基于单片机的系统,虽然完成了基本的设计要求,但在设计过程中遇到了许 多硬件和软件问题还没有完全解决,设计的过程也是模块式的,没有完整系统的总体 规划.后期的探索设计只是从理论上进行了可行性分析,没有做出相应的硬件并调试 符合预期构想。因此,以后还必须加强单片机系统设计的能力,毕业设计只是一个浅薄 的入门。 当然?在设计过程中,应虚心听取他人的建议和意见,对解决设计过程中的 问题都很有帮助.

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )

第 39 页 共 40 页





在本次毕业设计中,我要感谢我的指导老师季老师。他的悉心指导和关怀也让我 学习和研究的兴趣越发浓厚。从论文的开题、研究现有资料直至系统电路图的确定和 论文初稿的审阅修改, 老师都给了很多指导, 让我对设计课题渐渐深入地了解、 认识, 并最终完成了设计任务。同时,季老师严谨态度和负责任的精神深深地感染了我,将 使我终身受益。谨向季老师致以崇高的敬意和衷心的感谢! 同时, 我还要感谢郭严等同学, 在与他们交流的过程中, 我获得了相当大的启发, 共同解决了设计上的疑惑,我也要感谢他们长期以来在生活和学习上对我的关心和帮 助。 感谢在百忙之中评阅本论文的老师,感谢你们提出了宝贵意见使得本论文得以完 善。 再次向所有关心支持帮助过我的老师和同学们表示衷心感谢!

淮 阴 工 学 院 毕 业 设 计 说 明 书( 论 文 )
参 考 文 献

第 40 页 共 40 页

1 胡汉才编著.单片机原理及其接口技术.北京:清华大学出版社,1996 2 康华光.模拟电子技术.北京:高等教育出版社,2002 3 徐惠民等编著.单片微型计算机原理、接口及应用.北京:北京邮电出版社,2000 4 胡健主编.单片机原理及接口技术实践教程.北京:机械工业出版社,2004 5 阎石.数字电子技术.北京:高等教育出版社,2004 6 王兆安、黄俊.电力电子技术. 北京:机械工业出版社,2000 7 杜刚等.微计算机应用(期刊) .2004 年 7 月第 25 卷第 4 期 8 潘新民等编著.微型计算机控制技术.北京:高等教育出版社,2001 9 赵伟军主编.Protel99SE 原理图与 PCB 仿真.北京:机械工业出版社,2005 10 陈杰、黄鸿.传感器与检测技术. 北京:高等教育出版社,2002 11 余孟尝. 数字电子技术基础简明教程[R], 北京, 高等教育出版社, 1999: 196-201. 12 张永瑞,1 版,西安,西安电子科技大学出版社,1994:107-110.


相关文章:
毕业设计温度传感器
毕业设计温度传感器_电子/电路_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 毕业设计温度传感器_电子/电路_工程科技_专业资料。基于单片机的远程温度显示 ...
温湿度传感器系统的原理和设计优秀毕业论文
温湿度传感器系统的原理和设计优秀毕业论文_工学_高等教育_教育专区 暂无评价|0人阅读|0次下载|举报文档 温湿度传感器系统的原理和设计优秀毕业论文_工学_高等教育...
基于DHT11的温湿度控制系统设计_图文
本科毕业设计(论文) 题目: 基于 DHT11 的温湿度检测系统设计 基于 DHT11 的温湿度检测系统设计 摘要 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温...
温湿度传感器毕业设计_图文
温湿度传感器毕业设计_工学_高等教育_教育专区。毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,课程设计,硕士论文,研究生论文 ...
温湿度传感器_课程设计_图文
温湿度传感器_课程设计_工学_高等教育_教育专区。基于单片机的温湿度检测 等级: 湖南工程学院 课程 课程名称 课题名称 设单片机原理与应用 计 环境温、湿度检测系统...
数字式温湿度传感器的应用设计—毕业设计
数字式温湿度传感器的应用设计—毕业设计_工学_高等教育_教育专区。大学本科毕业设计,优秀论文 本科毕业设计 数字式温湿度传感器的应用设计 系 别 专业班级 学生姓名...
温湿度传感器的毕业设计
温湿度传感器的毕业设计_电子/电路_工程科技_专业资料。温湿度传感器淮阴工学院毕业设计说明书( 论文)目录 I 第 I页 共I 页 1. 引言 ... 错误!未定义书签。...
温湿度传感器的设计
温湿度传感器的设计_电子/电路_工程科技_专业资料。基于AT89C51单片机的温湿度传感器设计重庆邮电大学本科毕业设计(论文) 摘 要 SHT11 是贴片封装型的数字温湿度传...
粮仓温湿度检测系统的毕业设计(论文)
温湿度传感器我采用的是DHT11数字温湿传感器,它性价比比较高。学号 毕业设计(论文)粮仓温湿度检测系统设计 教学系: 指导教师: 专业班级: 学生姓名: 二〇一...
ARM温湿度传感器课程设计
2.2 设计原理本次课程设计采用 SHT10 传感器温湿度监测系统,通过 SHT10 检测室内温度,如果检 测到的温度超过设定值时,由 LPC2103 输出控制信号启动相应的中断...
更多相关标签: