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

数字式温湿度传感器的应用设计—毕业设计


本科毕业设计

数字式温湿度传感器的应用设计





专业班级 学生姓名 指导教师 提交日期

I





本文介绍了基于单片机系统的数字式温湿度传感器在社会生产和生活中的应用。 随着社会发展的日新月异,传感器在人们的生产和生活中的运用也越来越广泛。由于 许多场合需要同时使用温度传感器和湿度传感器,因此,作为复合传感器的数字式温 湿度传感器被广泛运用于各个领域和行业。本设计主要介绍以 AT89C52 单片机和 SHT71 温湿度传感器为基础所组成的系统,实现对温湿度的测量,并且通过制冷片 的使用实现对温度的控制, 完成各个部件的电路搭设, 以及对各组成部分的编程工作。 本设计使用了键盘控制和 LED 数码管显示, 体现对应的测控系统的设计方法和手段。 针对许多场合都要求对温湿度的控制,本设计以使用制冷片实现对温度的控制为例, 体现控制系统的设计方法及应用。软件部分采用的并不是传统的汇编语言编程,而是 较为容易和快捷的 C 语言完成软件编程。 关键词:单片机系统,数字式温湿度传感器,AT89C52,SHT71.

II

Abstract
The subject of this article is the application of single-chip microcomputer in production and people’s daily life. As the quick development of our society, Sensor plays a more and more important role in our daily life. As temperature sensor and Humidity sensor are both required on many occasions, Humidity & Temperature Sensor, as a compound sensor, are now being used in various fields and industries. The design is mainly focused on introduction of the system which is based on AT89C52 single-chip microcomputer and SHT71 Humidity & Temperature Sensor. The system could measure the temperature and humidity, control temperature by the usage of film cooling, finish the electric circuit connection and the programming of each component. The design makes advantage of keyboard control and LED digital pipe to show it. At the same time, it reflects the design method and means of relative control system. To satisfy the need for controlling temperature and humidity, the design uses film cooling to complete it, meanwhile, the design method of the controlling system and its application can be embodied. As for the software part, it doesn’t use the traditional compilation language programming, but use C Language to finish the software programming, which is much easier and quicker. Keyword:single-chip microcomputer,Humidity and Temperature Sensor ,AT89C52, SHT71.

III





摘 要 ....................................................................................................................................................... II Abstract ................................................................................................................................................... III 目 录 ..................................................................................................................................................... IV 第一章 绪论 ............................................................................................................................................. 1 1.1 选题的背景和意义 ..................................................................................................................... 1 1.2 本设计的内容与任务 ................................................................................................................. 2 第二章 单片机的选型 ............................................................................................................................. 3 2.1 单片机系统 ................................................................................................................................ 3 2.1.1 MCS-51 单片机 ............................................................................................................... 3 2.1.2 MCS-51 单片机特点、功能简介.................................................................................... 3 2.1.3 扩展部分 ......................................................................................................................... 4 2.2 AT89C52 单片机特点、功能介绍 ............................................................................................. 5 第三章 温湿度传感器 ............................................................................................................................. 7 3.1 传感器的作用和前景 ................................................................................................................ 7 3.1.1 传感器的作用 ................................................................................................................. 7 3.1.2 传感器技术的发展前景 ................................................................................................. 7 3.2 温湿度传感器 ............................................................................................................................ 8 3.3 温湿度一体化传感器 ................................................................................................................. 8 3.4 SHT71 温湿度传感器................................................................................................................. 9 3.4.1 SHT71 简介...................................................................................................................... 9 3.4.2 SHT71 的性能指标.......................................................................................................... 9 3.4.3 SHT71 接口说明............................................................................................................ 10 3.4.4 SHT71 与微控制器数据通讯的校验方法 ....................................................................11 第四章 硬件设计 ................................................................................................................................... 13 4.1 硬件设计系统框图 .................................................................................................................. 13 4.2 稳压电源 .................................................................................................................................. 13 4.3 单片机与 SHT71 传感器的接口设计 ..................................................................................... 14 4.3.1 SHT71 的引脚和内部构成 ............................................................................................ 14 4.3.2 SHT71 与微处理器的接口设计 .................................................................................... 15 4.3.3 AT89C52 单片机与 SHT71 传感器的接口设计........................................................... 16 4.3.4 时钟电路 ....................................................................................................................... 17 4.3.5 复位电路 ....................................................................................................................... 18 4.4 单片机键盘和显示部分 ........................................................................................................... 19 4.4.1 键盘部分 ....................................................................................................................... 19 4.4.2 单片机显示部分 ........................................................................................................... 20 4.5 单片机控制接口部分 .............................................................................................................. 22 4.5.1 报警灯和蜂鸣器 ........................................................................................................... 22 4.5.2 制冷片 ........................................................................................................................... 23 第五章 软件设计 ................................................................................................................................... 27 5.1 SHT71 传感器的控制............................................................................................................... 27

IV

5.1.1 SHT71 传感器的基本工作原理 .................................................................................... 27 5.1.2 SHT71 传感器数据测量过程 ........................................................................................ 27 5.1.3 数据处理 ........................................................................................................................ 29 5.2 扩展模块 .................................................................................................................................. 31 5.2.1 键盘控制 ........................................................................................................................ 31 5.2.2 LED 数码管显示............................................................................................................ 33 5.3 控制部分 .................................................................................................................................. 34 结束语 ..................................................................................................................................................... 36 参考文献 ................................................................................................................................................. 37 附录 I ....................................................................................................................................................... 38 附录 II ..................................................................................................................................................... 52 致谢 ......................................................................................................................................................... 55

V

第一章 绪论

第一章 绪论
1.1 选题的背景和意义
随着人类社会的进步和科技的发展,对自动化的要求也越来越高。在生产和生活 中对于温湿度的控制要求也越来越严格。 由于温度与湿度不管是从物理量本身还是在 实际人们的生活中都有着密切的关系,所以温湿度一体的传感器就会相应产生。温湿 度传感器是指能将温度量和湿度量转换成容易被测量处理的电信号的设备或装置。 市场上的温湿度传感器一般是测量温度量和相对湿度量。 市场上常见的温度,湿度传感器以电压输出为主要表现形式,温度湿度与所表现 出来的电压信号呈非线性的关系,且因为材料本身的差异,不同的传感器其非线性曲 线也各不相同,缺乏一个产品应具备的通用性和互换性。 实际中的应用的温湿度传感器要具备以下特点: 1、敏感材料的特性随温湿度的变化有较大的变化,而且该变化易于测量; 2、材料对温湿度的变化有较好一一对应关系,即对除温湿度外其它物理量的变 化不敏感。 3、性能误差及老化小,重复性好,尺寸小; 4、有较强的耐机械、化学及热作用等特点; 5、与被检测的温湿度范围和精度相适应。 温湿度的测量在仓储管理、工业生产制造、智能化建筑、科学研究及日常生活中 被广泛应用,传统的模拟式湿度传感器需设计信号调理电路并需要经过复杂的校准、 标定过程,测量精度难以得到保证,且在线性度、重复性、互换性、一致性等方面往 往不尽人意。SHT71 是瑞士 Sensirion 公司推出的基于 CMOSns 技术的新型温湿度传 感器。该传感器将 CMOS 芯片技术与传感器技术结合起来,发挥出强大的优势互补 作用。 SHT71 智能化数字传感器内部集成了相对湿度传感器、温度传感器、放大器、 14 位 A/D 转换器、校准存储器(E2PROM) 、随机存取存储器(RAM) 、状态寄存器、 循环冗余校验码(CRC)寄存器、二线串行接口、控制单元、加热器及低电压检测电 路。 这样就免去了传感器外围电路, 保证了高可靠性和高稳定性, 提高了看干扰能力。 而且不需要经过复杂的校准、标定过程,测量精度得到保证,且在线性度、重复性、 互换性、一致性等方面都不错。在未来的大型温湿测控系统中将得到广泛的应用。

1

大学本科毕业设计

1.2 本设计的内容与任务
目前温湿度传感器大多使用传统的模拟式传感器, 传统的模拟式湿度传感器一般 不仅要设计信号调理电路,还要经过复杂的校准和标定过程,其测量精度难以保证。 而数字式传感器由于具有强抗干扰性,高可靠性和便于计算机接口等特点,已经被越 来越广泛的应用。比较多人使用的是瑞士 HOPE MICROELECTRONICS 公司生产的 FOST02/FOST02A 温湿度传感器和瑞士 SENSIRION 公司的 SHT7X/SHT1X 系列温湿 度传感器 单片机方面主要是由 51 系列单片机和 AVR 单片机多让人们采用。 本设计是利用 SHT71 传感器设计出一个可用到环境监测和控制的温湿度的控系 统。利用 SHT71 温湿度传感器对环境温度和湿度进行采集和处理,从而实现对环境 温湿度的实时检测和控制。 本设计主要由 SHT71 温湿度传感器、AT89C52 单片机、命令键盘、显示模块和 控制模块组成。主要任务是完成上述各个部分的电路搭设以及程序编写。

2

第二章 单片机的选型

第二章 单片机的选型
2.1 单片机系统
单片机是一种集成在电路芯片, 是采用超大规模集成电路技术把具有数据处理能 力的中央处理器 CPU 随机存储器 RAM、只读存储器 ROM、多种 I/O 口和中断系统、 定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、 A/D 转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。 目前多为使用的是 AVR 单片机和 51 单片机,两者相对而言,51 单片机技术发 展成熟,一直以来都有很多采用,大众对 51 单片机更为熟悉。而近年来越来越多人 选用 AVR 单片机,其原因是 AVR 单片机的性能更好,而且 C 语言编程方面比 51 单 片机更容易。 由于我本人所熟悉的是 51 单片机,所以本设计选用的是 51 单片机,下面就介绍 一下 51 单片机的性能和特点。

2.1.1 MCS-51 单片机
51 单片机是对目前所有兼容 Intel 8031 指令系统的单片机的统称。 该系列单片机 的始祖是 Intel 的 8031 单片机,后来随着 Flash rom 技术的发展,8031 单片机取得了 长足的进展,成为目前应用最广泛的 8 位单片机之一,其代表型号是 ATMEL 公司的 AT89 系列,它广泛应用于工业测控系统之中。目前很多公司都有 51 系列的兼容机型 推出,在目前乃至今后很长的一段时间内将占有大量市场。51 单片机是基础入门的 一个单片机,还是应用最广泛的一种。需要注意的是 52 系列的单片机一般不具备自 编程能力。 当前常用的 51 系列单片机主要产品有: Intel 的:80C31、80C51、87C51,80C32、80C52、87C52 等; ATMEL 的:89C51、89C52、89C2051 等; Philips、华邦、Dallas、Siemens(Infineon)等公司的许多产品

