当前位置:首页 >> 信息与通信 >>

基于DS18B20温度传感器的数字温度计设计


目录

基于 DS18B20 温度传感器的数字温度计设计





基于 DS18B20 温度传感器的数字温度计设计 ................................................................................. 1 基于 DS1

8B20 温度传感器的数字温度计设计 ................................................................................. 1 摘要: .......................................................................................................................................... 1 关键字: ...................................................................................................................................... 2 The conception of the numerical thermometer based on DS18B20 ..................................................... 2 1 引言 .......................................................................................................................................... 3 2 总体设计 .................................................................................................................................. 3 2.1 方案论证........................................................................................................................ 3 2.2 总体设计........................................................................................................................ 4 3 硬件设计 .................................................................................................................................. 4 3.1 单片机系统.................................................................................................................... 4 3.2 温度传感器模块............................................................................................................ 5 3.3 存储模块...................................................................................... 错误!未定义书签。 错误!未定义书签。 3.4 液晶显示模块................................................................................................................ 9 3.5 串口通信模块.............................................................................. 错误!未定义书签。 错误!未定义书签。 3.6 电源模块...................................................................................................................... 11 4 软件设计 ................................................................................................................................ 12 4.1 主程序流程.................................................................................................................. 12 4.2 DS18B20 模块程序设计 .............................................................................................. 12 4.3 HS1602 驱动程序设计................................................................. 错误!未定义书签。 错误!未定义书签。 4.4 AT24C08 存储模块程序设计 ...................................................... 错误!未定义书签。 错误!未定义书签。 4.5 RS-232-C 串口通信模块程序设计 ............................................. 错误!未定义书签。 错误!未定义书签。 5 测试及结果分析..................................................................................................................... 18 6 附录 ........................................................................................................................................ 18 7 参考资料 ................................................................................................................................ 20

基于 DS18B20 温度传感器的数字温度计设计
周焱华,王小彬,周焕军 (湖北师范学院计算机科学系) 摘要: 摘要 : 本文介绍了一种基于 DS18B20 的数字温度计设计方案。方案利用 AT89S52 单片机控制
1

基于 DS18B20 温度传感器的数字温度计

DS18B20 进行数据采集并由 HS1602 液晶显示模块显示结果,另外,采集结果可由 RS-232-C 接口送 入计算机显示并存储。按键控制实现过界报警温度设定和实时监控,利用 AT24C08 芯片进行存储, 实现温度测量存储与再现。 关键字: 关键字:温度采集,存储再现,过界报警,串行通信

The conception of the numerical thermometer based on DS18B20
Zhou Yanhua,Wang Xiaobin,Zhou Huanjun (Computer Science Department,HuBei Normal University) Abstract: In this page,we introduced a conception of the numerical thermometer based on DS18B20. The conception makes use of AT89S52 control DS18B20 to carry on the data collection,and displays the result use the HS1602 liquid crystal display module. Moreover, the result can be sent into the computer by the interface of RS-232- C to display and store. The key control carries out the temperature setting of over the boundary to alarm,and real-time monitoring. And makes use of the chip of AT24C08 carries on the storage, and carrying out the temperature measurement storage and reappearing. Keywords: Temperature collect, Storing to reappear, Over the boundary to alarm, Serial communication

2

基于 DS18B20 温度传感器的数字温度计

1 引言
随着电子技术的发展,人们的生活日趋数字化,多功能的数字温度计可以给我们的生活带来很 大的方便;支持“一线总线”接口的温度传感器简化了数字温度计的设计,降低了成本;以美国 MAXIM/DALLAS 半导体公司的单总线温度传感器 DS18B20 为核心,以 ATMEL 公司的 AT89S52 为控制器设计的 DS18B20 温度控制器结构简单、测温准确、具有一定控制功能的智能温度控制器。

