1、基于单片机的 DS18B20 数字温度计设计学生姓名: 侯晋启 专业名称: 自动化专业 班 级: 2014 级自动化 1 班 学 号: 20144786 摘 要本设计采用的主控芯片是 ATMEL 公司的 AT89C51 单片机,数字温度传感器是DALLAS 公司的 DS18B20。本设计用数字传感器 DS18B20 测量温度,测量精度高,传感器体积小,使用方便。所以本次设计的数字温度计在工业、农业、日常生活中都有广泛的应用。单片机技术已经广泛应用社会生活的各个领域,已经成为一种非常实用的技术。51 单片机是最常用的一种单片机,而且在高校中都以 51 单片机教材为蓝本,这使得 51 单片机成为初
2、学单片机技术人员的首选。本次设计采用的 AT89C51 是一种 flash 型单片机,可以直接在线编程,向单片机中写程序变得更加容易。本次设计的数字温度计采用的是 DS18B20 数字温度传感器,DS18B20 是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。本设计根据设计要求,首先设计了硬件电路,然后绘制软件流程图及编写程序。本设计属于一种多功能温度计,温度测量范围是-55到 125。温度值的分辨率可以被用户设定为 9-12 位,可以设置上下限报警温度,当温度不在设定的范围内时,就会启动报警程序报警。本
3、设计的显示模块是用液晶显示屏 1602 实现温度显示。在显示实时测量温度的模式下还可以通过查询按键查看设定的上下限报警温度。一、实验设计概述本系统所设计的数字温度计采用的是 DS18B20 数字温度传感器测温,测温上下限为 10C40C。DS18B20 直接输出的就是数字信号,与传统的温度计相比,具有读数方便,测温范围广,测温准确,上下限报警功能。其输出温度采用 LCD1602 显示,主要用于对测温比较准确的场所。该设计控制器使用的是 51 单片机 AT89C51,AT89C51 单片机在工控、测量、仪器仪表中应用还是比较广泛的。测温传感器使用的是 DS18B20,DS18B20 是一种可组网
4、的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。显示是用液晶显示屏 1602 实现温度显示。蜂鸣器用来实现当测量温度超过设定的上下限时的报警功能。二、系统总体方案及硬件设计2.1 系统总体设计框图由于 DS18B20 数字温度传感器具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠,所以在该设计中采用 DS18B20 数字温度传感器测量温度。 温度计电路设计总体设计框图如图 2-1 所示,控制器采用单片机 AT89C51,温度传感器采用 DS18B20,显示采用液晶显示 16
5、02,报警采用蜂鸣器、LED 灯实现,键盘用来设定报警上下限温度。图 2-1 温度计电路总体设计框图2.2 各模块简介(1)控制模块AT89C51 单片机是美国 ATMEL 公司生产的低功耗,高性能 CMOS 8 位单片机,片内含有 8kb 的可系统编程的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 8051 指令系统及引脚。在单芯片上,拥有灵巧的 8 位 CPU 和单片机测温电路按键输入电路驱动电路 显示电路报警电路时钟、复位电路在系统可编程的 Flash,使得 AT89C51 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89
6、C51 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89C51 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。(2)显示模块显示电路采用液晶显示屏 1602。LCD1602 采用标准的 14 脚(无背光)或 16 脚(带背光
7、)接口,各引脚接口说明如表2-1 所示:表 2-1: LCD1602 引脚说明编号 符号 引脚说明 编号 符号 引脚说明1 VSS 电源地 9 D2 数据2 VDD 电源正极 10 D3 数据3 VL 液晶显示偏压 11 D4 数据4 RS 数据/命令选择 12 D5 数据5 R/W 读/写选择 13 D6 数据6 E 使能信号 14 D7 数据7 D0 数据 15 BLA 背光源正极8 D1 数据 16 BLK 背光源负极表 10-13:引脚接口说明表第 1 脚:VSS 为地电源。第 2 脚:VDD 接 5V 正电源。第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对
8、比度最高,对比度过高时会产生“ 鬼影”,使用时可以通过一个 10K 的电位器调整对比度。第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W 为低电平时可以写入数据。第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。第 714 脚:D0D7 为 8 位双向数据线。第 15 脚:背光源正极。第 16 脚:背光源负极。本实验设计采用
9、 14 脚接口。1602 液晶模块内部的控制器共有 11 条控制指令,如表 2-2 所示:表 2-2: LCD1602 控制指令序号 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D01 清显示 0 0 0 0 0 0 0 0 0 12 光标返回 0 0 0 0 0 0 0 0 1 *3 置输入模式 0 0 0 0 0 0 0 1 I/D S4 显示开/关控制 0 0 0 0 0 0 1 D C B5 光标或字符移位 0 0 0 0 0 1 S/C R/L * *6 置功能 0 0 0 0 1 DL N F * *7 置字符发生存贮器地址 0 0 0 1 字符发生存贮器地址8
10、置数据存贮器地址 0 0 1 显示数据存贮器地址9 读忙标志或地址 0 1 BF 计数器地址10 写数到 CGRAM 或DDRAM) 1 0 要写的数据内容11 从 CGRAM 或 DDRAM读数 1 1 读出的数据内容(3)温度传感器模块DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现 912 位的数字值读数方式。DS18B20 的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个 DS18B20 可以并联在惟一的三线上,实现多点组网功能;无须外部
11、器件;可通过数据线供电,电压范围为 3.05.5v;零待机功耗;温度以 9 或12 位二进制数字表示;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20 采用 3 脚 TO92 封装或 8 脚 SO 或 SOP 封装,其其封装形式如图 2-2 所示。图 2-2 DS18B20 的封装形式DS18B20 的 64 位 ROM 的结构开始 8 位是产品类型的编号,接着是每个器件的惟一的序号,共有 48 位,最后 8 位是前面 56 位的 CRC 检验码,这也是多个 DS18B20 可
12、以采用一线进行通信的原因。温度报警触发器 TH 和 TL,可通过软件写入户报警上下限。DS18B20 温度传感器的内部存储器还包括一个高速暂存 RAM 和一个非易失性的可电擦除的 EEPRAM。高速暂存 RAM 的结构为 8 字节的存储器,结构如图 2-3 所示。图 2-3 DS18B20 的高速暂存 RAM 的结构头 2 个字节包含测得的温度信息,第 3 和第 4 字节 TH 和 TL 的拷贝是易失的,每次上电复位时被刷新。第 5 个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率,DS18B20 工作时寄存器中的分辨率转换为相应精度的温度数值,该字节各位的定义如表 2-3所示。表
13、 2-3:配置寄存器D7 D6 D5 D4 D3 D2 D1 D0TM R1 R0 1 1 1 1 1配置寄存器的低 5 位一直为 1,TM 是工作模式位,用于设置 DS18B20 在工作模式还是在测试模式,DS18B20 出厂时该位被设置为 0,用户要去改动,R1 和 R0 决定温度转换的精度位数,来设置分辨率,“R1R0”为“00” 是 9 位,“01”是 10 位,“10”是 11 位,“11”是 12 位。当 DS18B20 分辨率越高时,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。高速暂存 RAM 的第 6、7、8 字节保留未用,表现为全逻辑 1。第
14、 9 字节读出前面所有8 字节的 CRC 码,可用来检验数据,从而保证通信数据的正确性。当 DS18B20 接收到温度转换命令后,开始启动转换。转换完成后的温度值就以 16 位带符号扩展的二进制补码形式存储在高速暂存存储器的第 1、2 字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以 0.0625LSB 形式表示。当符号位 s0 时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位 s1 时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。输出的二进制数的高 5 位是符号位,最后 4 位是温度小数点位,中间 7 位是温度整数位。表 2
15、-4 是一部分温度值对应的二进制温度数据。表 2-4 DS18B20 输出的温度值温度值 二进制输出 十六进制输出+125 0000 0111 1101 0000 07D0h+85 0000 0101 0101 0000 0550h+25.0625 0000 0001 1001 0001 0191h+10.125 0000 0000 1010 0010 00A2h+0.5 0000 0000 0000 1000 0008h0 0000 0000 0000 0000 0000h-0.5 1111 1111 1111 1000 FFF8h-10.125 1111 1111 0101 1110 FF
16、5Eh-25.0625 1111 1110 0110 1111 FF6Fh-55 1111 1100 1001 0000 FC90hDS18B20 完成温度转换后,就把测得的温度值与 RAM 中的 TH、TL 字节内容作比较。若 T TH 或 TTL ,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只 DS18B20 同时测量温度并进行报警搜索。在 64 位 ROM 的最高有效字节中存储有循环冗余检验码(CRC)。主机 ROM 的前 56 位来计算 CRC 值,并和存入DS18B20 的 CRC 值作比较,以判断主机收到的 ROM 数据是否正确。DS18B20
17、传感器的操作指令如表 2-5 所示。传感器复位后向传感器写相应的命令才能实现相应的功能。表 2-5 DS18B20 的指令表指 令 指令代码 功 能读 ROM 0x33 读 DS1820 温度传感器 ROM 中的编码(即 64 位地址)符合 ROM 0x55 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索 ROM 0xF0 用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。跳过 ROM 0xCC 忽略 64 位 ROM 地址,直接向 DS
18、1820 发温度变换命令。适用于单片工作。告警搜索命令0xEC 执行后只有温度超过设定值上限或下限的片子才做出响应。温度变换 0x44 启动 DS1820 进行温度转换,12 位转换时最长为750ms(9 位为 93.75ms)。结果存入内部 9 字节RAM 中。读暂存器 0xBE 读内部 RAM 中 9 字节的内容写暂存器 0x4E 发出向内部 RAM 的 3、4 字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器 0x48 将 RAM 中第 3 、4 字节的内容复制到 EEPROM 中。重调 EEPROM0xB8 将 EEPROM 中内容恢复到 RAM 中的第 3
19、、4 字节。读供电方式 0xB4 读 DS1820 的供电模式。寄生供电时 DS1820 发送“ 0 ”,外接电源供电 DS1820 发送“ 1 ” 。DS18B20 传感器为单总线结构器件,在读写操作之前,传感器芯片应先进性复位操作也就是初始化操作。DS18B20 的初始化时序如图 2-4 所示。首先控制器拉高数据总线,接着控制器给数据总线一低电平,延时 480s,控制器拉高数据总线,等待传感器给数据线一个 60-240s 的低电平,接着上拉电阻将数据线拉高,这样才初始化完成。图 2-4 DS18B20 初始化时序DS18B20 传感器的读写时序1.写时序DS18B20 传感器的读写操作是在
20、传感器初始化后进行的。每次操作只能读写一位。当主机把数据线从高电平拉至低电平,产生写时序。有两种类型的写时序:写“0”时序,写“1”时序。所有的时序必须有最短 60s 的持续期,在各个写周期之间必须有最短 1s 的恢复期。在数据总线由高电平变为低电平之后,DS18B20 在 15s 至 60s 的时间间隙对总线采样,如果为“1”则向 DS18B20 写“1” , 如果为“0” 则向 DS18B20 写“0” 。如图 2-5 的上半部分。对于主机产生写“1”时序时,数据线必须先被拉至低电平,然后被释放,使数据线在写时序开始之后 15s 内拉至高电平。对于主机产生写“1”时序时,数据线必须先被拉至
21、低电平,且至少保持低电平 60s。2.读时序在数据总线由高电平变为低电平之后,数据线至少应保持低电平 1s,来自 DS18B20的输出的数据在下降沿 15s 后有效,所以在数据线保持低电平 1s 之后,主机将数据线拉高,等待来自 DS18B20 的数据变化,在下降沿 15s 之后便可开始读取 DS18B20 的输出数据。整个读时序必须有最短 60s 的持续期。如图 2-5 的下半部分。读时序结束后数据线由上拉电阻拉至高电平。图 2-5 DS18B20 传感器的读写时序(4)调节模块介绍调节模块是由六个按键接地后直接接单片机的 I/O 口完成的。当按键没有按下时单片机管脚相当于悬空,默认下为高电
22、平,当按键按下时相当于把单片机的管脚直接接地,此时为低电平。程序设计为低电平触发。K1 键: 查看上下限温度报警值。K2 键: 返回实时温度。K3 键: 上调温度上限值。K4 键: 下调温度下限值。K5 键: 上调温度下限值。K6 键: 下调温度下限值。(5)报警模块介绍报警模块是由一个 npn 型的三极管 9012 驱动的 12V 蜂鸣器,两个发光二极管组成的。低温报警时,蜂鸣器工作,蓝色发光二极管发光。高温报警时,蜂鸣器工作,红色发光二极管发光。三、 系统硬件设计3.1 单片机电路设计图 3-1 单片机最小系统原理图单片机最小系统是由晶振电路,上电复位、按键复位电路,ISP 下载接口和电源
23、指示灯组成。原理图如图 3-1 所示。3.2.DS18B20 温度传感器电路设计DS18B20 温度传感器是单总线器件与单片机的接口电路采用电源供电方。电源供电方式如图 3-2,此时 DS18B20 的 1 脚接地,2 脚作为信号线,3 脚接电源。图 3-2 DS18B20 电源供电方式当 DS18B20 处于写存储器操作和温度 A/D 转换操作时,总线上必须有强的上拉,上拉开启时间最大为 10us。采用寄生电源供电方式时 VDD 端接地。由于单线制只有一根线,因此发送接口必须是三态的。3.3 显示电路设计显示电路是由液晶显示屏 1602 进行显示的,由单片机 P0 口输出时,需要加上一个上拉
24、电阻稳定电压,本设计采用排阻来实现。显示电路的总体设计如图 3-3 所示。图 3-3 显示电路3.4 按键电路设计按键电路是用来实现调节设定报警温度的上下限和查看上下报警温度的功能。电路原理图如图 3-4 所示。图 3-4 按键电路原理图3.5 报警电路设计报警电路是在测量温度大于上限或小于下限时提供报警功能的电路。该电路是由一个蜂鸣器和一个红色的发光二极管组成,具体的电路如图 3-6 所示。图 3-5 报警电路原理图四、软件设计4.1 主程序设计主程序需要调用 3 个子程序,分别为: 实时温度显示子程序:驱动数码管把实时温度值送出在液晶显示屏显示 查询记录温度值子程序:查询过去存储的温度值,
25、最多可查询 10 个值 温度设定、报警子程序:设定报警温度值,当温度超过该值时产生报警,即驱动蜂鸣器鸣叫、8 个发光二极管发光主程序流程图:图 4-1 主程序流程图4.2 DS18B20 程序设计读温度值模块需要调用 4 个子程序,分别为: DS18B20 初始化子程序:让单片机知道 DS18B20 在总线上且已准备好操作 DS18B20 写字节子程序:对 DS18B20 发出命令 DS18B20 读字节子程序:读取 DS18B20 存储器的数据 延时子程序:对 DS18B20 操作时的时序控制1. 读温度值模块流程图:开始显示实时温度温度设定、报警查询记录温度值定时器初始化、启动图 4-2
26、读温度值子程序流程图 2. DS18B20 初始化子程序流程图:图 4-5 DS18B20 初始化子程序流程图3. DS18B20 写字节和读字节子程序流程图:图 4-6 DS18B20 写字节子程序流程图 图 4-7 DS18B20 读字节子程序流程图4.3 按键程序设计按键是用来查看上下报警温度值以及设定上下限报警温度的。具体的程序流程图如图 3-5 所示。图 4-9 按键程序流程图五、实验设计结果此次实验设计完成比较理想,仿真实验结果符合设计结果。LCD1602 能实时显示DS18B20 检测到的温度。当前温度超过设定的上下限温度报警值时,蜂鸣器和发光二极管能正常发出警报。并且通过按键可
27、以完成以下操作:K1 键: 查看上下限温度报警值。K2 键: 返回实时温度。K3 键: 上调温度上限值。K4 键: 下调温度下限值。K5 键: 上调温度下限值。K6 键: 下调温度下限值。六、实验设计总结此次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我们所学到的知识运用到实践中去。在大学课堂的学习只是给我们灌输专业知识,而我们应把所学的知识应用到我们现实的生活中去。这次的设计不仅使我们将课堂上学到的理论知识与实际应用结合了起来,而且使我们对电子电路、电子元器件、印制电路板等方面的知识有了更进一步的认识,同时在软件编程、相关软件的使用等方面得到较全面的锻炼和提高,
28、为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。此次单片机设计也为我们以后进行更复杂的单片机系统设计提供了宝贵的经验。本次设计的另一个重点就是软件程序的设计,其中需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论,有些东西是很难理解的,更谈不上掌握。通过此次的综合设计,我们初步掌握了单片机系统设计的基本原理。充分认识到理论学习与实践相结合的重要性,对于书本上的很多知识,不但要学会,更重要的是会运用到实践中去。在以后的学习中,我们会更加注重实践方面的锻炼,多提高自己的动手实践能力。七
29、、实验设计程序#include#include#include#define uchar unsigned char#define uint unsigned intsbit DQ=P37;/ds18b20 与单片机连接口sbit RS=P25;sbit RW=P26;sbit E=P27;sbit k=P10;sbit k_=P11;sbit k1=P14;sbit k2=P15;sbit k3=P16;sbit k4=P17;sbit led_red=P22;sbit led_blue=P23;sbit beep=P30;uint H,L,L1;uint M,M1;uint gw = 40
30、;uint dw = 10;unsigned char code str1=“temperature: “;unsigned char code str2=“ “; unsigned char code str3= “HI: “;unsigned char code str4= “LO: “;unsigned char code str5=“-0123456789“;uchar data disdata5;uchar data disbj50;uint tvalue;/温度值uchar tflag;/温度正负标志uchar bjflag;/低温报警正负标志/*lcd1602 程序*/void
31、delay1ms(unsigned int ms)/延时 1 毫秒(不够精确的)unsigned int i,j;for(i=0;i0;i-) DQ = 0; /给脉冲信号dat=1;DQ = 1; /给脉冲信号if(DQ)dat|=0x80;delay_18B20(10);return(dat);void ds1820wr(uchar wdata)/*写数据*/unsigned char i=0;for (i=8; i0; i-) DQ = 0;DQ = wdatadelay_18B20(10);DQ = 1;wdata=1;/*读取温度值并转换 */read_temp()uchar a,b;ds1820rst(); ds1820wr(0xcc);/*跳过读序列号*/ds1820wr(0x44);/*启动温度转换*/ds1820rst(); ds1820wr(0xcc);/*跳过读序列号*/ ds1820wr(0xbe);/*读取温度*/ a=ds1820rd();b=ds1820rd();tvalue=b; M=b;tvalueH) led_red=1;beep=1;delay1ms(20);else led_red=0;beep=0;if(dwL1)led_blue=1;beep=1;*/ if(k=0) /报警显示 wr_com(0x01);