2.1.2 MCS-51 单片机特点、功能简介
MCS-51 系列单片机是 Intel 公司 1980 年推出的高性能的 8 位单片机,MCS-51 的典型产品为 8051.与 8048 系列相比,MCS-51 系列单片机无论是在片内 RAM/ROM 容量、I/O 功能、种类和数量,还是在系统扩展能力方面都有很大的加强。

3

大学本科毕业设计

MCS-51 系列单片机采用模块化实际,各种类型的单片机都是在 8051(基本型) 的基础上通过增、减部件的方式获得的。8051 是片内 ROM 型单片机,内部具有 4KB 掩膜 ROM。在此基础上将掩膜 ROM 模块换成 EPROM 模块衍生出了 8751(EPROM 型) ,去除掩膜 ROM 模块衍生出了 8031(无 ROM 型) 。上面三种类型称为 MCS-51 系列中的 51 子系列。 MCS-51 的存储器 MCS-51 单片机的存储器机构与常规的微型计算机的配置不同,它把程序存储器 和数据存储器分开,各有自己的寻址系统、控制信号和功能。系统的存储器用来存放 程序和始终保留的常数,数据存储器常用来存放程序运行中所需的常数或变量。 MCS-51 的存储器除了有程序存储器 ROM 和数据存储器 RAM 之分外,还有片 内和片外之分。片内存储器集成在芯片内部,是 MCS-51 的主要组成部分;片外存储 器是外接的专用存储芯片,MCS-51 只提供地址和控制命令,需要通过印刷电路板上 的三总线才能联机工作。 (2)I/O 接口 现在的单片机系列中普遍都有多种 I/O 口的型号,在 I/O 口的使用应从其功能和 驱动能力上加以考虑, 对于仅需增加少量的 I/O 口, 最好是选用廉价的 TTL 或 CMOS 电路扩展,这样可提高单片机口线的利用率。对于需扩展更多的 I/O 口,则可选用标 准的 I/O 口扩展芯片 8155、8255 和 8279 等芯片,这些芯片的接口电路简单,编程比 较方便,使用相对灵活,而且价格适中。[5]

2.1.3 扩展部分
MCS-51 系列单片机具有较强的功能, 其芯片内部集成了计算机的基本功能部件, 如 CPU、RAM、程序存储器、并行和串行 I/O 口以及定时/计时器等等。使用非常方 便。通常情况下,对于小型的控制系统及检测系统,利用一片单片机就足够。但是在 许多情况下,对于一些特殊要求的应用系统,要考虑到传感器、伺候控制接口以及人 机对话接口等的需要,最小应用系统常常不能满足要求。往往还需要扩展一些外围芯 片,以补充片内硬件资源的不足。系统扩展是单片机应用系统硬件设计中最常遇到的 问题。系统扩展就是实现相应芯片的接口和编程。 MCS-51 系统扩展有程序存储器(ROM)扩展、数据存储器(RAM)扩展、I/O 口扩展、中断系统扩展以及其他特殊功能扩展。 (1)键盘部分 本设计需要通过键盘控制来实现对量的控制。 键盘是十分重要的人机对话的组成 部分,是人向机器发出指令、输入信息的必需设备。 键盘分编码和非编码键盘。 键盘上闭合键的识别由专用的硬件译码器实现并产生
4

第二章 单片机的选型

键编号或键值的称为编码键盘,如 BCD 码键盘,ASCII 码键盘等;靠软件识别的称 为非编码键盘。 (a)独立式键盘 每一个按键的电路是独立的,占用一条数据线。这种键盘占用硬件资源多,适合 少量按键的情况。 独立式按键接口有中断方式的独立式按键工作状态和查询方式的独立式按键工 作状态,都是按键直接与微处理器连接,通过读 I/O 口,判定个 I/O 口的电平状态, 即可识别按下的按键。 (b)矩阵式键盘 相对于独立式键盘而言,矩阵式键盘的应用可节省 I/O 端口。矩阵式键盘适用于 按键数量较多的场合,它由行线和列线组成,按键位于行、列的交叉点上。 一个 3*3 的行、列结构可以构成一个由 9 个按键的键盘。同理一个 4*4 的行、列 可以构成一个含有 16 个按键的键盘等等。 很明显,在按键数量较多的场合,矩阵键盘与独立按键键盘相比,要节省很多的 I/O 口。矩阵键盘的按键设置在行、列线的交点上,行、列线分别连接到按键开关的 两端。列线通过上拉电阻接到+5V。 平时无按键动作时,列线处于高电平状态,而当由按键按下时,列线电平状态将 由与此列线相连的行线电平决定。行线电平如果为低,则列线电平为低;行线电平如 果为高,则列线电平亦为高。这一点是识别矩阵键盘按键是否被按下的关键所在。 该电路中还有一个与门,这个与门用来产生中断信号,当键盘中没有键按下时, 所有行线的输出都应为低电平, 以区别于列线状态, 当矩阵键盘中任何一只键按下时, 与门输出由高电平变为低电平,向 CPU 申请中断,由于矩阵键盘中行、列线为多键 共用,各按键均影响该键所在行和列的电平。因此各按键彼此将相互发生影响,所以 必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。[3]

2.2 AT89C52 单片机特点、功能介绍
AT89C52 是一个低电压,高性能 CMOS8 位单片机,片内含 8kbytes 的可反复擦 写的 Flash 只读程序存储器和 256bytes 的随机存取数据存储器(RAM) ,器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 MCS-51 指令系统,片内 置通用 8 位中央处理器和 Flash 存储单元。

5

大学本科毕业设计

图 2-1 AT89C52 的引脚结构

AT89C52 有 40 个引脚,32 个外部双向输入/输出(I/O)端口,同时内含 2 个外 中断口, 3 个 16 位可编程定时计数器,2 个全双工串行通信口, 2 个读写口线, AT89C52 可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和 Flash 存储器 结合在一起,特别是可反复擦写的 Flash 存储器可有效地降低开发成本。 AT89C52 提供以下标准功能:8K 字节 Flash 闪速存储器,256 字节内部 RAM, 32 个 I/O 口线,3 个 16 位定时/计数器,一个 6 向量两极中断结构,一个全双工串行 通信口,片内振荡器及时钟电路。同时,AT89C52 可降至 0Hz 的静态逻辑操作,并 支持两种软件可选的节电工作模式。空闲方式停止 CPU 的工作,但允许 RAM,定时 /计数器,串行通信口及中断系统继续工作。掉电方式保存 RAM 中的内容,但振荡器 停止工作并禁止其它所有部件工作直到下一个硬件复位。[8] AT89C52 作为 51 单片机的一个经典款型,使用面很广,许多设计都采用这款单 片机。本设计采用 AT89C52,从性能上考虑,AT89C52 的技术成熟,稳定性好。而 且存储器容量足够满足本设计要求。还有一点就是价格低廉。

6

第三章 温湿度传感器

第三章 温湿度传感器
3.1 传感器的作用和前景
人们通常将能把被测物理量或化学量转化为与之有确定对应关系的电量输出的 装置称为传感器, 这种技术称为传感技术。 传感器输出的信号有不同的形式, 有电压、 电流、频率、脉冲等,以满足信息的传输、处理、记录、显示和控制等要求。

3.1.1 传感器的作用
传感器是测量装置和控制系统的首要环节。 如果没有传感器对原始参数进行精确 可靠的测量,那么无论是信号转换或信息处理,或者最佳数据的显示和控制,都将称 为一句空话。可以说,没有精确可靠的传感器,就没有精确可靠的自动检测和控制系 统。现代电子技术和电子计算机为信息转换和处理提供了及其完善的手段,使检测和 控制技术发展到崭新的阶段。 但是如果没有各种精确可靠的传感器去检测各种原始数 据并提供真实的信息,那么,电子计算机也无法发挥其应有的作用。如果把计算机比 喻成人的大脑,那么传感器就是人的五官。

3.1.2 传感器技术的发展前景
传感器技术所涉及的知识非常广泛,渗透到各个学科领域。但是它们的共性是利 用物理定律和物质的物理、化学和生物特性,将非电量转换成电量。所以如何采用新 技术、 新工艺、 新材料以及探索新理论, 以达到高质量的转换效能, 使总的发展途径。 由于科学技术迅猛发展,工艺过程自动化程度越来越高,因此对测控系统的精度 提出更高的要求。近年来,微型计算机组成的测控系统已经在许多领域得到应用,而 传感器作为微型机的接口必须解决相容技术,根据这些时代特点,传感器将向以下几 个方向发展。 (1)高精度:为了提高测控精度,必须使传感器的精度尽可能的高。 (2)小型化:很多测试场合要求传感器具有尽可能小的尺寸。 (3)集成化:集成化传感器有两种类型。一种是将传感器与放大器、温度补偿 电路等集成在同一芯片上,既减小体积,又增加抗干扰能力;另外一种是将同一类的 传感器集成在同一芯片上构成二维阵列式传感器,或称面型固态图像传感器,它可以 测量物体的表面状况。 (4)数字化:为了使传感器与计算机直接联机,致力于数字式传感器研究是很

7

大学本科毕业设计

重要的。 (5)智能化:智能化传感器是传感器与微型计算机结合的产物,它兼有检测与 信息处理功能。与传统传感器相比它有很多特点,它的出现时传感器技术发展中的一 个飞跃。国外已经有商业化的智能传感器,我国也开始了智能传感器的研究工作。

3.2 温湿度传感器
温湿度传感器是指能将温度量和湿度量转换成容易被测量处理的电信号的设备 或装置。市场上的温湿度传感器一般是测量温度量和相对湿度量。 热电式传感技术是将温度变化转换成电量变化的一种技术。在各种传感器中,热 电式传感器是应用最为广泛的一种,如家电、医疗、国防、科研、航空技术、工业生 产等领域,凡是需要调温、控温、测温的地方都要用到它。一般热电式传感器有热敏 电阻、热电偶、铜电阻、热点开关、铂电阻、温敏二极管、温敏三极管、温敏晶闸管、 集成温度传感器。 湿度是指大气中的水蒸气含量, 通常采用相对湿度和绝对湿度两种表示方法绝对 湿度是指单位空间中所含水蒸气的绝对含量、浓度或者密度,一般用符号 AH 表示。 相对湿度是指被测气体中蒸气压和该气体在相同温度下饱和水蒸气压的百分比, 一般 用符号 RH 表示。相对湿度给出大气的潮湿程度,它是一个无量纲的量,在实际使用 中多使用相对湿度这一概念。 一般多使用的湿敏传感器是氯化锂湿敏电阻和半导体陶 瓷湿敏电阻。

