基于单片机和DS18B20的温度监控系统设计

2022-07-13 03:00
有色金属设计 2022年2期
关键词:数码管温度传感器指示灯

杨 宇

(昆明冶金高等专科学校电气与机械学院,云南 昆明 650033)

0 引 言

随着社会经济的发展,温度控制在人们生产和生活的方方面面变得越来越普及和重要,在许多需要温度控制的场合,比如蔬菜水果大棚、食品储藏室、智能家居和楼宇等系统中,对温度数据进行快速、精确、可靠地采集和控制是必不可少的。

传统的测温方法主要依靠一些热敏电子元器件进行温度采集,比如热敏电阻等,这类方法存在精度低、速度慢、需额外增加转换器件和电路的缺点。该文阐述基于AT89C51单片机和美国Dallas公司的单总线数字温度传感器DS18B20的温度监控系统的设计,该系统能够克服传统控制方式的缺点,实现精确、快速、可靠的温度采集和控制。

1 系统的硬件结构

该系统的硬件部分主要由AT89C51单片机、温度传感器DS18B20、4个7段数码管和2个LED指示灯构成,AT89C51的引脚P1.0与DS18B20的信号输入输出端DQ相连,DS18B20的其余2只引脚接直流电源的正负极,AT89C51的引脚P3.6和P3.7与2个LED指示灯相连,2个LED分别为绿灯和红灯。P2口的8个引脚以及P3口的4个引脚和数码管相连,P2口为显示的段选端,P3口为显示的位选端,见图1。AT89C51实时采集DS18B20送来的温度值,并将温度值显示在数码管上,温度值精确到小数点后1位。如果温度值低于设定的下限温度或者高于设定的上限温度,红色指示灯点亮,绿色指示灯熄灭,如果温度值处于正常温度范围,绿色指示灯点亮,红色指示灯熄灭。由图1可见,该系统具有硬件结构简单、所含元器件较少、容易维护等优点。

图1 系统结构原理图Fig.1 Schematic diagram of the system

2 系统的软件设计

DS18B20是一种来自美国Dallas公司的单总线数字化温度传感器。它的温度测量范围为-55~125 ℃,能够以9位、10位、11位和12位的分辨率对模拟量的温度值进行转换和表示,以上4种分辨率分别对应的单位温度值为0.5、0.25、0.125、0.0625摄氏度。DS18B20出厂默认的分辨率为12位,该系统中的DS18B20采用的分辨率就是默认的12位。单片机首先要对DS18B20进行使能操作,才能使其进入温度转换状态,单片机是通过向DS18B20写数据44H来进行使能操作的。温度转换的结果以二进制补码的形式存放在DS18B20的内存中,分辨率为12位的转换结果存放在2个字节的内存单元中,最高5位为符号位,其余11位为数值位。单片机读取温度数据时,先读低字节,再读高字节,然后拼接2个字节的数据。如果单片机读取的温度值为正值,则这5个符号位均为0,可以将测得的数值乘以0.062 5就可得到实际的温度值,如果单片机读取的温度值为负值,则这5个符号位均为1,要得到正确的实际温度值,根据补码转原码的原理,要先将测得的温度值取反加1,再乘以0.062 5。

根据以上DS18B20的工作原理,可以创建系统的工作流程图以及编写系统的控制程序,图2为系统的工作流程图,图3-5为系统的控制程序。根据系统的工作流程图可以看出,该系统主要由5大功能模块构成:使能DS18B20模块、从DS18B20读取温度值模块、判断温度值是否异常模块、分离温度值模块和显示温度值模块。使能DS18B20模块的功能由函数Enable()来实现,主要是对DS18B20进行初始化操作;从DS18B20读取温度值是控制程序的关键部分,由函数tmp()来实现该功能,函数tmp()首先依靠函数tmpread()读取DS18B20中测得的2个字节的温度数据,然后将2个字节数据拼接成1个数据存放在变量中,根据该数据的正负对数据进行处理,如果是正数,直接乘以0.062 5,如果是负数,则进行取反加1,这样就可以得到实际的温度值,最后进行乘以10的操作是为了让温度值保留1位小数,该值在数码管上显示的时候,最后1位数值前为小数点;判断温度值是否异常模块对函数tmp()返回的温度值进行判断是否超限,该程序中设定的下限温度为-30 ℃,上限温度为100 ℃,当实际温度值低于-30 ℃或高于100 ℃时,报警红灯点亮,绿灯熄灭,当实际温度值处于正常区间时,报警红灯熄灭,绿灯点亮;分离温度值模块的功能由函数detach()来实现,主要是通过C语言的相关算术运算符,将实际温度值的各个数位分离出来并存放到变量num1到num4中;显示温度值模块的功能由函数display()来实现,该系统用4个7段数码管实时显示测得的温度值,最后1个数码管显示小数位,前3个数码管显示整数位。函数display()根据测得的实际温度值的正负,采用动态显示的方式将温度值显示到数码管,显示负值温度时用最高位的数码管显示负号,显示正值温度时不显示正号。这5个功能模块通过主程序中的while(1)语句循环执行。

图2 系统工作流程图Fig.2 Flowchart of the system

图3 控制程序1Fig.3 Control routine 1

图4 控制程序2Fig.4 Control routine 2

图5 控制程序3Fig.5 Control routine 3

3 结 语

该设计以Proteus仿真软件和Keil 51编程软件作为开发工具,以AT89C51单片机作为控制核心,使用DS18B20芯片作为温度传感器,加上适当的外围电路,构成了智能实时温度监控系统,该系统不仅能够实时采集并显示温度值,还能对低于下限温度和高于上限温度的情况进行报警。与传统温度控制系统相比,该系统在易用性、可靠性、实时性等方面均有极大提升,并适用于很多需要温度控制的场合。

猜你喜欢
数码管温度传感器指示灯
基于HSIC的日光温室温度传感器优化配置策略
2021款奔驰C260车发动机故障灯点亮
物理项目教学设计,用单片机控制四位数码管显示
蓝桥杯树莓派模拟题解析三:“电子测距仪”
一闪一闪亮晶晶浅析笔记本身上的指示灯
“软”指示灯同时监控键盘磁盘网络
Arduino编程
MC9S08FL16单片机数码管静态显示分析
浅谈温度传感器原理及其应用
一种矩阵键盘的MCU实现