2 总体设计
2.1 方案论证
2.1.1 温度传感器 方案一:采用热敏电阻可满足测温要求,但热敏电阻精度低,重复性和可靠性较差,对于精度 要求较高的测温不适用,而且采用热敏电阻要求复杂的电路和算法,增加了设计复杂度。 方案二:采用专用的集成温度传感器(如 AD590、LM35/LM45)和数字化温度传感器(DS18B20、 DS1620)测温,数字化温度传感器具有接口简单、直接数字量输出、精确度高等优点。DS18B20 是 DALLAS 公司的最新单线数字温度传感器,它是世界上第一片支持“一线总线”接口的温度传感器。 一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,它的测量温度范围为-55~+ 125℃,在-10~+85℃范围内,精度为±0.5℃,现场温度直接以“一线总线”的数字方式传输, 大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、 测温类消费电子产品等,DS18B20 支持 3~5.5V 的电压范围,使系统设计更灵活、更方便、更便宜、 体积更小。DS18B20 可以程序设定 9~12 位的分辨率,精度为±0.5℃,分辨率设定及用户设定的报 警温度存储在 E2PROM 中,掉电后依然保存。因此,本方案选用 DS18B20 作为温度测量传感器。 2.1.2 单片机系统 目前比较流行 51 系列单片机和凌阳单片机。 AT89C51 单片机需要用仿真器来实现软硬件的调 试,较为繁琐; AT89S52 八位单片机除具有 AT89C51 单片机所有的优点外,具有更大的程序存储空 间,可在线仿真的功能,方便调试。凌阳十六位单片机虽然可以更好的完成控制功能,但较 AT89S52 八位单片机价格昂贵,而且编程以及外围功能电路的设计都不及 AT89S52 成熟。因此,选用 AT89S52 八位单片机作为温度采集的控部分。 2.1.3 电源模块 采用普通的直流电源实现电路简单,而且采用集成电源芯片设计的直流电源电压比较稳定,完 全满足系统各模块的供电要求,但是普通直流电源体积比较大,变压器的散热对测温精度也有影响, 所以,选用锂离子手机充电电池和配套的锂电池充电器作为系统的供电模块。手机用的锂电池电压 范围是 3.6V 到 4.2V,限定充电电压是 4.25V,完全满足 AT89S52 和 DS18B20 等各模块的工作电压 范围。 2.1.4 显示模块 由于系统要求实现测量环境温度、测量体温、过界报警设置、温度存储再现等多种功能,要显 示的信息不仅仅是温度值,所以采用数码管显示几乎不可能。另外,手机电池电量有限,而数码管 耗电较大,不符合设计要求。因此,选用常见的 HS1602 液晶显示模块显示测温结果。 2.1.5 确定方案

3

基于 DS18B20 温度传感器的数字温度计

为了不失通用性和智能性, 本方案采用 AT89S52 单片机作为控制器, 单总线温度传感器 DS18B20 进行温度采集。电源部分没有采用普通的直流电源而利用锂离子手机充电电池和配套的锂电池充电 器, 手机用的锂电池电压范围是 3.6V 到 4.2V, 限定充电电压是 4.25V, 完全满足 AT89S52 和 DS18B20 等各模块的工作电压范围。由于手机电池电量有限,所以显示模块使用 HS1602 液晶显示模块而没 有使用数码管。

2.2 总体设计
本方案设计的系统由按键控制模块、单片机系统、温度传感器模块、液晶显示模块、存储模块、 串口通信模块和电源模块组成,其总体架构如图 1。

控制

串口通信模块
液 单 晶

温度传感器模块 温度传感器模块

片 显 机 示 系 模 统 块

按键模块 按键模块

存储模块 存储模块

电源模块

图 1 系统总体设计

3 硬件设计
3.1 单片机系统
方案采用 AT89S52 单片机作为控制器,完成所有的控制功能,包括: 温度传感器 DS18B20 的初始化和读去温度值 HS1602 液晶模块驱动 按键识别和控制 温度存储及读去 和 PC 机的串口通信 单片机系统的电路如图 2。
4

基于 DS18B20 温度传感器的数字温度计

图 2 单片机系统电路

3.2 温度传感器模块
3.2.1 DS18B20 原理 DS18B20 采用 3 脚 PR-35 封装或 8 脚 SOIC 封装,管脚排列如图 3 所示。图中 GND 为地, DQ 为数据输入/输出端 (即单线总线) 该脚为漏极开路输出, , 常态下呈高电平, Vcc 是外部+5V 电 源端,不用时应接地,NC 为空脚。

5

基于 DS18B20 温度传感器的数字温度计

图 3 DS18B20 的外部结构 DS18B20 内部主要包括寄生电源、温度传感器、64 位激光 ROM 单线接口、存放中间数据的 高速暂存器(内含便笺式 RAM) ,用于存储用户设定的温度上下限值的 TH 和 TL 解发器存储与控 制逻辑、8 位循环冗余校验码(CRC)发生器等七部分,内部结构如图 4。