3.3 温湿度一体化传感器
由于温湿度是人们日常接触的两个最重要的参数,而且一般彼此不可分离。因此, 分成两个各自独立的传感器和仪表往往给工作带来不便,而一体化的温湿度传感器与 配套仪表甚受用户欢迎。 曾有人企图设计制造一种既能测温度,又能测湿度的单一敏感元件,但至今仍未见 到有一个能上市的,可见难度之大,问题的关键是如何把两种功能参数区分开来。所以 全世界都在同一传感器内分别采用测温、测湿两种敏感元件。 这样温湿度一体化传感器的发展方向首先就是选用优质热敏、湿敏元件,这点前 已论及,于此不再重复。其次是需要有先进的电路和测量、控制、显示等配套仪表。 在市场上这类商品很多,比较多人使用的是瑞士 HOPE MICROELECTRONICS 公司 生产的 FOST02/FOST02A 温湿度传感器和瑞士 SENSIRION 公司的 SHT7X/SHT1X 系列温湿度传感器。

8

第三章 温湿度传感器

3.4 SHT71 温湿度传感器
3.4.1 SHT71 简介
SHT71 是瑞士 Sensirion 公司推出的基于 CMOSens 技术的新型温湿度复合传感 器。它是一种全新的基于智能传感器设计理念的新型传感器, 该传感器将温度、湿度 传感器、信号调理、数字变换、串行数字通信接口、数字校准全部集成到一个高集成 度、体积极小的芯片当中, 利用它可以同时测量目标对象的温度和湿度, 并实现数字 式输出。在现代工业中,利用微控制器进行数据通讯的工业控制越来越广泛。特别是 由于传输距离、现场状况等诸多可能出现的因素的影响, 微控制器与传感器之间的通 讯数据常会发生无法预测的错误。为了防止错误所带来的影响, 在数据的接收端必须 进行差错校验。本文基于温湿度内漏检测系统而编写的传感器 SHT71 和微控制器之 间的串行通讯系统,介绍了一种软件差错校验方案—循环冗余校验法,克服了传统差错 检验法对数据行或列的偶数个错误不敏感、漏判概率高等缺点,使校验过程既简单实 用又成本低廉。 它应用专利的工业 COMS 过程微加工技术(CMOSens?) ,确保产品具有极高的 可靠性与卓越的长期稳定性。 传感器包括一个电容式聚合体测湿元件和一个能隙式测 温元件, 并与一个 14 位的 A/D 转换器以及串行接口电路在同一芯片上实现无缝连接。 因此,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。 内部结构主要包括了相对湿度传感器、温度传感器、放大器、14 位 A/D 转换器、 校准存储器(E2PROM) 、随机存取存储器(RAM) 、状态寄存器、循环冗余校验码 (CRC)寄存器、二线串行接口、控制单元、加热器及低电压检测电路。 工作原理: 首先利用两只传感器分别产生相对湿度或温度的信号, 然后经过放大, 分别送至 A/D 转换器进行转换、校准和纠错,最后通过二线串行接口将相对湿度或 温度的数据输送至微控器。

3.4.2 SHT71 的性能指标
温湿度传感器、信号放大调理、A/D 转换、I2C 总线接口全部集成于一个芯片上 (CMOSens 技术) ; 全校准相对湿度及温度值输出; 工业标准 I2C 总线数字输出接口; 具有露点值计算输出功能; 免外围元件;

9

大学本科毕业设计

卓越的长期稳定性; 湿度值输出分辨率为 14 位,温度值输出分辨率为 12 位,可编程降至 12 位和 8 位; 可靠的 CRC 数据传输校验功能; 片内装载的校准系数,保证 100%的互换性。 电源电压:2.4V~5.5V; 电流消耗:测量 0.55mA,平均 0.28mA,睡眠 0.3mA。

型号 SHT 71

测湿精度[%RH] ±3.0

测温精度 [℃]在 25℃ ±0.4

封装 4-pin 单排直插

表 3-1 SHT71 封装信息

3.4.3 SHT71 接口说明

图 3-1 典型应用电路

SHT71 的封装形式为小体积 4 脚单线封装, 其引脚说明如下: a) SCK: 串行时钟输入; b) VDD: 2.4~5.5 V 电源端; c) GND: 接地端; d)DATA: 双向串行数据线。 传感器通过串行数字通信接口(SCK 和 DATA)可与任何种类微处理器、微控制器 系统连接, 减少了传感器接口开发时间及降低了硬件成本。 电源引脚:SHT71 的供电电压为 2.4~5.5V。传感器上电后,要等待 11ms 以越 过“休眠”状态。在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增 加一个 100nF 的电容,用以去耦滤波。 串行接口(两线双向): SHT71 的串行接口, 在传感器信号的读取及电源损耗方面, 都做了优化处理;但与 I2C 接口不兼容,详情参见 FAQ 。 串行时钟输入(SCK):SCK 用于微处理器与 SHTxx 之间的通讯同步。由于接口 包含了完全静态逻辑,因而不存在最小 SCK 频率。 串行数据(DATA):DATA 三态门用于数据的读取。DATA 在 SCK 时钟下降沿之
10

第三章 温湿度传感器

后改变状态,并仅在 SCK 时钟上升沿有效。数据传输期间,在 SCK 时钟高电平时, DATA 必须保持稳定。为避免信号冲突,微处理器应驱动 DATA 在低电平。需要一个 外部的上拉电阻(例如:10kΩ )将信号提拉至高电频。上拉电阻通常已包含在微处 理器的 I/O 电路中。 发送命令:用一组“启动传输”时序,来表示数据传输的初始化。它包括:当 SCK 时钟高电平时 DATA 翻转为低电平,紧接着 SCK 变为低电平,随后是在 SCK 时钟高电平时 DATA 翻转为高电平。

图 3-2 “启动传输”时序

后续命令包含三个地址位(目前只支持“000” ) ,和五个命令位。SHT71 会以下 述方式表示已正确地接收到指令:在第 8 个 SCK 时钟的下降沿之后,将 DATA 下拉 为低电频(ACK 位) 。 在第 9 个 SCK 时钟的下降沿之后,释放 DATA(恢复高电平) 。 [1] 命令 预留 温度测量 湿度测量 读状态寄存器 写状态寄存器 预留 令前等待至少 11ms
表 3-2 SHT71 命令集

代码 0000x 00011 00101 00111 00110 0101x-1110x

软复位,复位接口,清空状态寄存器,即清空为默认值下一次命 11110

3.4.4 SHT71 与微控制器数据通讯的校验方法
由于现场工作环境一般较恶劣 ,存在各种干扰源, 为了保证数据传输的可靠性 ,在 SHT71 内部集成了循环冗余校验(CRC2Cyclic Redundancy Check)硬件电路。CRC 是 一种强有力的错误检测技术,在传送信息时,发送方根据所发送的信息的具体内容计算 出一个称为 CRC 的值,并连同信息串一起发送;而接收方则根据接收到的信息串用同 样的方法生成一个 CRC 值,若与收到的 CRC 值一致,则可以认为信息传送正确。使用
11

大学本科毕业设计

CRC 不能保证 100%检测到错误,但它可以极大地增加发现错误的机会,而且它要求极 少的硬件消耗就能实现,所以 CRC 被广泛作为校验手段。SHT71 采用的是 CRC 码(又 称为多项式码),它能检测出下列错误: 所有的双错、奇数位错、突发长度小于等于 8 的突发错、绝大部分突发长度较长 的突发错。测量完温度(或湿度)后,根据测量的信息生成一个 CRC 值,然后一同发送到 微控制器中去。微控制器根据接收到的信息按照同样的方法生成一个 CRC 值,若与接 收到的 CRC 值一致,则可以认为信息传送正确;否则要求传感器重新测量数据然后再 按同样的方式发送。 计算算法如下: a)初始化 CRC 寄存器中的值为 00H; b)将传输或接收的数据位与 bit7 比较; c)如果该数据位与 bit7 相同,将 CRC 寄存器中的值向右移位,bit0 =‘0’ 。否则将 CRC 寄存器中的值向右移位,然后将 bit4 和 bit5 反相,bit0 =‘1’ ; d)传输或接收新的数据位,然后重复(b) ; SHT71 生成的 CRC 值被完全倒转(bit0 = bit7 ,bit1 = bit6 ,. . . ,bit7 = bit0) 。根据 SHT71 的 CRC 值生成算法原理,在微控制器中用软件来实现 CRC 校验。

12

第四章 硬件设计

第四章 硬件设计
4.1 硬件设计系统框图
SHT71 传感器与单片机的连接只需两条线。则本系统框图如下:

图 4-1 硬件设计框图

4.2 稳压电源
在整个单片机系统设计中,电源设计是需要首先考虑的,这决定系统是采用单电 源方案还是多电源方案,系统的消耗有无特殊规定等。不同的电源方案决定整个系统 的方案选择。 本设计采用 AMS1117 稳压器。AMS1117 是一个正向低压降稳压器,在 1A 电流 下压降为 1.2V。 AMS1117 有两个版本:固定输出版本和可调版本,固定输出电压为 1.5V、1.8V、 2.5V、 2.85V、 3.0V、 3.3V、 5.0V,具有 1%的精度; 固定输出电压为 1.2V 的精度为 2%。 AMS1117 内部集成过热保护和限流电路 , 是电池供电和便携式计算机的最佳选 择。 AMS1117 的特点: 1)固定输出电压为 1.5V、1.8V、2.5V、2.85V、3.0V、3.3V、5.0V 和可调版本, 具有 1%的精度 ; 2)固定输出电压为 1.2V 的精度为 2% ; 3)低漏失电压:1A 输出电流时仅为 1.2V ; 4)限流功能; 5)过热切断;
13

大学本科毕业设计

6)温度范围:-40°C~125°C 。 稳压电源电路图:

图 4-2 稳压电源电路图

