目录
1引言
1.1课题背景
1.2课题研究的目的和意义
1.3国内外测温湿技术及单片机发展现状
2系统总体方案设计
2.1系统的设计指标
2.2系统的实现原理
2.3系统的实现方案分析
3 系统硬件设计
3.1 系统总体结构
3.2 单片机简介
3.3 DS18B20和HS1101简介
3.3.1温度传感器DS18B20的引脚介绍
3.3.2 DS18B20内部结构与特点
3.3.3 DS18B20温度测量通信协议
3.4系统硬件设计
3.4.1复位电路模块
3.4.2报警电路模块
3.4.3显示电路模块
3.4.4按键电路模块
3.4.5温度检测电路模块
3.4.6湿度检测电路模块
4系统软件设计
4.1系统主程序设计
4.2 DS18B20和HS1101初始化子程序
4.3 DS18B20和HS1101读取温湿度子程序
4.4 显示数据处理子程序
4.5按键扫描子程序
5 系统软硬件调试
总结
1引言
1.1课题背景
众所周知,随着科学技术的发展和人们生活的需求,近年来单片机的应用范围越来越广阔。一般的度测量不仅设计繁杂,并且精确度极低,而使用单片机让这个问题得到了很好的解决。在现代社会,温湿度是一个至关重要的数据,在农业领域,农作物的生长离不开温度和湿度,为使农作物可以达成农收目标,就必须严格控制农作物生长环境的温湿度;在工业领域,许多需要严格把控温度和湿度的设备只有在特定环境下才能正常工作,因此温湿度的测量也十分重要。而从前的测量方法科学技术太落后,显然不能满足现代产业对温湿度高精确度测量的需求。这几年来科学家们研发了几种测温测湿技术,这些测温测湿技术不仅很好的提高了测量精度,而且大大提升了产品的质量。
因为单片机具有高集成度,通用性优,功能强等卓越的优点,并且体积小,重量轻,耗能少,所以在农业生产和工业生产中得到了广泛应用。本课题就是以单片机作为核心部件进行设计的。
1.2课题研究的目的和意义
测量温湿度的基本方法是使用温湿度计直接读取温湿度,如我们大家经常使用的体温计和空气湿度计。随着工业生产的进步,人们对温湿度的测量有更高的要求。在迅速发展的科学技术中,前沿技术是传感器技术,特别是温湿度传感技术,已经渗透到我们生活的各个层面,温湿度测量在农业生产和工业生产中占有不可撼动的地位,此外在许多科学实验研究中也离不开温湿度的测量。综上所述,测量温湿度具有举足轻重的地位。
单片机在各个领域的应用广阔,而把它作为数字温湿度计的核心部件只是具体应用的一个例子。日下,由于在恶劣的工作环境下对测温湿技术要求的提高,单片机的应用发展越来越受到人们的瞩目。
1.3国内外测温湿技术及单片机发展现状
不可置否,与许多发达国家相比,中国测温湿技术仍旧处于一个较低水平。一般的测温湿技术只能对相对平稳的环境进行温度和湿度的测量,如果用于较恶劣的工作环境重,我国的测温湿技术还达不到规范。然而,随着我国已成为世界第二大经济体,经济实力指数上升,我国电子企业也正欣欣向荣地发展中。
众所周知,单片机是集成在一块芯片上的计算机系统,它包含计算机系统的重要部件和基本功能,如 CPU、并行I/O端口、定时与中断系统、A/D与D/A转换系统等。随着科学技术的迅猛发展,现在许多单片机功能也更加完善。单片机还能与种类繁多的外围电路相连接,如定时器、复位电路、传感器等等,我们应用单片机可以对各种各样的信息进行收集。如连接温度传感器DS18B20和湿度传感器HS1101等芯片,就可以对被测目标进行温度和湿度的测量与监测。
2系统总体方案设计
2.1系统的设计指标
本课题设计的数字温湿度系统要求可以准确即时地对被测目标实行温度和湿度测量,并将其测得的温湿度值显示在LED数码管上,如果超越温湿度合理范围,则通过蜂鸣器报警,同时报警指示灯闪烁,直到温湿度回到规定的范围为止。此外,还能够通过按键自主设置温湿度范围。综上所述,系统设计的要求如下:
1.开机启动,检测各元件是否正常工作。
2.正负温湿度辨别(正温湿度红灯亮,负温湿度绿灯亮)。
3.温湿度测量的基本范围是-30℃~125℃。
4.系统预设上限温湿度32℃,下限温湿度10℃。
5.超越温湿度上下限即开启报警功能,报警灯闪烁,蜂鸣器震动并发声警示,并在负温湿度时蜂鸣器震动较剧烈。
6.支持手动按键设置温湿度上下限。
2.2系统的实现原理
本系统使用温湿度传感器,并与单片机连接构成温湿度测量系统,从而完成温湿度的实时监测。温湿度传感器对温湿度的变化十分敏锐,其可以把测得的温湿度准确即时的转换成一串电路信号,这时我们可以使用显示系统将其测得的温湿度值显示出来,让人们监测和记录。其中,温度传感器DS18B20是一种集成度很高的温度测量元件,其可以根据当前温度环境的变化传输出一串数字信号。显而易见,不同的温度环境下将会有不同的数字信号,通过该信号能够准确的获取当前环境的温度值,从而完成温度的测量。湿度传感器HS1101也同样是一种准确性优异的湿度测量元件,其应用电容的介电常数可伴随环境中的水分含量改变而发生变化,进而收集到环境中湿度值,实现对湿度的测量。
2.3系统的实现方案分析
本系统利使用温度传感器DS18B20作为收集温度信息的测量元件,DS18B20的集成度高,所以该元件需求的外围电路相对简易。并且DS18B20体积小,节省电路板。并且,DS18B20是高封装的温度传感器,可以直接和单片机连接联通。其测温范围为-55℃~+125℃,固有测温分辨率为0.5℃,具有极强的抗干扰能力。另一方面,选用HS1101传感器作为湿度传感器,其工作原理是应用电容的介电常数可伴随环境中的水分含量改变而发生变化,进而收集到环境中湿度值。HS1101具有可靠性高、反馈迅速、稳定性高,适合环境广泛等特点。而单片机作为主要组成部件,但这里采用LED 7位数码管实现温度值的显示,显示温度值清晰直观,便于记录。此外,LED数码管所占空间小,在造价方面来说经济便宜。
3 系统硬件设计
3.1 系统总体结构
本方案设计的系统模块由单片机系统、温湿度传感器模块、数码管显示模块和电源模块组成,其总体结构如图1。
图1 系统结构图
该系统单片机选用AT89C52单片机,并以其为核心,在运行开始时,它先向主机发送初始化指令让温湿度传感器DS18B20和HS1101启动,再发送温湿度转化指令使数字温度传感器DS18B20和湿度传感器HS1101把测得的虚拟温湿度信号转化为数字信号供单片机演算。与此同时,显示器会显示出当前监测出的温度和湿度,当温湿度超出规定的温湿度上下限范围时,报警器就会发出警报。
3.2 单片机简介
单片机经过许多年的逐代升级,现在已经是自动控制理论中的不可或缺的重要部件。对于相关技术人员来说,掌握单片机原理及其应用已经成为必不可少的一项技能,是专业人员必备的能力和素养之一。单片机的应用前景十分广阔,在控制领域、食品储存等方面,都占据着一个十分重要的地位。
ATMEL公司采用国际先进的技术手法生产的AT89C52单片机与一般的单片机有所差异,它不仅是一种8位微控制器,具有耗能低和性能优异的特征,还拥有不易失性的Flash程序储存器。它的主要接口与引脚的特点如下。
其引脚图如图2所示:
P0口:P0口与其他端口不同,它的输出级无上拉电阻。作为通用输出I/O口使用时,输出级是开漏电路,故用其输出去驱动NMOS输入时外接上拉电阻,上拉电阻一般在10KΩ左右即可。这时每一位输出可以驱动4个LS型负载。用作输入时,应先向端口锁存器写1。把P0口用作地址/数据总线时,无需外接上拉电阻。作总线输入时,不需先向端口写1。P0口作总线时,每一位输出可以驱动8个LS型TTL负载。
图2 单片机AT89C52引脚图
P1~P3口:P1~P3口接有上拉负载电阻,它们的每一位输出可以驱动4个LS型TTL负载。用作输出口时,任何TTL或NMOS电路都能以正常的方式驱动89C51系列单片机的P1~P3口。由于它们的输出级接有上拉电阻,因此,在使用时无需外接上拉电阻。由于单片机的端口输出电流一般为几毫安,当用作输出口去驱动一个晶体管的基极时,应在基极和端口之间串联一个电阻,以限制高电平时的输出电流。
P3口用作第二功能:当使用P3口的第二功能时,8个引脚有不同的意义。当某位用作第二功能输入时,该位的锁存器输出端被内部硬件自动置1,并且W在端口不作第二功能输出时保持为1,则与非门3输出低,所以FET截止,该位引脚为高位输入。因此读引脚信号无效,三台缓冲器无效,这样,从引脚输入的第二个能信号,经缓冲器后被直接送给CPU处理。当P3口的某一引脚用作第二功能时,该引脚不能用作通用I/O端口。
P3口各个引脚的第二功能见下表1。
端口引脚 第二功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INT0(外中断0)
P3.3 INT1(外中断1)
P3.4 T0(定时/计时器0外部输入)
P3.5 T1(定时/计时器1外部输入)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据存储器读选通)
表1 P3口的第二功能图
RST: RST是复位信号输入端,高电平有效。当单片机正常工作时,该引脚出现两个机器周期的高电平就会使单片机复位;在上电时,因为振荡器需要一定的起振时间,该引脚的高电平必须保持10ms以上才能保证有效复位。
PROG:为片内程序存储器的编程脉冲输入端,低电平有效。
PSEN:片外程序存储器读选通信号输出端,每个机器周期输出两个负脉冲,低电平有效。在访问片外数据存储器时,该信号不出现。
EA/VPP:EA为片外程序存储器选择输入端,该引脚低电平时,使用外部程序存储器,为高电平时,使用片内程序存储器;VPP为片内程序存储器编程电压输入端。
XTAL1:该引脚接外部晶振和微调电容的一端,与单片机内振荡电路一起,产生由外部晶振决定的振荡频率。在使用外部时钟时,该引脚输入外部时钟脉冲。
XTAL2:该引脚接外部晶振和微调电容的另一端,XTAL2接内部反向放大器的输出端,因此在使用外部时钟时,该引脚接地。
3.3 DS18B20和HS1101简介
温湿度传感器是众多传感器中最常见的一种,早期采用的是模拟温湿度传感器,如冷敏电阻,伴随环境温度的改变,它的阻值也按照相应的函数关系发生线性变化,经过收集电阻两端的电压,再套入一些函数关系式就可以计算出当前环境温度。
DS18B20是美国DALLAS半导体公司推出的第一个支持“一线总线”接口的温度传感器,它具有微型化、耗能低、性能高、不易被外界干扰、易配置微处理器等优点,可直接把温度转换成一串数字信号上传给处理器处理。
HS1101是一款基于独特工艺设计的电容元件,这款相对湿度传感器可以大批量生产。可以应用于办公自动化,车厢内空气质量控制,家电,工业控制系统等。在需要湿度补偿的场合也可以得到很大的应用。其具有全互换性、在标准环境下不需校正、长时间饱和下快速脱湿、高可靠性与长时间稳定性、快速反应时间等特点。
3.3.1温度传感器DS18B20的引脚介绍
温度传感器DS18B20有两种封装:三脚TO-92直插式和八脚SOIC贴片式,其中三脚TO-92直插式是使用最广泛、最普及的封装。封装引脚如图3所示。
图3 DS18B20TO-92封装
下表2列出了温度传感器DS18B20的引脚定义:
表2 DS18B20的引脚定义
引脚 定义
GND 电源负极
DQ 信号输入输出
VDD 电源正极
NC 空
引脚功能说明:
GND :接地信号
DQ :数据输入/输出引脚。开漏单总线接口引脚。当被用在寄生电源下,可以向器件提供电源。
VDD :可选VDD引脚,电源电压范围3V~5.5V。当工作于寄生电源时,此引脚必须接地。
3.3.2 DS18B20内部结构与特点
DS18B20的内部结构主要有:寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于储存用户设定温度上下限值的TH和TL触发器,储存与操控逻辑,8位循环冗余校验码(CRC)发生器等7部分组成。
DS18B20中的温度传感器可完成对温度的监测,以12位转化为例:用16位符号扩展的二进制补码读数形式给予,以0.0625℃/LSB形式表达,其中S为符号位,12位转化后得到的12位数据,储存在DS18B20的两个8比特的RAM中。DS18B20温度值格式如二进制表2.2所示,其中,前5位是符号位,如果测得的温度大于0,这5位为0,只要将测得的数值乘以0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于 0.0625即可得到实际温度。
图4 DS18B20温度值格式表
1、配置寄存器
DS18B20配置寄存器各字节意义如表3下:
表3 DS18B20寄存器中各位内容
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
TM R1 RO 1 1 1 1 1
低五位一直都是"1",其中TM是测试模式位,用于设置温度传感器DS18B20是在工作模式还是在测试模式。温度传感器DS18B20默认该位被设置为0,我们不要去修改。其中,R1和R0作用主要是设置分辨率,具体设置如表4所示:(DS18B20默认设置为12位)。
表4 温度分辨率设置表
RR1 RRO 分辨率 温度最大转换时间
00 00 99位 93.75ms
00 11 110位 187.5ms
11 00 111位 375ms
11 11 112位 750ms
2、高速暂存存储器
该存储器一共有9个字节组成。当温度转化指令发出后,经温度传感器的转化所得的温度值以二进制补码形式存储在该存储器的前两个字节。单片机可通过单线接口读取所得数据。读取时低位在前,高位在后。相应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。其中第9个字节是冗余检验字节。
温度传感器DS18B20暂存寄存器分布如表5所示。
表5 DS18B20暂存寄存器分布
寄存器内容 字节地址
温度值低位(LS Byte) 0
温度值高位(MS Byte) 1
高温限值(TH) 2
低温限值(TL) 3
配置寄存器 4
保留 5
保留 6
保留 7
CRC校验值 8
3.3.3 DS18B20 温度测量通信协议
由于DS18B20采用的是1-Wire总线协议方式,即使用一根数据线完成数据的双向传送,而对AT89S51单片机来说,硬件方面并不支持单总线协议,因此,我们必须使用软件来模拟单总线的协议时序以完成对DS18B20芯片中的数据处理。
DS18B20有严谨的通信协议来确保各个数据传送的正确性。该协议定位了几种信号的时序:初始化时序、读时序、写时序。全部时序都是将主机设为主设备,单总线器件用作从属设备。而每一次指令和数据的传送都是由主机主动启动写时序开始,DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输,其工作时序包括初始化时序、写时序和读时序。
它们的工作时序如图5 (a)(b)(c)所示。
图5 (a)初始化时序
DS18B20的初始化过程:
- 先将数据线置高电平“1”。
- 延时,尽可能短一点。
- 数据线拉到低电平“0”。
- 延时750微秒(该时间的时间范围可以从480到960微秒)。
5.数据线拉到高电平“1”。 - 延时等待。
- 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。
8.将数据线再次拉高到高电平“1”后结束。
图5 (b)写时序
DS18B20的写操作过程:
- 数据线先置低电平“0”。
- 延时确定的时间为15微秒。
- 按从低位到高位的顺序发送字节,一次只发送一位。
- 延时时间为45微秒。
- 将数据线拉到高电平。
- 重复上(1)到(6)的操作直到所有的字节全部发送完为止。
- 最后将数据线拉高。
图5 (c)读时序
DS18B20的读操作过程:
- 将数据线拉高“1”。
- 延时2微秒。
- 将数据线拉低“0”。
- 延时15微秒。
- 将数据线拉高“1”。
- 延时15微秒。
- 读数据线的状态得到1个状态位,并进行数据处理。
- 延时30微秒。
3.4系统硬件设计
3.4.1 复位电路模块
本系统采用按钮复位电路,按钮未按下时,其利用电容来完成复位,在接电的瞬时,RST引脚的电位与电源VCC相同,随着充电电流的变小,RST的电位逐渐降低。这时只要确保RST为高电平的时间长于两个机器周期,就可以正常复位;按钮按下时,电源VCC经过两个电阻分压,在RST引脚生成一个复位高电平,进而完成复位。
复位电路如图6所示。
图6 复位电路
3.4.2 报警电路模块
当被测环境温度超过温度上下限时,我们需要进行报警处理,这里用到的是蜂鸣器。
蜂鸣器工作电流一般为10mA,而单片机的I/O口只能承受几毫安的电流,因此需要加三极管进行驱动,单片机的I/O口中的P1.4接三极管的基极,当P1.4为低电平时,三极管导通,5V的电压加载到蜂鸣器两端,于是蜂鸣器鸣叫;当P1.4高电平时,三极管截止,蜂鸣器不鸣叫。
报警电路如下图所示:
图 7报警电路
3.4.3显示电路模块
显示系统是单片机控制系统的重要组成部分,单片机应用系常采用7段LED数码管作为显示器,这种显示器具有耗能低、线路简易、价格便宜等优点。
LED数码管显示器可以分为共阴极和共阳极两种结构。
(1)共阴极结构:当所有的发光二极管的阴极接在一起,称为共阴极结构;
(2)共阳极结构:当所有的发光二极管的阳极接在一起,称为共阳极结构。
七段LED显示器是由7个LED按一定的图形排列组成,如图9所示,七段LED显示器的各个二极管分别称为a、b、c、d、e、f、g段,有些七段显示器增加一个dp段表示小数点,也称为八段LED显示器。
图8 典型七段LED器件
将数码管的引脚和单片机的数据输出口相连,控制输出的数据可以使数码管显示不同的数字和字符,通常称控制发光二极管的8位字节数据为段选码。7段LED段选码如表6所示。
表6 7段LED段选码
显示字符 共阴极段选码 共阳极段选码 显示字符 共阴极段选码 共阳极段选码
0 3FH C0H C 3EH C6H
1 06H F9H D 5EH AH
2 5BH A4H E 79H 86H
3 4FH B0H F 71H 8EH
5 6DH 92H U 3EH C1H
6 7DH 82H R 31H CEH
7 07H F8H Y 6EH 91H
8 7FH 80H 8. FFH 00H
9 6FH 90H “灭” 00H FFH
A 77H 88H B 7CH 83H
本设计采用四位共阴极动态显示方式,可以直接读取温度值,显示温度可以精确到1℃。
图9为显示电路的连接图。
图9 显示电路
3.4.4按键电路模块
该电路采用弹性按键。按键电路的作用是手动设置温度的上下限。按下K4,进行上下限报警切换,通过K1和K2调节温度上下限,最后,按下K3确认。
具体的按键电路图如下图10所示:
图10 按键电路
3.4.5温度检测电路模块
该电路中温度传感器采用Dallas公司生产的数字温度传感器DS18B20。该芯片硬件接口简单,使用方便,且节省大量的导线,具有很好的通用性。该系统中将单片机的P1.1引脚与DS18B20的数据线连接。
具体的温度检测电路图如下图11所示:
图11 温度检测电路
3.4.6湿度检测电路模块
该电路中湿度传感器采用HS1101数字湿度传感器。该芯片硬件接口不复杂,使用便捷,并且无需过多的电路板,具有良好的连通性。该系统中具体的湿度检测采集部分原理如下图12所示:
图12 湿度采集原理图
4系统软件设计
4.1系统主程序设计
主程序是系统的监测程序,在程序运行的过程中必须先经过初始化,包括开机启动子程序,中断程序,报警函数,按键扫描子程序以及控制端口的初始化工作。系统在初始化完成后就进入温湿度监测程序,实时的监测当前的温度并通过显示电路在LCD上显示。程序中以中止的方式来重新设置温度的上下限,根据硬件设计完成对温度的控制,系统软件设计的总体流程图如下图13。
图13 系统主程序框图
主程序如下:
void main()
{
TCON=0x01; //定时器T0工作在01模式下
TMOD=0X01;
TH0=0XD8; //装入初值
TL0=0XF0;
EA=1; //开总中断
ET0=1; //开T0中断
TR0=1; //T0开始运行计数
EX0=1; //开外部中断0
for(n=0;n<500;n++) //显示启动LOGo"- - - -"
{bell=1;warn=1;logo();}
Red=0;
while(1)
{
key();
ss=ReadTemperature();
Show();
alarm(); //报警函数
if(Flag==1)
{bell=!bell;
warn=!warn;} //蜂鸣器滴滴响
else {bell=1;
warn=1;}
}
}
4.2 DS18B20和HS1101初始化子程序
DS18B20的初始化相当于DS18B20数据头的作用,DS18B20检测到初始化电平,准备开始接收或发送数据。HS1101与DS18B20的相似,其中DS18B20初始化子程序流程图如下图14所示。
图14 DS18B20初始化程序流程图
DS18B20初始化程序如下:
Init_DS18B20(void) //传感器初始化
{
uchar x=0;
DATA = 1; //DQ复位
delay(10); //稍做延时
DATA = 0; //单片机将DQ拉低
delay(80); //精确延时 大于 480us
DATA = 1; //拉高总线
delay(20);
x=DATA; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay(30);
}
4.3 DS18B20和HS1101读取温湿度子程序
读出温湿度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。DSl8820的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。图15为读取数据流程图。
图15 DS18B20读取温度子程序流程图
读取温湿度子程序如下:
int ReadTemperature(void) //读取温湿度
{
uchar a=0;
uchar b=0;
int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温湿度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温湿度寄存器等(共可读9个寄存器) 前两个就是温湿度
a=ReadOneChar(); //低位
b=ReadOneChar(); //高位
t=b;
t<<=8;
t=t|a;
tt=t0.0625;
t= tt10+0.5;
return(t);
}
4.4 显示数据处理子程序
收集温湿度数据后,LOW的高四位和HIGH的低四位为温湿度的整数部分,LOW的低四位为温湿度的小数部分,HIGH的高四位全部为1表示负数,全为0表示正数。所以先将数据提取出来,划分为三个部分:小数部分、整数部分和符号部分。小数部分实行四舍五入处理。当数据是个负数的时候,显示之前要进行数据转换,将其整数部分取反加一。并且因为DS18B20最低温度只能为-55℃,所以可以将整数部分的最高位换成一个“-”,表示为负数。