图4 DS18B20内部结构 寄生电源由二极管 VD1、VD2 和寄生电容 C 组成,电源检测电路用于判定供电方式,寄生电 源供电时,VDD 端接地,器件从单线总线上获取电源,在 DQ 线呈低电平时,改由 C 上的电压 Vc 继续向器件供电。该寄生电源有两个优点:第一,检测远程温度时无需本地电源;第二,缺少正常 电源时也能读 ROM。若采用外部电源 VDD,则通过 VD2 向器件供电。 光刻 ROM 中的 64 位序列号是出厂前被光刻好的,它可以看作是该 DS18B20 的地址序列码, 如图 5 所示。开始 8 位(28H)是产品类型标号,接着的 48 位是 DS18B20 自身的序列号,最后 8 位是前面 56 位的循环冗余校验码(CRC=X8+X5+X4+1) 。光刻 ROM 的作用是使每一个 DS18B20 都各不相同, 这样就可以实现一根总线上挂接多个 DS18B20 的目的。 主机操作 ROM 的命令有五种, 如表 1 所示。

6

基于 DS18B20 温度传感器的数字温度计

图5

64 位ROM 的结构

表1 DS18B20的ROM命令
指令 读 ROM(33H) 匹配 ROM(55H) 跳过 ROM(CCH) 搜 ROM(F0H) 报警搜索(ECH) 说明 读 DS1820 的序列号 继读完 64 位序列号的一个命令,用于多个 DS1820 时定位 此命令执行后的存储器操作将针对在线的所有 DS1820 识别总线上各器件的编码,为操作各器件作好准备 仅温度越限的器件对此命令作出响应

DS18B20 测量温度时使用特有的温度测量技术。其内部的低温度系数振荡器能产生稳定的频 率信号 f0,高温度系数振荡器则将被测温度转换成频率信号 f。当计数门打开时,DS18B20 对 f0 计 数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性予以 被偿。测量结果存入温度寄存器中。一般情况下的温度值应为 9 位(符号点 1 位) ,但因符号位扩 展成高 8 位,故以 16 位被码形式读出,表 2 给出了温度和数字量的关系。 表2 DS1820 温度数字对应关系表

DS18B20 温度传感器的内部存储器包括一个高速暂存 RAM 和一个非易失性的可电擦除的 E2RAM, 后者存放高温度和低温度触发器 TH、 和结构寄存器。 TL 暂存存储器包含了 8 个连续字节, 前两个字节是测得的温度信息,第一个字节的内容是温度的低 8 位,第二个字节是温度的高 8 位, 第三个和第四个字节是 TH、TL 的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字 节的内容在每一次上电复位时被刷新,第六、七、八个字节用于内部计算,第九个字节是冗余检验 字节,如表 3 所示。 表3 DS18B20暂存器分布
寄存器内容 温度最低数字位 温度最高数字位 高温限制 字节地址 0 1 2

7

基于 DS18B20 温度传感器的数字温度计

低温限制 保留 保留 计数剩余值 每度计数值 CRC 校验

3 4 5 6 7 8

该字节各位的意义为 TM R1 R0 1 1 1 1 1 ,低五位一直都是 1 ,TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式,在 DS18B20 出厂时该位被设置为 0,用户不用改动,R1 和 R0 用来设置分辨率,DS18B20 出厂时被设置为 12 位,分辨率设置如表 4 所示。 表4 分辨率设置表 R1 0 0 1 1 R0 0 1 0 1 分辨率 9位 10 位 11 位 12 位 温度最大转换时间 93.75ms 187.5ms 375ms 750ms

根据 DS18B20 的通讯协议,主机控制 DS18B20 完成温度转换必须经过三个步骤:每一次读写 之前都要对 DS18B20 进行复位,复位成功后发送一条 ROM 指令,最后发送 RAM 指令,这样才能 对 DS18B20 进行预定的操作。复位要求主 CPU 将数据线下拉 500 微秒,然后释放,DS18B20 收到 信号后等待 16~60 微秒左右,后发出 60~240 微秒的存在低脉冲,主 CPU 收到此信号表示复位成 功。ROM 命令令和暂存器的命令如表 1 和表 5。 表 5 DS18B20 暂存器的命令
指令 温度转换(44H) 读数据(BEH) 写数据(4EH) 复制(48H) 读 EERAM(B8H) 读电源供电方式(B4H) 说明 启动在线 DS1820 做温度 A/D 转换 从高速暂存器读 9bits 温度值和 CRC 值 将数据写入高速暂存器的第 2 和第 3 字节中 将高速暂存器中第 2 和第 3 字节复制到 EERAM 将 EERAM 内容写入高速暂存器中第 2 和第 3 字节 了解 DS1820 的供电方式