AMS1117 是一个低漏失电压调整器,它的稳压调整管是由一个 PNP 驱动的 NPN 管组成的,漏失电压定义为:VDROP=VBE+VSAT。 AMS1117 有固定和可调两个版本可用,输出电压可以是:1.2V,1.5V,1.8V, 2.5V,2.85V,3.0V,3.3V,和 5.0V。片内过热切断电路提供了过载和过热保护,以防 环境温度造成过高的结温。 为了确保 AMS1117 的稳定性,对可调电压版本,输出需要连接一个至少 22μ F 的 钽电容。 对于固定电压版本, 可采用更小的电容, 具体可以根据实际应用确定。 通常, 线性调整器的稳定性随着输出电流增加而降低。[11] 本设计采用的电源是 5V 的稳压电源, 所以稳压电源输出端 VOUT 选择输出的电 压为 5V。由于 AMS1117 的输入电压是 15V 以下,所以输入电压 VIN 为 15V 以下。 稳压电源的输出端 VOUT 将接到单片机系统的输入端,即图 4-5 的输入端 Vcc。

4.3 单片机与 SHT71 传感器的接口设计
4.3.1 SHT71 的引脚和内部构成
SHT71 传感器是一款由多个传感器模块组成的单片全校准数字输出相对湿度和 温度传感器。 SHT71 的内部结构如图 4-3 所示,主要包括了相对湿度传感器、温度传感器、放 大器、14 位 A/D 转换器、校准存储器(E2PROM) 、随机存取存储器(RAM) 、状态 寄存器、循环冗余校验码(CRC)寄存器、二线串行接口、控制单元、加热器及低电 压检测电路等。 SCK 是传感器和微处理器之间同步传输时钟输入端。DATA 三态门用于数据的 读取。DATA 在 SCK 时钟下降沿之后改变状态, 并仅在 SCK 时钟上升沿有效。数据

14

第四章 硬件设计

传输期间,在 SCK 时钟高电平时,DATA 必须保持稳定。为避免信号冲突,微处理器应 驱动 DATA 在低电频。需要一个外部的上拉电阻(10 kΩ ) 将信号提拉至高电频。

图 4-3 SHT71 内部结构框图

图 4-4 SHT71 的引脚

SHT71 传感器需要一个 2.4 至 5.5V 的供电电压。加电后,需要一个 11ms 的睡眠 延迟时间, 在这之前, 不应该向传感器发送命令, 电源 (VDD 和 GND) 间接一个 100nF 的电容。

4.3.2 SHT71 与微处理器的接口设计

图 4-5 SHT71 与微处理器的接口电路

15

大学本科毕业设计

由于 SHT71 的集成化设计,使得其与微控制器的接口电路及其简单。只需 2 个 处理器端口就能实现传感器控制,占微处理器的端口少,可节省大量的引线和逻辑电 路。

4.3.3 AT89C52 单片机与 SHT71 传感器的接口设计
AT89C52 可作为 SHT71 的控制核心,而且接口电路也十分简单。

图 4-6 AT89C52 与 SHT71 的接口电路

P3.0 口作为时钟脉冲的输出口 P3.1 口作为与 SHT71 的数据交换口 由于 AT89C52 不具备 I2C 总线接口,所以使用单片机通用 I/O 口线来虚拟 I2C 总线,利用 P3.0 来虚拟时钟线,利用 P3.1 口线来虚拟数据线 DATA,并在 DATA 端 接入一只 4.7K 的上拉电阻,同时在 VDD 及 GND 端接入一只 100nF 的去耦电容。 AT89C52 是高性能的 CMOS8 位单片机, 有丰富的引脚和功能, 可完全满足 SHT71 的控制需求。它有 8K 的 EEPROM,无需扩展外部存储器,掉电依然可保持数据,方 便测量数据的保存,提高了其安全性。SHT71 是采用 CMOSENS 技术的智能化温湿 度传感器,将传感器元件、信号放大器、模/数转换器、校准数据存储器、I2C 总线等 外围调理电路,全部与温湿度传感器集成在了一个只有几平方毫米的芯片上,这样就 免去了许多的外围电路的设计,也使得总体抗干扰性能增强。

16

第四章 硬件设计

4.3.4 时钟电路
MCS-51 内部有一个高效益的反向放大器,但是要形成时钟,外部还需附加电路。 MCS-51 的时钟产生有两种方式。 在电子学上,通常将含有晶体管元件的电路称作“有源电路” (如有源音箱、有 源滤波器等) ,而仅由阻容元件组成的电路称作“无源电路” 。电脑中的晶体振荡器也 分为无源晶振和有源晶振两种类型。无源晶振与有源晶振的英文名称不同,无源晶振 为 crystal(晶体) ,而有源晶振则叫做 oscillator(振荡器) 。无源晶振是有 2 个引脚的 无极性元件,需要借助于时钟电路才能产生振荡信号,自身无法振荡起来,所以“无 源晶振”这个说法并不准确;有源晶振有 4 只引脚,是一个完整的振荡器,其中除了 石英晶体外,还有晶体管和阻容元件,因此体积较大。 (1)内部时钟方式 利用芯片内部的振荡器,然后再引脚 XTAL1 和 XTAL2 两端跨接晶体振荡器和 微调电容,就构成一个稳定的自激振荡器,其发出的脉冲直接输入单片机得内部时钟 电路。 外接晶振时,电容 C1 和 C2 一般为 30pF 左右。晶体的震荡频率范围是 1.2MHz~12MHz。晶体的震荡频率高,则系统的时钟频率也高,单片机运行速度也很 快。 但反过来运行速度快对存储器的速度要求就高, 对印刷电路板的工艺要求也高 (线 间寄生电容要小) 。MCS-51 在通常情况下,使用震荡频率为 6MHz 的石英晶体,而 12HMz 主要是在高速串行通讯的情况下使用。 内部时钟方式也称无源晶振方式,需要借助于时钟电路才能产生振荡信号,自身 无法振荡起来 无源晶振需要用单片机片内的振荡器,在 datasheet 上有建议的连接方 法。无源晶振没有电压的问题,信号电平是可变的,也就是说是根据起振电路来决定 的,同样的晶振可以适用于多种电压,可用于多种不同时钟信号电压要求的单片机, 而且价格通常也较低,因此对于一般的应用如果条件许可建议用晶体,这尤其适合于 产品线丰富批量大的生产者。无源晶振相对于晶振而言其缺陷是信号质量较差,通常 需要精确匹配外围电路(用于信号匹配的电容、电感、电阻等) ,更换不同频率的晶 体时周边配置电路需要做相应的调整。使用时建议采用精度较高的石英晶体,尽可能 不要采用精度低的陶瓷晶体。 使用时,对于电容的选择有一定的要求: a)当外接晶体振荡器的时候,接地电容一般选择 C1 ? C 2 ? 30 ? 10 pF 。 b)当外接陶瓷振荡器的时候,接地电容一般选择 C1 ? C 2 ? 40 ? 10 pF 。 在实际的硬件电路板设计时,应该保证外接的振荡器和电容尽可能靠近单片机的 XTAL1 和 XTAL2 引脚。这样可以减少寄生电容的影响,是振荡器稳定可靠地为单片

17

大学本科毕业设计

机 CPU 提供时钟信号。如果振荡器连接不当,会导致电路不起振,没有时钟信号产 生。 (2)外部时钟方式 在由多单片机组成的系统中,为了个单片机之间时钟信号的同步,应当引入唯一 的共用外部脉冲信号作为个 = 各单片机的震荡脉冲,这时,外部的脉冲信号时经 XTAL2 引脚注入。 外部时钟信号通过一个二分频的触发器而成为内部时钟信号,要求高、低电平的 持续时间都大于 20ms,且脉冲频率应低于 12MHz。 对于 MCS-51 单片机,情况有些不同,外引脉冲信号需从 XTAL1 引脚注入,而 XTAL2 引脚悬空。 外部时钟方式也称有源晶振方式,是一个完整的振荡器,里面除了石英晶体外, 还有晶体管和阻容元件 。有源晶振不需要 DSP 的内部振荡器,信号质量好,比较稳 定,而且连接方式相对简单(主要是做好电源滤波,通常使用一个电容和电感构成的 PI 型滤波网络, 输出端用一个小阻值的电阻过滤信号即可) , 不需要复杂的配置电路。 相对于无源晶体, 有源晶振的缺陷是其信号电平是固定的, 需要选择好合适输出电平, 灵活性较差,价格相对较高。对于时序要求敏感的应用,还是有源的晶振好,因为可 以选用比较精密的晶振,甚至是高档的温度补偿晶振。

图 4-7 振荡电路

无论采用内部振荡电路还是外部振荡电路, 振荡电路的频率应该满足单片机的工作频 率要求,AT89C52 单片机的工作频率为 0~33MHz。 相对有源晶振,采用无源晶振的成本低廉,体积小,结构简单。而且本设计对于 起振电路的要求不高,所以适合采用无源晶振。 在起振电路设计中所采用的的电容为 103 电容,可满足起振要求。

4.3.5 复位电路
复位是单片机的初始化操作,其主要功能是吧 PC 初始化为 0000H,使单片机从 0000H 单元开始执行程序。出了进入系统的正常初始化意外,当由于程序运行出错或
18

第四章 硬件设计

者操作错误使系统处于死锁状态时,为了摆脱困境,也需按复位键以重新启动。 MCS-51 单片机的 RST 引脚是复位信号的输入端, 复位信号时高电平有效, 其有 效时间应持续 24 个振荡周期(即两个机器周期以上) 。若使用频率为 6MHz 的晶振, 则复位信号持续时间应超过 4μ s 才能完成复位操作。

图 4-8 复位电路

在上电瞬间, RC 电路充电, RST 引脚端出现正脉冲。 只要 RST 引脚端保持 10ms 以上高电平,就能使单片机有效的复位。

4.4 单片机键盘和显示部分
4.4.1 键盘部分
键盘实现向计算机输入数据,传送命令等功能,是人工干预计算机的主要手段。 单片机系统中的键盘接口电路有编码式键盘和非编码式键盘两种,实现方法通常 采用如下四种方式:通过并行接口芯片(8255、8155)与键盘接口;通过串行口与键盘 接口;通过单片机并行口直接与键盘接口;通过 8279 芯片与键盘接口。 独立式按键接口:独立式按键就是各按键相互独立,每个键各接一根输入线,一 根输入线上的按键工作状态不会影响其他输入线上的工作状态, 直接通过检测输入线 的电平状态就可以很容易判断哪个按键被按下了。 独立式按键接口有中断方式的独立式按键工作状态和查询方式的独立式按键工 作状态,都是按键直接与微处理器连接,通过读 I/O 口,判定个 I/O 口的电平状态, 即可识别按下的按键。 此外, 也可以用扩展 I/O 口搭接独立式按键接口电路。 采用 8255 扩展的 I/O 口 和
19

大学本科毕业设计

用三态缓冲器扩展的 I/O 口两种典型的方式。这两种配接方式,都是把按键作为外部 RAM 某一工作单元来对待,通过读片外 RAM 的方法,识别按键的工作状态。 上述独立式按键电路中,各按键开关均采用了上拉电阻,这是为了保证在按键开 关断开时,各 I/O 口线有确定的高电平,当然如输入口线内部已有上拉电阻,则外电 路的上拉电阻可省去。 现在对图所示独立按键盘进行编程,采用软件消抖的方法,以查询工作方式检测 各按键的状态。当有且仅有一键按下时才予以识别,两个或多个键同时按下将不予以 处理。 独立式按键的特点: 独立式按键键盘由于按键的数目较少, 可根据实际需要编码。 而且独立式键盘的效应速度快,效率高,稳定性好。 本设计需要用到的按键不多,独立式键盘就能满足要求,而且独立式键盘相对于 矩阵式键盘来说更为简单,编程也十分容易,所以本设计采用独立式键盘。

图 4-9 键盘接线图

键盘接线如图 4-9 所示,本设计只需用到 6 个按键即可,各个按键的功能在第五 章中有所定义。

4.4.2 单片机显示部分
在单片机系统中,常用的显示器有:发光二极管显示器,简称 LED;液晶显示 器,简称 LCD;荧光管显示器。近年来也开始使用简易的 CRT 接口,显示一些汉字 及图形。前三种显示器都有两种显示结构:段显示和点显示。而发光二极管显示又分 为固定段显示和可以拼装的大型字段显示,此外还有共阳极和共阴极之分等。

20

第四章 硬件设计

三种显示器中, 以荧光管显示器亮度极高, 发光二极管次之, 而液晶显示器最弱, 为被动显示器,必须有外光源。 LED 显示块是由发光二极管显示字段组成的显示器,有 7 段和“米”字段之分。 这种显示块有共阳极和共阴极两种。共阴极 LED 显示块的发光二极管的阴极连接在 一起, 通常此公共阴极接地, 当某个发光二极管的阳极为高电平时, 发光二极管点亮, 相应的段被显示。同样,共阳极 LED 显示块的发光二极管的阳极连接在一起,通常 此公共阳极接正电压。当某个发光二极管的阴极接低电平时,发光二极管点亮,相应 的段被显示。 LED 的显示方式:有 LED 静态显示方式和 LED 动态显示方式。 a)LED 静态显示方式 LED 显示器工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并 接地(或+5V)每位的段选端分别与一 8 位的锁存输出相连。之所以称为静态显示, 使由于显示器中的各位相互独立,而且各位的显示字符一经确定,相应的锁存器的输 出将维持不变,直到显示为另一个字符为止。静态显示器的亮度较高。 静态 LED 显示电路各位可独立显示,只要在该位的段选上保持段选码电平,该 位就能保持相应得显示字符。由于每位分别由一个输出口控制段选码,所以在某一时 间里,每位显示的字符可以各不相同。这种显示方式接口,编程容易,管理简单。但 占用的口线资源较多。如果显示位数增多,静态显示无法时应,一般都采用动态显示 方式。 b)LED 动态显示方式 在多位 LED 显示时,为了简化电路,通常将所有位的段选线相应得并联在一起, 由一个或两个 8 位 I/O 口控制,形成段选线的多路复用。而各位的共阳极或共阴极分 别由相应的 I/O 口线控制,实现各位的分时选通。

图 4-10 LED 动态显示器电路

21

大学本科毕业设计

如图 4-10 所示是本设计的 LED 动态显示器的电路原理图。本设计采用两个 4 位 的数码管组成的显示模块。一个 4 位数码管温度显示,另一个则湿度显示。是若要各 位 LED 能够显示出与本位相应得显示字符,就必须采用扫描显示方式,即在某一时 刻,只让某一位的位选线处于选通状态,而其它各位的位选线处于关闭状态,同时, 段选线上输出相应位要显示字符的字形码,这样同一时刻,4 位 LED 中只有选通的 那一位显示出字符,而其它三位则是熄灭的。同样,在下一时刻,只让下一位的位选 线处于选通状态,而其它各位的位选线处于关闭状态。同时,在段选线上输出相应位 将要显示字符的字形码,则同一时刻,只有选通位显示出相应的字符,而其它各位则 是熄灭的。如此循环下去,就可以使各位显示出将要显示的字符,虽然这些字符是在 不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于人眼有视觉 暂留现象,只要每位显示间隔时间足够短,则可造成多位同时亮的假象,达到显示的 目的。在软件设计中有改善显示效果的程序设计。 LED 不同位显示的时间间隔可以通过定时中断完成。如对 8 位 LED 显示器,扫 描显示频率为 50HZ, 假若显示一位保持 1ms 时间, 则显示完所有 8 位之后, 只需 8ms, 于是另外 12ms CPU 完全可以处理其它工作。 上述保持 1ms 的时间应根据实际情况而 定。不能太小,因为发光二极管从导通道发光有一定的延时,导通时间太小,发光太 弱人眼无法看清。 但也不能太大, 因为毕竟要受限于临界闪烁频率, 而且此时间越长, 占用 CPU 时间也越多。另外,显示位增多,也将占用大量的 CPU 时间,因此动态显 示实质是以牺牲 CPU 时间换取远见和耗能的减少。

4.5 单片机控制接口部分
4.5.1 报警灯和蜂鸣器
单片机不但实现对温湿度传感器 SHT71 数据的采集和处理,并且 LED 显示,而 且承担着对环境温湿度进行实时监测和控制的任务。 在温湿度控制中,我们期望环境的温度和湿度都在一个合适的范围当中,在这个 范围中,我们的设备能正常工作,我们的产品的合格率是最高的。所以设置一个合适 的温湿度范围,并且利用单片机进行编成控制,如果温度或湿度超出这个范围,那么 单片机会控制蜂鸣器来报警。 控制部分原理就是通过利用 SHT71 已经测的并处理过的数据返回到单片机处理 系统中在对其进行与设定值的比较。在与设定值比较过程中,如果传送值与设定值相 比起来在其范围之内则视为正常,如果传送值超出其设定范围之外,则视为不正常。 因此单片机系统对其进行发光灯和报警显示出异常。 单片机给通信口产生高电平使发

22

第四章 硬件设计

光二极管接通,从而使发光二极管闪烁而达到显示的目的。使我们作出相应的温湿度 减弱和增强的措施使达到适合条件,以满足环境需要的要求保证工作的顺利进行。

图 4-11 发光控制接口

图 4-12 蜂鸣器控制接口

4.5.2 制冷片
制冷片也叫热电半导体制冷组件,帕尔贴等。因为制冷片分为两面,一面吸热, 一面散热,只是起到导热作用,本身不会产生冷,所以又叫致冷片,或者说应该是叫 致冷片。

23

大学本科毕业设计

a)珀尔帖效应应用 半导体致冷器是由半导体所组成的一种冷却装置,于 1960 左右才出现,然而其 理论基础 Peltier effect 可追溯到 19 世纪。是由 X 及 Y 两种不同的金属导线所组成的 封闭线路。 通上电源之後,冷端的热量被移到热端,导致冷端温度降低,热端温度升高,这 就是著名的 Peltier effect。 这现象最早是在 1821 年, 由一位德国科学家 Thomas Seeback 首先发现,不过他当时做了错误的推论,并没有领悟到背後真正的科学原理。到了 1834 年,一位法国表匠,同时也是兼职研究这现象的物理学家 Jean Peltier,才发现 背後真正的原因, 这个现象直到近代随著半导体的发展才有了实际的应用, 也就是[致 冷器]的发明。 b)半导体致冷法的原理以及结构: 半导体热电偶由 N 型半导体和 P 型半导体组成。N 型材料有多余的电子,有负 温差电势。P 型材料电子不足,有正温差电势;当电子从 P 型穿过结点至 N 型时,结 点的温度降低,其能量必然增加,而且增加的能量相当于结点所消耗的能量。相反, 当电子从 N 型流至 P 型材料时,结点的温度就会升高。 直接接触的热电偶电路在实际应用中不可用,所以用下图的连接方法来代替,实 验证明,在温差电路中引入第三种材料(铜连接片和导线)不会改变电路的特性。 这样,半导体元件可以用各种不同的连接方法来满足使用者的要求。把一个 P 型半导体元件和一个 N 型半导体元件联结成一对热电偶,接上直流电源后,在接头 处就会产生温差和热量的转移。 在上面的接头处,电流方向是从 N 至 P,温度下降并且吸热,这就是冷端;而在 下面的一个接头处,电流方向是从 P 至 N,温度上升并且放热,因此是热端。 因此是半导体致冷片由许多 N 型和 P 型半导体之颗粒互相排列而成,而 N/P 之间以一般的导体相连接而成一完整线路,通常是铜、铝或其他金属导体,最後由两 片陶瓷片夹起来,陶瓷片必须绝缘且导热良好。 半导体制冷片作为特种冷源,在技术应用上具有以下的优点和特点: 1、不需要任何制冷剂,可连续工作,没有污染源没有旋转部件,不会产生回转 效应,没有滑动部件是一种固体片件,工作时没有震动、噪音、寿命长,安装容易。 2、半导体制冷片具有两种功能,既能制冷,又能加热,制冷效率一般不高,但 制热效率很高,永远大于 1。因此使用一个片件就可以代替分立的加热系统和制冷系 统。 3、半导体制冷片是电流换能型片件,通过输入电流的控制,可实现高精度的温 度控制,再加上温度检测和控制手段,很容易实现遥控、程控、计算机控制,便于组 成自动控制系统。

24

第四章 硬件设计

4、半导体制冷片热惯性非常小,制冷制热时间很快,在热端散热良好冷端空载 的情况下,通电不到一分钟,制冷片就能达到最大温差。 5、半导体制冷片的反向使用就是温差发电,半导体制冷片一般适用于中低温区 发电。 6、半导体制冷片的单个制冷元件对的功率很小,但组合成电堆,用同类型的电 堆串、并联的方法组合成制冷系统的话,功率就可以做的很大,因此制冷功率可以做 到几毫瓦到上万瓦的范围。 7、半导体制冷片的温差范围,从正温 90℃到负温度 130℃都可以实现。 通过以上分析,半导体温差电片件应用范围有:制冷、加热、发电,制冷和加热 应用比较普遍,有以下几个方面: 1、军事方面:导弹、雷达、潜艇等方面的红外线探测、导行系统。 2、医疗方面:冷力、冷合、白内障摘除片、血液分析仪等。 3、实验室装置方面:冷阱、冷箱、冷槽、电子低温测试装置、各种恒温、高低 温实验仪片。 4、专用装置方面:石油产品低温测试仪、生化产品低温测试仪、细菌培养箱、 恒温显影槽、电脑等。 5、日常生活方面:空调、冷热两用箱、饮水机、电子信箱等。此外,还有其它 方面的应用,这里就不一一提了。 本设计所选用的冷却片参数如下: 型号 最大工 最大电流 电堆数 作电压 (A) (V) TEC1-12 703T125
表 4-1 冷却片参数表