3.2.2 DS18B20 电路连接 由于 DS18B20 工作在单总线方式,其硬件接口非常简单,仅需利用系统的一条 I/ O 线与 DS18B20 的数据总线相连即可,如图 6 所示。

图 6 DS18B20 电路

8

基于 DS18B20 温度传感器的数字温度计

3.4 液晶显示模块
HS1602 采用标准的 16 脚接口,其引脚如表 6 所示,其中 VSS 为地电源,VDD 接 5V 正电源, V0 为液晶显示模块对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,可以通过一个 10K 的电位器调整对比度。 为寄存器选择, RS 高电平时选择数据寄存器, 低电平时选择指令寄存器。 RW 为读写信号线,高电平时进行读操作,低电平时进行写操作,当 RS 和 RW 共同为低电平时可以 写入指令或者显示地址,当 RS 为低电平 RW 为高电平时可以读忙信号,当 RS 为高电平 RW 为低电 平时可以写入数据。E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。LEDA 和 LEDK 为背光电源,LEDA 接 5V 正电源,LEDK 接 GND。D0~D7 为 8 位双向数据线。 表 6 接口信号说明
编号 1 2 3 4 5 6 7 8 符号 VSS VDD VL RS R/W E D0 D1 引脚说明 电源地 电源正极 液晶显示偏压信号 数据/命令选择端(H/L) 读/写选择端(H/L) 使能信号 Data I/O Data I/O 编号 9 10 11 12 13 14 15 16 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 Data I/O Data I/O Data I/O Data I/O Data I/O Data I/O 背光源正极 背光源负极

用 HS1602 液晶显示模块显示字符或字符串之前必须对其进行初始化,HS1602 液晶显示模块的 初始化流程如下: 5.0 初始化过程(复位过程) 5.1 延时 15ms 5.2 写指令 38H(不检测忙信号) 5.3 延时 5ms 5.4 写指令 38H(不检测忙信号) 5.5 延时 5ms 5.6 写指令 38H(不检测忙信号) 5.7(以后每次写指令、读/写数据之前均需检测忙信号) 5.8 写指令 38H:显示模式设置 5.9 写指令 38H:显示关闭 5.10 写指令 01H:显示清屏 5.11 写指令 06H:显示光标移动设置 5.12 写指令 0CH:显示开关及光标位置 HS1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 128 个不同的点阵字符图形, 如表 7 所示。 表 7 CGROM 中的字符代码与图形对应关系 高低 0000 0001 0010 0011 0000 CGRAM ! ” # 0010 0011 0 1 2 3 0100 @ A B C 0101 P Q R S 0110 \ a b c 0111 p q r s

9

基于 DS18B20 温度传感器的数字温度计

0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

$ % & ’ ( ) * + , . /

4 5 6 7 8 9 : ; < = > ?

D E F G H I J K L M N O

T U V W X Y Z [ ? ] ^ _

d e f g h i j k l m n o

t u v w x y z { | } → ←

HS1602 液晶模块内部的控制器共有 11 条控制指令,如表 8 所示。它的读写操作、屏幕和光标 的操作都是通过指令编程来实现的。 表 8 HS1602 液晶模块内部的控制器控制指令 指令码 指令 RS R/W D0 D1 D2 D3 D4 D5 D6 D7 清屏 光标返回 输入方式 显示开关 移位 功能设置 CGRAM 地址设置 DDRAM 地址设置 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 BF 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 1 D 0 1 1 * 清显示,光标回位 ADD=0 时,回原位 决定是否移动以及移动方向 D-显示,C-光标,B-光标闪烁 移动光标及整体显示 DL-数据位数,L-行数,F-字体 设置 CGRAM 的地址 设置 DDRAM 的地址 说明

I/D S C B * *

S/C R/L * F *

DL N

A5 A4 A3 A2 A1 A0

A6 A5 A4 A3 A2 A1 A0

忙标志/读地址计数 0 器 CGRAM/DDRAM 数据写 1 CGRAM/DDRAM 数据读 1

AC6 AC5 AC4 AC3 AC2 AC1 读出忙标志位(BF)及 AC 值 AC0 将内容写入 RAM 中 将内容从 RAM 中读出

写数据 读数据

HS1602 液晶显示模块可以和单片机 AT89C51 直接接口,电路如图 10 所示。

10

基于 DS18B20 温度传感器的数字温度计