最大温 差 Δ Tmax (℃) 67

最大产 冷功率 Qm 29.7

外形尺 电阻范 寸(mm) 围 R(Ω ) (L?W ?H) 40× 40× 4 .5 3.30-4.3 0

127

15.2

3

由于制冷片所需要的工作电流达 3A,单片机的供电电源不足以满足供电要求, 所以在这里使用独立的电源 VCC2。所选用的 VCC2 的电压为 9V,符合冷却片的工 作要求,在电路设计中加入继电器放大电流。

25

大学本科毕业设计

图 4-13 继电器接线图

如图 4-9 所示,制冷片的两个接线端口分别接到两个继电器上的 JD1 和 JD2 上。 在设计中通过程序控制两个继电器的开关,从而达到控制供给制冷片的电流方向,随 而让制冷片选择启动加热或降温的功能。

26

第五章 软件设计

第五章 软件设计
5.1 SHT71 传感器的控制
5.1.1 SHT71 传感器的基本工作原理
SHT71 的基本工作原理是单片机向 SHT71 发出命令,SHT71 利用两只传感器分 别产生相对湿度、温度的信号,然后经过放大,分别送至其内部的 A/D 转换器进行 模/数转换、校准和纠错,最后通过二线串行接口将相对湿度及温度的数据送至单片 机处理。单片机处理数据后进行数字显示并作相应的控制。

5.1.2 SHT71 传感器数据测量过程
a)发送一个命令:在发送命令之前,应先发送一个“传输开始”序列,该序列 组成如图所示。之后发送命令,命令由三位地址位(只支持 000)和 5 位命令组成。 其 5 条命令即是上面已经提到过的:测量湿度(00101) 、测量温度(00011) 、写状态 寄存器(00110) 、读状态寄存器(00111)和软件复位(11110)命令。须指出的是在 8 个 SCK 时钟之后,如果命令接收正确将 DATA 端拉低(ACK 位) 。在第 9 个 SCK 时钟结束后 DATA 恢复高电平。发送命令的时序如图所示。

图 5-1 传输开始序列

图 5-2 命令时序

启动传输指令的程序如下,时序图如图 5-1 // 启动传输指令

27

大学本科毕业设计

// // 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; }

b)测量时序:在 AT89C52 发出一个测量命令( 00000101 为湿度测量命令, 00000011 为温度测量命令)后,微处理器等待 SHT71 测量,大约需要 210ms,这个 时间由 SHT71 内部的振荡器确定。测量完毕后,SHT71 将下拉 DATA 至低电平;接 着 SHT71 和微处理器进行数据传送,当传输完每个字节的测量数据后,由控制器拉 低数据线,表示承认接收的每个字节;接收全部数据是 MSB 在第一位(对 12 位的结 果,数据第一个字节的第 5 个是 SCK 是 MSB 位;对 8 位数据结果,第一字节是无效 的) 。如果 8 位 CRC 校验和不用,控制器可爱测量数据的 LSB 位后将 ACK 变高。如 果 8 位校验和使用,控制器可在测量数据的 LSB 位后面将 ACK 变低。在 CRC 数据 的回答位传输结束后,SHT71 自动返回空闲状态,等待下次开始。 c) 复位时序: 如果传感器传输失败, 下一 SCK 信号将复位串行接口, 当使 DATA 处于高电平时,触发 SCK9 次以上并随后发出一个前述的“传输开始”序列,此时时 序只复位接口,状态寄存器保持它的内容。复位时序如图 5-3 所示

28

第五章 软件设计

图 5-3 复位时序

程序如下: //软复位传感器 { unsigned char error=0; ConnectionReset(); error+=Write_Byte(RESET); return error; } d)状态寄存器与读写时序:SHT71 的状态寄存器是一个 8 位的寄存器,其中 5 位是有用的,三位未用。具体情况如下: D6:电池低压检测位。当 D6=0 时,表示 VCC 大于 2.47V。当 D6=1 时,表示 VCC 小于 2.47V。 D2:加热控制位。当 D2=0 是关断加热器,当 D2=1 时,接通加热器。 D1:再装校准存储器控制位。当 D1=0 时,表示不再装。当 D1=1 时,表示再装。 D0:精确控制位。当 D0=0 时,表示 12 位湿度/14 位温度测量。当 D0=1 时表示 8 位湿度/12 位温度测量。 //复位通讯 //发送复位指令到传感器 //当传感器没有应答的时候 error=1

5.1.3 数据处理
为了将 SHT71 输出的数字量转换成实际物理量需进行相应的数据处理。 a)湿度变换 SHT71 的输出特性呈一定的非线性,为了补偿湿度传感器的非线性以获取准确 数据,可按如下公式修正湿度值: RHlinear=c1+c2?SORH+c3· SORH2 式中 SORH 为传感器相对湿度测量值,系数取值如下: 12 位 SORH :c1=-4 ;c2=0.0405 ;c3=-2.8?10-6 8 位 SORH:c1=-4 ;c2=0.648 ;c3=-7.2?10-4
29

(5-1)

大学本科毕业设计

b)温度补偿 上述湿度计算公式是按环境温度为 25℃进行计算的,而实际的测量温度则在一定 范围内变化,所以应考虑湿度传感器的温度系数,按如下公式对环境温度进行补偿。 RHtrue=(T℃-25) ? (t1+t2?SORH)+RHlinear c)温度变换 由设计决定的 SHT71 温度传感器的线性非常好,故可用下列公式将温度数字输 出转换成实际温度值: 温度=d1+d2?SOT 器的分辨率为 12 位时,d1=-40,d2=0.04。 以上几点的程序如下: // 计算温度[摄氏度]和湿度[%RH] // 输入: // // 输出: // 湿度 [数字输出] (12 位) 温度 [数字输出] (14 位) 湿度 [%RH] 温度 [摄氏度] // for 12 Bit // for 12 Bit // for 12 Bit // for 14 Bit @ 5V // for 14 Bit @ 5V // rh: // t: // rh_lin: // t_C 湿度 [数字输出] 12 Bit 温度 [数字输出] 14 Bit 线性化的湿度 : 温度 [摄氏度] const float C2=+0.0405; const float C3=-0.0000028; const float T1=+0.01; const float T2=+0.00008; float rh=*p_humidity; float t=*p_temperature; float rh_lin; float rh_true; float t_C; t_C=t*0.01 - 40; rh_lin=C3*rh*rh + C2*rh + C1; if(rh_true>100)rh_true=100; if(rh_true<0.1)rh_true=0.1; rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; (5-3) 当电源电压为 5V、温度传感器的分辨率为 14 位时,d1=-40,d2=0.01,当温度传感 (5-2) 当 SORH 为 12 位时 t1=0.01;t2=0.00008,当 SORH 为 8 位时,t2=0.00128

{ const float C1=-4.0;

// rh_true: 进行温度补偿过的湿度

//把数字输出转换成温度值(摄氏度) //把数字输出转换成相对湿度[%RH] //计算温度补偿后的相对湿度值[%RH] //砍掉超过物理可能范围的值

30

第五章 软件设计

*p_temperature=t_C; *p_humidity=rh_true; } d)露点值计算

//返回的温度(摄氏度) //返回的相对湿度

空气的露点值可根据相对湿度和温度值由下面的公式计算: LogEW? (0.66077 ? 7.5? T )? (237.3? T )? (log10(RH)- 2)
Dp ? [(0.66077 - logEW)? 237.3]? (logEW? 8.16077 )

(5-4) (5-5)

露点计算程序如下: //计算露点 // 输入: // 输出: 湿度 [%RH], 温度 [摄氏度] 露点 [摄氏度]

{ float logEx,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); return dew_point;

5.2 扩展模块
5.2.1 键盘控制
键盘部分的使用,首先要定义各个按键,本设计中定义了 6 个按键,分别的功能 是:a、进入设置模式;b、退出设置模式;c、设置位左移一位;d、设置位右移一位; e、设置温度值加一;f、设置温度值减一。 定义键盘功能程序如下: sbit StartSet=P0^0; sbit Left=P0^1; sbit Plus=P0^2; sbit Minus=P0^3; sbit Right=P0^4; sbit FinishSet=P0^5; 键盘操作流程图如下: //进入设置模式 //设置位左移一位 //设置温度值加一 //设置温度值减一 //设置位右移一位 //退出设置模式

31

大学本科毕业设计

图 5-4 键盘操作流程图

图中的其他操作为执行按键的功能,下面我就举一个例子来说明一下。 在进入设置模式以后,如果需要把设置为左移一位时,程序如下: }if(Left==0) { Delay(5000); if(Left==0) { n--; n&=0x03; 区 while(StartSet==0)Display(); } 其他按键的操作步骤也类似, 程序在这里不一一列出, 在附录 I 中有详细源代码。
32

//左移按键按下

//设置的位向移左一位 //移到最左时,再移一次从最右开始左移 //把“设定温度”值放到显示缓冲 //当按键没释放时显示设定的温度

for(i=0;i<4;i++)DispBuffer[i]=SetTemp_bit[i];

第五章 软件设计

5.2.2 LED 数码管显示
数码管显示的程序如下: #define LED P2 #define LED_Section P1 unsigned char DispBuffer[8]={0,0,0,0,0,0,0,0}; void Delay(unsigned int v) { while(v!=0) v--; } void Display(){ unsigned char i=0; unsigned //数码管码表 unsigned char addr[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}; //数码管位选表 for(i=0;i<8;i++) { LED=addr[8];Delay(20);//消除重影 if(i!=2|i!=6){ LED_Section=tab[DispBuffer[i]]; }else{ LED_Section=tab[DispBuffer[i]]-0x08; } LED=addr[i];//打开数码管对应的位 Delay(400); } } 在这段程序中,位选表是为码表和缓冲区之间建立对应关系。程序中有一个公共 显示缓冲区,数据由缓冲区发送至码表。消除重影是为了改善显示效果。 //延时 //显示数字(带小数点) //显示数字 char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示缓冲区 //延时函数

33

大学本科毕业设计

5.3 控制部分
控制接口部分的程序: sbit HeatA=P3^5; sbit HeatB=P3^6; sbit Beeper=P3^4; sbit SignalLED=P3^3; 以上为设置控制端口函数 void HeatUp(){ HeatA=1; HeatB=0; } 以上为制冷片加热函数 void CoolDown(){ HeatA=0; HeatB=1; } 以上为制冷片制冷函数 void Init_Timer0(){ TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; } unsigned char Tcount=0; void Timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; Tcount++; if(Tcount==20) { //定时器第 20 次进中断(1s) //定时器隔 50 毫秒进一次中断 //定时器隔 50 毫秒进一次中断 //制冷片制冷 //制冷片加热

34

第五章 软件设计

MeasureFlag=1; Tcount=0; } }