图 10 AT89S52 和 HS1602 液晶模块连接电路 液晶显示模块是一个慢显示器件, 所以在执行每条指令之前一定要确认模块的忙标志为低电平, 表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字 符,表 9 是 HS1602 的内部显示地址。即第 1 行的显示地址应为 80H+显示位置,第 2 行的显示地址 应为 C0H+显示位置。 表 9 HS1602 的内部显示地址 显示位置 第1行 第2行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F C0C1 C2C3C4 C5C6C7 C8C9CACBCCCDCECF

3.6 电源模块
本方案采用锂离子手机充电电池和配套的锂电池充电器作为电源,手机用的锂电池电压范围是 3.6V 到 4.2V,限定充电电压是 4.25V,完全满足各模块的工作电压范围。充电器在作为电源的同时 也可以对锂电池进行充电,所以系统在离开市电时可正常工作。充电器电路如图 12 所示。

图 12 充电电路

11

基于 DS18B20 温度传感器的数字温度计

4 软件设计
4.1 主程序流程
软件部分包括五个部分,对应着系统的五种模式,程序流程如图 13 所示。

初始化

模式选择 State=0 环境温度模式 State=1 体温计模式 State=2 设定模式 State=3 State=4

保存/删除数据 读出数据

改状态指示

改状态指示

改状态指示

改状态指示

改状态指示

读最新温度

读最新温度

设定温度值

保存/删除数 据

读出数据

刷新显示缓 冲区数据

判断是否刷 新显示缓冲 区数据

刷新显示缓 冲区数据

保存数据并 刷新显示缓 冲区数据

刷新显示缓 冲区数据

显示

图 13 程序流程图

4.2 DS18B20 模块程序设计
4.2.1 程序流程 DS18B20 模块程序主要完成 DS18B20 的初始化和温度的读去操作,程序流程如图 14 所示。 4.2.2 程序源码 uchar DataH; uchar DataL; unsigned long Data; void Delay (uchar us) { while (--us); } bit init_18b20() //1820 初始化
12

基于 DS18B20 温度传感器的数字温度计

{ uchar n=0; bit flag=0; DQ=1; _nop_(); DQ=0; Delay(255); Delay(20); //550us DQ=1; Delay(55); if(DQ==0) flag=1; else flag=0; Delay(100); DQ=1; return flag;

//detect 1820 success! //detect 1820 fail!

} void write1820_byte (uchar wr) //单字节写入 { uchar i; for (i=0;i<8;i++) { DQ=0; _nop_(); DQ=wr&0x01; Delay(20);//45us DQ=1; wr>>=1; } } uchar read1820_byte (void) //读取单字节 { uchar i,u=0; for(i=0;i<8;i++) { DQ=0; u>>=1; DQ=1; if(DQ==1) u|=0x80; Delay(18);//40us } return(u); } //对从 DS18B20 读出的温度值(ddh,ddl)进行处理,送显示缓冲区

13

基于 DS18B20 温度传感器的数字温度计

void DataCoding(unsigned char ddH , unsigned char ddL) { Data = ddH * 256 + ddL; Data = Data * 625; } void Get_temperarue(void) { if (init_18b20 ()) { write1820_byte (0xcc); //skip rom write1820_byte (0x44); //temp convert } Delay(35); if (init_18b20 ()) { write1820_byte (0xcc); //skip rom write1820_byte (0xbe); //read temp DataL = read1820_byte(); DataH = (read1820_byte()&0x0f); DataCoding( DataH, DataL ); } }
DS18B20 初始化

DS18B20 是否 存在? 是 跳过 ROM 匹配



温度转换

延时

跳过 ROM 匹配

读暂存器

转换为显示码

结束

图 14 DS18B20 模块程序流程图

14

基于 DS18B20 温度传感器的数字温度计

4.5.1 单片机端通信程序设计 4.5.1.1 程序流程 AT89S52 单片机串行口是全双工串行通信口,有 4 种工作方式:方式 0 作移位寄存器使用;方 式 1 是波特率可变的 8 位 UART;方式 2 是波特率固定为两种的 9 位 UART;方式 3 是波特率可变 的 9 位 UART。在与 PC 机通信时我们选用方式 1 来循环向 PC 机发送数据,程序流程如图 17 所示。

初始化串口

发送同步标志位

发送高 8 位数据

发送低 8 位数据

图 17 单片机串口通信程序流程图 4.5.1.2 程序源码 //串口初始化 void Rs232_int(void) { SCON = 0x50; // scon,#50h ;设置成串口 1 方式,sm2=1,ren=1 TMOD = 0x20; // mov tmod,#20h ;波特率发生器 t1 工作在模式 2 上 TH1 = 0xFD; // mov th1, #0fdh ;预置初值(按照波特率 9600bps 预置初值) TL1 = 0xFD; // mov tl1, #0fdh ;预置初值(按照波特率 9600bps 预置初值) TR1 = 1; // setb tr1 ;启动定时器 t1 } //发送数据函数 void sent_data(unsigned char Dat) { SBUF=Dat; //sent_data: mov sbuf,a while(!TI); //jnb ti,$ TI=0; //clr ti } sent_data(0x7e);//向串行口发送数据 sent_data(0x7e);//0x7e 为标志位,便于数据同步 sent_data(DataH); sent_data(DataL); 4.5.2 PC 端通信程序设计

15

基于 DS18B20 温度传感器的数字温度计

4.5.2.1 程序流程 PC 机端串口通信程序主要完成串口的设置、 数据的接收和显示, Microsoft 的 Visual Basic 6.0 用 编写,本方案采用 Microsoft 的 ActiveX 组件,Microsoft 推出的 ActiveX 技术提供了另外一种实现串 行通信的方法,这种方法不仅相对较为简单,而且非常实用。程序流程如图 18 所示。

初始化串口

读缓冲区数据

转换数据格式

显示温度

保存数据

图 18 PC 端串口接收程序流程图 4.5.2.2 程序源码 串口初始化程序源代码: 串口初始化程序源代码: Private Sub Form_Load() ii = 2 InfoText.Text = "可保存记录" If Comm1.PortOpen = True Then Comm1.PortOpen = False End If Comm1.CommPort = 1 Comm1.Settings = "9600,n,8,1" Comm1.InputLen = 4 Comm1.InputMode = comInputModeBinary Comm1.InBufferSize = 4096 Comm1.OutBufferSize = 4096 Comm1.InBufferCount = 0 Comm1.OutBufferCount = 0 Comm1.SThreshold = 1 Comm1.RThreshold = 4 Comm1.PortOpen = True Timer1.Interval = 1000 Timer2.Interval = 2000 Stop_flag = True

'设置串口 1 '波特率:9600 奇校验,8 位数据,1 位停止位 '一次读取接收缓冲区的一个字符 '设置位二进制格式 '设置接收缓冲区为 256 字节 '设置发送缓冲区为 256 字节 '清空输入缓冲区 '清空输出缓冲区 '发送缓冲区空触发发送事件 '每 X 个字符到接收缓冲区引起触发接收事件 '打开串口 1

16

基于 DS18B20 温度传感器的数字温度计

Flag = 0 Timer2.Enabled = True Animal_heat = False Temph = 0 Templ = 0 Command4.Caption = "一般模式" End Sub 读缓冲区数据,转换格式并显示温度源代码: 读缓冲区数据,转换格式并显示温度源代码: Private Sub Comm1_OnComm() Dim temp As Byte Select Case Comm1.CommEvent '在 CommEvent 中接收数据 Case comEvReceive Timer2.Enabled = False Inbyte = Comm1.Input For ii = 1 To 4 If Inbyte(0) = &H7E And Inbyte(1) = &H7E Then Datah = Inbyte(2) Datal = Inbyte(3) GoTo Outhere Else temp = Inbyte(0) Inbyte(0) = Inbyte(1) Inbyte(1) = Inbyte(2) Inbyte(2) = Inbyte(3) Inbyte(3) = temp End If Next ii Text1.Text = "数据错误!" Exit Sub Outhere: If Animal_heat Then 'Temph = Datah ' Templ = Datal If ((Datah * 256 + Datal) * 0.0625) > data Then ' data = (Datah * 256 + Datal) * 0.0625 data1 = (((Datah * 256 + Datal) * 625) Mod 100) * 0.0001 Text1.Text = FormatNumber(((Datah * 256 + Datal) * 0.0625 - data1), 2) + "℃" data = (Datah * 256 + Datal) * 0.0625 - data1 Else Text1.Text = FormatNumber(data, 2) + "℃" Timer2.Enabled = True End If Else If Stop_flag Then

17

基于 DS18B20 温度传感器的数字温度计

data1 = (((Datah * 256 + Datal) * 625) Mod 100) * 0.0001 Text1.Text = FormatNumber(((Datah * 256 + Datal) * 0.0625 - data1), 2) + "℃" 'tem = InfoText.Text ' InfoText.Text = InfoText.Text + tem + Chr(13) + Chr(10) ' tem = Text1.Text Call SaveInfo(InfoText.Text) Timer2.Enabled = True End If End If End Select End Sub 保存数据源代码: 保存数据源代码: Public Sub SaveInfo(TextInfo As String) Dim Filenumber As String Dim FileName As String Filenumber = FreeFile FileName = "zyh" Open FileName For Output As #Filenumber Print #Filenumber, TextInfo Close #Filenumber End Sub

5 测试及结果分析
DS18B20 在 12 位转化时每一位的精度为 0.0625 度,我们取小数点后两位进行显示,即两位整 数温度和两位小数温度数据,这样已经达到了很高的精度。在测试过程中,我们将家庭用的寒暑表 和设计完成的数字温度计做比较发现,寒暑表反应速度比较快,但经过读数后的结果存在较大的误 差,而我们设计完成的数字温度计测温然后显示的反应不及寒暑表,但是测温的精度远比寒暑表高, 因为 DS18B20 测温精度可达 0.0625 度,并且经电子器件显示只存在取舍误差。

6 附录
6.1 函数及变量说明 void lcd_init(void); //液晶模块初始化 void dis_now_T(void); //环境温度测量模式 void dis_body_T(void); //体温模式测量模式 void dis_set_T(void); //温度上限 void dis_set_k(void); //温度下限 void dis_save_data(void); //数据保存 void Dele_data(void); //数据删除 void Datashow(unsigned char ddH , unsigned char ddL); //数据显示 void lcd_write_command(unsigned char command,unsigned char wait_en);
18

基于 DS18B20 温度传感器的数字温度计

void lcd_write_data(unsigned char char_data); void wait_enable(void); //使能程序 void display_a_char(unsigned char position,unsigned char char_data); void display_a_string(unsigned char col,unsigned char *ptr); void delay_1ms(void); void delay02s(void); //延时 void delay10ms(void); //延时 void delay_nms(unsigned int n); //延时 void dis_chang_number(void); void dis_delet_data(void); //删除数据 void dis_set_datanum(void); //设置 void dis_data1(void); unsigned char ID=8; unsigned long temperarue; //全局变量(温度) unsigned long T=300000; //用于设定上限温度的变量 unsigned long K=100000; //用于设定下限温度的变量 unsigned long dd=1; void ReadSumNum(void); //读 24C08 中 void Read_data(void); //读数据函数 unsigned char str1[]=" "; //用于液晶显示的字符串变量 unsigned char str2[]=" "; //用于液晶显示的字符串变量 unsigned char temp; unsigned char temp1; unsigned char Led0,Led1,Led2,LedDot; //全局变量 bit bitReadChange = 0; //标志位 bit bitChange = 1; //标志位 bit bitReadFirst = 1; //标志位 unsigned char DataH1; //数据高 8 位的变量 unsigned char DataL1; //数据低 8 位的变量 unsigned char Point; //全局变量,用于指向显示保存的数据 unsigned char Point1; //临时变量,用于替换 Point unsigned long DataBuf; void sent_data(unsigned char Dat); //发送数据 void Rs232_int(void); //232 初始化 void dis_start(void); 6.2 总体完全电路图

19

基于 DS18B20 温度传感器的数字温度计

U1 VCC C1 30p VCC C2 30p C3 10uF VCC 19 18 XTAL1 XTAL2 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P1.0/T2 P1.1/T2EX P1.2/ECI P1.3/CEX0 P1.4/CEX1 P1.5/CEX2 P1.6/CEX3 P1.7/CEX4 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 2 40 39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8 21 22 23 24 25 26 27 28 VCC P0_0 P0_1 P0_2 P0_3 P0_4 P0_5 P0_6 P0_7 P1_0 VCC P1_1 P1_2 P1_3 P1_4 P1_5 P1_6 P1_7 P2_3 P2_0 P2_1 P2_2 P2_3 P2_4 P2_5 P2_6 P2_7 1602 1 3 5 7 9 11 13 15 17 19 2 4 6 8 10 12 14 16 18 20 p2-6 p2-5 p2-4

AT24C08 A0 A1 A2 VSS 1 2 3 4 VCC 8 WP 7 SCL 6 SDA 5 VCC p3_7 p3_6

SW1

1

Y1 XTAL

REST 9 31 PSEN 29 ALE 30 P3_0 P3_1 P3_2 P3_3 P3_4 P3_5 P3_6 P3_7 10 11 12 13 14 15 16 17

RST EA/VPP PSEN ALE/PROG P3.0/RxD P3.1/TxD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD

Header 10X2

Header 4X2H U3 P3_1 11 10 8 13 C4 4 10uF C6 VCC 10uF 5 2 C2+ VCC GND C2V+ C1+ C1V1 3 6 D IN1 DIN2 R IN1 R IN2 DOUT1 DOUT2 R OUT1 R OUT2 14 7 9 12

R1 10K

VCC T 9012

P3_0

R6 510 Speaker + -

C5 20 10uF C7 10uF J1 VCC 1 6 2 7 3 8 4 9 5 VCC 11 10 R2 10K VSS P89C51RD2HBP P2_0

18b02 R5 4K7 1 2 3 MHDR1X3 VCC

16

15

MAX232

P2_1

VCC

R3 10K

VCC

R4 10K

P2_2

SW2

SW3

SW4

D Connector 9

图 19 系统总体完全电路图

7 参考资料
[1].张洪润等, 《电子线路与电子技术》 ,北京:清华大学出版社,2005; [2].王松武等, 《电子创新设计与实践》 ,北京:国防工业出版社,2005; [3].李建忠, 《单片机原理及应用》 ,西安:西安电子科技大学出版社,2002; [4].黄智伟等, 《全国大学生电子设计竞赛训练教程》 ,北京:电子工业出版社,2004; [5].樊昌信等.通信原理.北京:国防工业出版社,2001; [6].RS232.pdf [7].何希才,新型集成电路及应用实例,北京:科学出版社,2002

20


相关文章:
基于温度传感器的温度计设计
基于单片机控制的数字温度器,本温度计属于多功能温度计, 可以设置上下报警温度...DS18B20,此传感器,可 以很容易直接读取被测温度值,进行转换,就可以满足设计要求...
基于温度传感器的数字温度计
华东交通大学 电子测量传感器设计报告 报告题目:基于温度传感器的数字温度计 作者...本文主要介绍了一个基于 89C51 单片机和 DS18B20 的测温系统, 详细描述 了...
基于数字温度传感器的数字温度计、
数字温度计所测量的温度采用数字 显示,控制器使用单片机 AT89C51 ,测温传感器使用 DS18B20,用 LED 数码管实现温度显示。 -1- 课程设计摘要 一、课程设计摘要: ...
基于DS18B20的数字温度计的设计与实现
设计采用51单片机和DS18B20 数字温度传感器来进行温度测量的方法,包括温度传感器...31 基于 DS18B20 的数字温度计设计与实现 1 绪论 1.1 温度计的介绍 温度...
基于51单片机与DS18B20的数字温度计设计
基于51单片机与DS18B20的数字温度计设计_电子/电路_工程科技_专业资料。安徽农业...3.1.2 方案二考虑到在单片机属于数字系统,容易想到数字温度传感器,可选用 DS...
基于数字温度计的传感器设计
基于数字温度传感器的温度计设计 1 原理介绍 1.1 总体设计方案本作品拟采用 AT89C51 单片机作为控制器,温度传感器则采用 DS18B20,系 统分为三个模块,分别是主控...
单片机课程设计 基于数字温度传感器的数字温度计报告
单片机课程设计 基于数字温度传感器的数字温度计报告_工学_高等教育_教育专区。《...设计要求 利用数字温度传感器 DS18B20 与单片机结合来测量温度。利用数字温度 ...
基于51单片机的数字温度计设计
基于51单片机的数字温度计设计_电子/电路_工程科技_专业资料。摘要 本文主要介绍了一种基于AT89S51单片机和DS18B20数字温度传感器来进行测温的 方法。 具体设计时, ...
基于DS18B20设计的数字温度计毕业论文
9 2.2.2 DS18B20 温度传感器与单片机的接口电路???13 2.3 显示部分电路设计...数字温度计设计 二 、毕业设计(论文)使用的原始资料(数据)及设计技术要求: 1、...
基于C51单片机数字温度计设计制作
基于C51单片机数字温度计设计制作_工学_高等教育_教育专区。摘要 随着时代的进步...本文将介绍智能集成温度传感器 DS18B20 的结构特征及控制方法,并对以此传感器, 89...
更多相关标签:
ds18b20温度传感器 | ds18b20温度传感器ppt | ds18b20 温度计 | c51 温度计 ds18b20 | 18b20温度传感器 | 18b20温度传感器程序 | 18b20温度传感器引脚 | 18b20温度传感器资料 |