//控制传感器隔 1 秒测量一下。

定时器设置,目的是为了使传感器每秒使用不超过两次,确保传感器的温漂不影 响使用精度。 还有就是为了恒温,确保温度不超过设定值允许超过的范围,有以下一段程序: Display(); *0.1; { if(Tcount%5==0) { SignalLED=~SignalLED; Beeper=~Beeper; } CoolDown(); }else if(temp_val.f-SetTemp<-0.5){ if(Tcount%5==0) { SignalLED=~SignalLED; Beeper=~Beeper; } HeatUp(); } } } 转换设定温度为一个浮点数以后,把设定温度值于显示温度值相比较,当显示值 超过设定值的 0.5 度时,LED 灯和蜂鸣器会动作,发出报警,同时制冷片会动作,进 行对温度的调节。 //制冷片加热 //LED 灯隔 250ms 闪一次 //蜂鸣器每隔 250ms 响一次 //当前温度比设定温度低 0.5 度以上 //制冷片制冷 //LED 灯隔 250ms 闪一次 //蜂鸣器每隔 250ms 响一次 //显示“显示缓冲区”的内容 SetTemp=SetTemp_bit[0]*100+SetTemp_bit[1]*10+SetTemp_bit[3]+SetTemp_bit[4] //转换设定温度为一个浮点数。 //当前温度比设定温度高 0.5 度以上 if(temp_val.f-SetTemp>0.5)

35

大学本科毕业设计

结束语
历时三个月的毕业设计终于完成了,为了让本设计尽可能完美,在这段时间里我 努力的学习了许多单片机的知识。虽然完成了,但是还是决定不太满意,感觉设计中 还有很多地方可以做得更好的,但是由于时间太紧凑,以及本人自身所掌握的知识不 够深入的原因没有能做出来,为此略感遗憾。 设计的内容不多,主要是单片机和传感器主体部分的电路设计和软件编程,除此 以外还有键盘和显示部分,以及蜂鸣器、报警灯和制冷片这些外部控制部分。每个部 分都是作为典型例子来在设计中体现。虽然内容不多,但是本设计适用于很多场合, 使用的时候只需按要求做适当调整即可。 在软件设计部分,我所使用的是 C 语言编程,由于之前没有学习过 C 编程,为 了完成本设计,我花了很多时间和精力去学习这方面的知识。在完成软件设计后,本 设计也接近完成,反观整个设计,感到自己三个月以来的付出还是值得的。

36

参考文献

参考文献
[1]数字式温湿度传感器 SHT1x/SHT7x 使用指南 [2]零基础学单片机 C 语言程序设计,机械工业出版社,2009.4 [3]单片机典型模块设计实例导航,人民邮电出版社,2008.6 [4]传感技术与应用教程,清华大学出版社,2005.4 [5]单片机原理与接口技术,化学工业出版社,2006.2 [6]基于 AT89C2051 的温湿度控制仪,电子技术,2004 [7]李华.MCS-51 系列单片机实用接口技术[M].电子工业出版社,1999:21-46 [8]AT89C52 单片机资料手册 [9]魏俊奇,数字式温湿度传感器的应用,电子产品世界,1999.5 [10]钟晓伟,宋蛰存.基于单片机的实验室温湿度控制系统设计 [J].林业机械与木 工设备,1001—4462(2010)01-0039-04 [11]AMS1117 稳压器资料手册 [12]何立民,单片机应用技术选编(4)[M].北京航空航天大学出版社,1999:20-30.

37

大学本科毕业设计

附录 I
程序源代码: #include <AT89X52.h> #include <intrins.h> #include <math.h> //---------------------------------------------------------------------------------//SHT 传感器模型变量 //---------------------------------------------------------------------------------enum {TEMP,HUMI}; sbit DATA=P3^1; sbit SCK=P3^0; #define noACK 0 #define ACK 1 //地址 #define STATUS_REG_W 0x06 #define STATUS_REG_R 0x07 #define MEASURE_TEMP 0x03 #define MEASURE_HUMI 0x05 #define RESET typedef union { unsigned int i; float f; } value; bit SetFlag=0; //进入设置模式的标志 0x1e //000 //000 //000 //000 //000 指令 0011 0011 0001 0010 1111 0 读/写 0 1 1 1

bit MeasureFlag=1;//允许测量的标志(控制传感器一秒内只能工作 1 次)

//----------------------------------------------------------------------------------

38

附录 I

char Write_Byte(unsigned char value) //---------------------------------------------------------------------------------// 写一字节数据到串行接口 { unsigned char i,error=0; for (i=0x80;i>0;i/=2) { //8 位数据,按从高位到低位的顺序写入数据线 if (i & value) { DATA=1; }else{ DATA=0; } SCK=1; _nop_();_nop_();_nop_(); SCK=0; } DATA=1; SCK=1; error=DATA; SCK=0; return error; } //---------------------------------------------------------------------------------char Read_Byte(unsigned char ack) //---------------------------------------------------------------------------------//从传感器读一字节数据,并当 ACK=1 是传送一个应答信号。 { unsigned char i,val=0; DATA=1; for (i=0x80;i>0;i/=2) { SCK=1; // 释放数据线 //没有收到传感器的应答时 error=1 //释放数据线, // 等待 SHT 传感器在数据线输入 ACK 信号 // 接收应答信号 // 时钟线输入下降沿信号 //数据在时钟线下降沿载入 SHT 传感器

39

大学本科毕业设计

if (DATA) val=(val | i); SCK=0; } DATA=!ack; SCK=1; _nop_();_nop_();_nop_(); SCK=0; DATA=1; return val; }

//读一位

// 当"ack==1"拉低数据线 // 准备发送应答信号

// 释放数据线

//---------------------------------------------------------------------------------void TransStart(void) //---------------------------------------------------------------------------------// 启动传输指令 // // DATA: // { DATA=1; SCK=0; _nop_(); SCK=1; _nop_(); DATA=0; _nop_(); SCK=0; _nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0; } //开始状态 ___ // SCK : ___| _____ ___ |___| |______ ________ |_______|

40

附录 I

//---------------------------------------------------------------------------------void ConnectionReset(void) //---------------------------------------------------------------------------------// 复位通讯:数据线保持 9 个时钟的高电平,然后跟着启动传输时序 //
// DATA: // _ _ _ _ _ _ _ _ _ ____________________________________ G ________ |_______| ___ |___| ___ |______

// SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______|

{ unsigned char i; DATA=1; SCK=0; for(i=0;i<9;i++) { SCK=1; SCK=0; } TransStart(); } //---------------------------------------------------------------------------------char SoftReset(void) //---------------------------------------------------------------------------------//软复位传感器 { unsigned char error=0; ConnectionReset(); error+=Write_Byte(RESET); return error; } //---------------------------------------------------------------------------------char Read_StatusReg(unsigned char *p_value, unsigned char *p_checksum) //---------------------------------------------------------------------------------//读状态寄存器,带校验和 (8 位) //复位通讯 //发送复位指令到传感器 //当传感器没有应答的时候 error=1 //启动传输命令 // 数据线高电平 //持续 9 个时钟信号

41

大学本科毕业设计

{ unsigned char error=0; TransStart(); *p_value=Read_Byte(ACK); *p_checksum=Read_Byte(noACK); return error; } //---------------------------------------------------------------------------------char Write_StatusReg(unsigned char *p_value) //---------------------------------------------------------------------------------//写状态寄存器,带校验和(8 位) { unsigned char error=0; TransStart(); error+=Write_Byte(*p_value); return error; } //---------------------------------------------------------------------------------char Measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode) //---------------------------------------------------------------------------------//测量(湿度/温度),带校验和 { unsigned error=0; unsigned int i; TransStart(); switch(mode){ //开始传输 //发送指令到传感器 //开始传输 //发送数据到状态寄存器 //传感器没应答的时候 error>=1 error+=Write_Byte(STATUS_REG_W);//发送指令到传感器 //开始传输 //读状态寄存器(8 位) //读校验和(8 位) //传感器无应答的时候 error=1 error=Write_Byte(STATUS_REG_R); //发送指令到传感器

case TEMP : error+=Write_Byte(MEASURE_TEMP); break; case HUMI : error+=Write_Byte(MEASURE_HUMI); break; default : break;

42

附录 I

} for (i=0;i<65535;i++) if(DATA==0) break; //等待传感器结束测量 if(DATA) error+=1; *(p_value) =Read_Byte(ACK); *(p_value+1)=Read_Byte(ACK); return error; } //---------------------------------------------------------------------------------------void Calc_SHT11(float *p_humidity ,float *p_temperature) //---------------------------------------------------------------------------------------// 计算温度[摄氏度]和湿度[%RH] // 输入: // // 输出: // 湿度 [数字输出] (12 位) 温度 [数字输出] (14 位) 湿度 [%RH] 温度 [摄氏度] // for 12 Bit // for 12 Bit // for 12 Bit // for 14 Bit @ 5V // for 14 Bit @ 5V // rh: // t: // rh_lin: // t_C 湿度 [数字输出] 12 Bit 温度 [数字输出] 14 Bit 线性化的湿度 : 温度 [摄氏度] const float C2=+0.0405; const float C3=-0.0000028; const float T1=+0.01; const float T2=+0.00008; float rh=*p_humidity; float t=*p_temperature; float rh_lin; float rh_true; float t_C; t_C=t*0.01 - 40; rh_lin=C3*rh*rh + C2*rh + C1; if(rh_true>100)rh_true=100; if(rh_true<0.1)rh_true=0.1; rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; //或者超时(大约 2 秒无响应则超时) //读第一字节(MSB) //读第二字节(LSB)

*p_checksum =Read_Byte(noACK); //读校验和

{ const float C1=-4.0;

// rh_true: 进行温度补偿过的湿度

//把数字输出转换成温度值(摄氏度) //把数字输出转换成相对湿度[%RH] //计算温度补偿后的相对湿度值[%RH] //砍掉超过物理可能范围的值

43

大学本科毕业设计

*p_temperature=t_C; *p_humidity=rh_true; }

//返回的温度(摄氏度) //返回的相对湿度

//-------------------------------------------------------------------float Calc_DewPoint(float h,float t) //-------------------------------------------------------------------//计算露点 // 输入: // 输出: 湿度 [%RH], 温度 [摄氏度] 露点 [摄氏度]

{ float logEx,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); return dew_point; } //---------------------------------------------------------------------------------//按键功能定义 //---------------------------------------------------------------------------------sbit StartSet=P0^0; sbit Left=P0^1; sbit Plus=P0^2; sbit Minus=P0^3; sbit Right=P0^4; sbit FinishSet=P0^5; //---------------------------------------------------------------------------------//控制接口 //---------------------------------------------------------------------------------sbit HeatA=P3^5; sbit HeatB=P3^6; sbit Beeper=P3^4; sbit SignalLED=P3^3;

44

附录 I

void HeatUp(){ HeatA=1; HeatB=0; } void CoolDown(){ HeatA=0; HeatB=1; } void Init_Timer0(){ TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; } unsigned char Tcount=0; void Timer0() interrupt 1 { Tcount++; if(Tcount==20) { MeasureFlag=1; Tcount=0; } }

//制冷片加热

//制冷片制冷

//定时器隔 50 毫秒进一次中断

//定时器第 20 次进中断(1s) //控制传感器隔 1 秒测量一下。

//---------------------------------------------------------------------------------//显示接口 //---------------------------------------------------------------------------------#define LED P2 #define LED_Section P1

45

大学本科毕业设计

unsigned char DispBuffer[8]={0,0,0,0,0,0,0,0}; void Delay(unsigned int v) { while(v!=0) v--; } void Display(){ unsigned char i=0;

//显示缓冲区 //延时函数

unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 数 码 管码表 unsigned char addr[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}; 选表 for(i=0;i<8;i++) { LED=addr[8];Delay(20);//消除重影 if(i!=2|i!=6){ LED_Section=tab[DispBuffer[i]]; }else{ LED_Section=tab[DispBuffer[i]]-0x08; } LED=addr[i];//打开数码管对应的位 Delay(400); } } //---------------------------------------------------------------------------------void main() { value humi_val,temp_val; unsigned char error,checksum; //主程序 //延时 //显示数字(带小数点) //显示数字 // 数 码 管 位

46

附录 I

unsigned char i,n; unsigned char SetTemp_bit[4]={4,0,0,0}; float SetTemp; Init_Timer0(); ConnectionReset(); while(1) { if(MeasureFlag) { error=0; error+=Measure((unsigned char*) &humi_val.i,&checksum,HUMI); //测量湿度 error+=Measure((unsigned char*) &temp_val.i,&checksum,TEMP); //测量温度 if(error!=0) { ConnectionReset(); } else { humi_val.f=(float)humi_val.i; 浮点型 temp_val.f=(float)temp_val.i; 浮点型 Calc_SHT11(&humi_val.f,&temp_val.f); } MeasureFlag=0; 定时器置位测量标志,才允许再次测量 } if(!SetFlag) { //不在设置模式 DispBuffer[0] = (unsigned char) temp_val.f % 1000 / 100; 到显示缓冲区 DispBuffer[1] = (unsigned char) temp_val.f % 100 / 10; //把温度的十位存 //把温度的百位存 //关闭测量标志,1 秒后 //计算温度和湿度 // 把温度由整形转换成 //把湿度由整形转换成 //出现故障时重置通讯连接 //初始化定时器 //存储设定温度的各位(百位-十分位)

47

大学本科毕业设计

到显示缓冲区 DispBuffer[2] = (unsigned char) temp_val.f % 10; 到显示缓冲区 DispBuffer[3] = (unsigned char) (temp_val.f * 10) % 10; 分位存到显示缓冲区 DispBuffer[4] = (unsigned char) humi_val.f % 1000 / 100; 到显示缓冲区 DispBuffer[5] = (unsigned char) humi_val.f / 10; 到显示缓冲区 DispBuffer[6] = (unsigned char) humi_val.f % 10; 到显示缓冲区 DispBuffer[7] = (unsigned char) (humi_val.f * 10) % 10; 分位存到显示缓冲区 } else { //处于设置模式 if(Left==0) { Delay(5000); if(Left==0) { n--; n&=0x03; 到显示缓冲区 while(StartSet==0)Display(); 示设定的温度 } } if(Right==0) { Delay(5000); // 当按键没释放时 显 //设置的位向移左一位 //移到最左时,再移一次从最右开始左移 //把“设定温度”值放 //左移按键按下 // 把湿度的十 //把湿度的个位存 //把湿度的十位存 //把湿度的百位存 // 把温度的十 //把温度的个位存

for(i=0;i<4;i++)DispBuffer[i]=SetTemp_bit[i];

48

附录 I

if(Right==0) { n++; n&=0x03;

//右移按键按下 //设置的位向右移一位

for(i=0;i<4;i++)DispBuffer[i]=SetTemp_bit[i]; while(StartSet==0)Display(); } } if(Plus==0) { Delay(5000); if(Plus==0) { SetTemp_bit[n]++; //“设定温度”值加一 for(i=0;i<4;i++)DispBuffer[i]=SetTemp_bit[i]; while(StartSet==0)Display(); } } if(Minus==0) { Delay(5000); if(Minus==0) { DispBuffer[n]--; for(i=0;i<4;i++)DispBuffer[i]=SetTemp_bit[i]; //“设定温度”值减一 while(StartSet==0)Display(); } } if(FinishSet==0) { Delay(5000); if(FinishSet==0) { SetFlag=0; //退出设置模式 //减少按键按下 //增加按键按下

49

大学本科毕业设计

n=0; for(i=0;i<4;i++)DispBuffer[i]=SetTemp_bit[i]; “设定温度”值 while(StartSet==0)Display(); } } } if(StartSet==0) { Delay(5000); if(StartSet==0) { SetFlag=1; n=0; for(i=0;i<4;i++)DispBuffer[i]=SetTemp_bit[i]; while(StartSet==0)Display(); } } Display(); //显示“显示缓冲区”的内容 SetTemp=SetTemp_bit[0]*100+SetTemp_bit[1]*10+SetTemp_bit[3]+SetTemp_bit[4]* 0.1; //转换设定温度为一个浮点数。 if(temp_val.f-SetTemp>0.5) { if(Tcount%5==0) { SignalLED=~SignalLED; Beeper=~Beeper; } CoolDown(); }else if(temp_val.f-SetTemp<-0.5){ if(Tcount%5==0) { SignalLED=~SignalLED; Beeper=~Beeper; //LED 灯隔 250ms 闪一次 //蜂鸣器每隔 250ms 响一次 //当前温度比设定温度低 0.5 度以上 //制冷片制冷 //LED 灯隔 250ms 闪一次 //蜂鸣器每隔 250ms 响一次 //当前温度比设定温度高 0.5 度以上 //设置按键使能 //进入设置模式 // 按 键 释 放 前 仍 显 示

50

附录 I

} HeatUp(); } } } //制冷片加热

51

大学本科毕业设计

附录 II
设计电路图

52

致谢

53

大学本科毕业设计

54

第五章 (标题)

致谢
毕业设计已经完成,回首这三个月时间,我感慨万千。本设计不仅仅有我的努力 和汗水,同时也包含了各个方面给予的支持和指导。在此我对他们表示发自内心深深 的感谢。 首先我要感谢曾教导我单片机课程的老师, 同时也是我的指导老师, 王克英老师。 谢谢他一直以来给予的支持和指导,特别是在这三个月以来,为我解决了很多关于本 设计遇到的难题和疑惑。 其次我要感谢我的舍友许垂晓同学,谢谢他在我设计程序部分给予的帮助和指 导。在他的帮助下我完成了令我满意的软件编程部分。 再次,我要感谢大学的图书馆,让我找到足够的相关书籍,有机会学习到有关的 的知识完成本设计。 最后, 我要感谢我的亲人对我精神的支持, 还有关心和帮助我的各位老师同学们。 谢谢你们给予我的鼓励和支持。

55


相关文章:
温湿度检测设计毕业论文
按种类分有数字式 温湿度传感器、无线温湿度传感器等,按应用技术的不同来分有基于 AT89C52 的温湿度采集设计、基于 CAN 总线智能温湿度传感器设计、基于 AT89C...
温湿度传感器系统的原理和设计优秀毕业论文
温湿度传感器系统的原理和设计优秀毕业论文_工学_高等教育_教育专区。届本科生毕业...它应用专用的数字模块采集技术和温湿度传感技 术,确保产品具有极高的可靠性与...
粮仓温湿度检测系统的毕业设计(论文)
毕业设计应用单片机作为控制器设计的温湿度检测系统,由要由温度、湿度采集、...而温湿度传感器我采用的是 DHT11 数字 温湿传感器,它性价比比较高。DHT11 ...
DHT11数字温湿度传感器毕业设计_图文
DHT11数字温湿度传感器毕业设计_工学_高等教育_教育专区。摘 要 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感 器。它应用专用的数字模块...
单片机数字温湿度传感器毕业论文_图文
单片机数字温湿度传感器毕业论文 单片机数字温湿度传感器毕业论文 摘 要 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感 器。它应用专用的数字...
基于DHT11的温湿度控制系统设计_图文
本科毕业设计(论文) 题目: 基于 DHT11 的温湿度检测系统设计 基于 DHT11 的温湿度检测系统设计 摘要 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温...
温湿度传感器的设计
温湿度传感器的设计_电子/电路_工程科技_专业资料。基于AT89C51单片机的温湿度传感器设计重庆邮电大学本科毕业设计(论文) 摘 要 SHT11 是贴片封装型的数字温湿度传...
2013温湿度自动控制毕业设计开题报告
毕业设计(论文)开题报告 学生姓名: 专 逄爽 学号:...温湿度的应用变得越来越普及,在许 多领域中也占据...近年来,利用智能化数字式温湿度传感器以实现温度信息...
温湿度传感器的毕业设计
温湿度传感器的毕业设计_工学_高等教育_教育专区。温湿度传感器淮阴工学院毕业设计说明书( 论文) 1. 引言 1.1 温室控制系统设计背景 第 1 页共 40 页 中国农...
毕业设计(论文)--数字温湿度计的设计
本论文介绍了一种以单片机 AT89C52 为主要控制器件, DHT91 为数字温湿度传感器的新型数字温湿度计。本设计主要包括硬件电路的设计和系统 软件的设计。硬件...
更多相关标签: