您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页基于DS18B20温度传感器的显示及报警系统

基于DS18B20温度传感器的显示及报警系统

来源:华佗小知识


综合课程设计报告

报 告 题 目 :基于DS18B20温度传感器的

温度显示及报警系统

作者所在系部: 机械工程系 作者所在专业: 测控技术与仪器 作者所在班级: B09122 作 者 姓 名 : 雷苏力 作 者 学 号 : 20094012216 指导教师姓名: 康会峰、赵保亚 完 成 时 间 : 2013年1月3日

北华航天工业学院教务处制

基于DS18B20温度传感器的显示及报警系统

摘 要

随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够工作的温度检测与显示系统应用于诸多领域。传统的温度检测以热敏电阻为温度敏感元件。热敏电阻的成本低,需要外加信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。与传统的温度计相比,这次设计的是基于DS18B20的数字温度计,它具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。

在本设计中选用STCC52型单片机作为主控制器件,采用DS18B20数字温度传感器作为测温元件,通过4位共阳极LED数码显示管并行传送数据,实现温度显示。通过按键设置温度上下限报警值,然后用不同颜色的LED灯报警。本设计的内容主要分为两部分,一是对系统硬件部分的设计,包括串口下载电路、按键输入电路、温度采集电路和显示电路;二是对系统软件部分的设计,应用C语言实现温度上下限报警值的设定、温度的采集与显示。通过DS18B20直接读取被测温度值,送入单片机进行数据处理,之后进行输出显示,最终完成该系统的总体设计。其系统构成简单,信号采集效果好,数据处理速度快,便于实际监测使用。

关键词:单片机STCC52;温度传感器DS18B20;LED数码管;数字温度计

— 1 —

Abstract

Along with the present information technology's swift development and traditional industry transformation's gradual realization, able to work independently of the temperature detection and display system used in many other fields. Traditional temperature examination takes thermistor as temperature sensitive unit. Thermistor's cost is low, needs the signal processing electric circuit, moreover the reliability is relatively bad, the temperature measurement accuracy is low, the examination system also has certain error. Compares with the traditional thermometer, what this design is based on the DS18B20 digital thermometer, it has the reading to be convenient, the temperature measurement scope is broad, the temperature measurement is precise, the digit demonstrated that applicable scope wide and so on characteristics.

Used in the design STCC52MCU as the main control device, digital temperature sensor DS18B20 as the temperature components of the anode through the four LED digital display tube parallel transmission of data, to achieve temperature display. This design's content mainly divides into two parts; first, to system hardware part design, including temperature gathering electric circuit and display circuit; Second, to the system software part's design, realizes temperature gathering and the demonstration using the C language. DS18B20 measured by direct reading temperature values and transfer Data into MCU and output to show his is the design of the Digital Thermometer. Its system constitution is simple, the effect of signal gathering is good, the speed of data processing is quick at al it is advantageous for the actual examination use.

Keywords: MCU STCS52; DS18B20; LED; Digital Thermometer

— 2 —

目 录

第一章 绪论 ...................................................................................................................................................... 4 1.1课题背景及来源 ......................................................................................................................................... 4 1.2课题内容及要求 ......................................................................................................................................... 4 第二章 系统整体设计 ...................................................................................................................................... 5 2.1系统设计方案论证 ................................................................................................................................... 5 第三章 系统的硬件选择及设计 ...................................................................................................................... 6 3.1主控制器的设计 ......................................................................................................................................... 6 3.2温度采集电路的设计 ................................................................................................................................. 6 3.3温度显示电路的设计 ............................................................................................................................... 10 第四章 系统的软件设计 ................................................................................................................................ 12 4.1概述 ........................................................................................................................................................... 13 4.2程序流程图 ............................................................................................................................................... 13 4.3 控制源程序 .............................................................................................................................................. 15 第五章 系统调试 ............................................................................................................................................ 15 结 论 .............................................................................................................................................................. 37 致 谢 .............................................................................................................................................................. 37 参考文献 .......................................................................................................................................................... 38

— 3 —

第一章 绪论

1.1课题背景及来源

单片机自1976年由Intel公司推出MCS-48开始,迄今已有三十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域,对各个行业的技术改造和产品更新换代起着重要的推动作用。

众所周知,环境温度一直是生物能否较适宜生存的一个重要因素,而人们对环境温度的感知也从单纯的身体感官的感受发展到用各种温度计来对环境温度进行准确的测量。但是受限于技术等原因,温度计通常都有体积较大,精度不高等各种缺陷。而数字温度测量芯片的出现则解决了这些问题,其中的一款芯片DS18B20是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此,用它来组成一个测温系统,具有线路简单,在一根通信线上可以挂载很多这样的数字温度芯片,十分方便。

目前,国际上新型温度传感器正从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展。

1.2课题内容及要求

本设计主要介绍了用单片机和数字温度传感器DS18B20相结合的方法来实现温度的采集,以单片机STCC52芯片为核心,辅以温度传感器DS18B20和LED数码管及必要的外围电路,构成了一个多功能单片机数字温度计;并且可以通过按键设置上下限报警值,超过限值是通过LED报警。该装置适用于人民的日常生活和工、农业生产的温度测量与报警,实现对温度的监测。其主要研究内容包括两方面,一是对系统硬件部分的设计,包括温度采集电路和显示电路;二是对系统软件部分的设计,应用C语言实现温度的采集与显示。

通过对本课题的设计能够熟悉数字温度计的工作原理及过程,了解各功能器件(单片机、DS18B20、LED)的基本原理与应用,掌握各部分电路的硬件连线与程序编写,最终完成对数字温度计的总体设计。其具体的要求如下: 1、根据设计要求,选用STCC52单片机为核心器件;

2、温度检测器件采用DS18B20数字式温度传感器,利用单总线式连接方式与单片机的串行接口P2.2引脚相连;

3、显示电路采用4个LED数码管显示器接P0口并行显示温度值,数码管由P3口(P3.4~P3.7)选通,动态显示。

— 4 —

第二章 系统整体设计

2.1 系统设计方案论证

2.1.1 方案一

由于本设计实现的是测温电路,首先我们可以使用热敏电阻之类的器件,利用其感温效应,将其随被测温度变化的电压或电流值采集过来,进行A/D转换后,就可以用单片机进行数据的处理,通过显示电路就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。因此,我们引出第二种方案。

2.1.2 方案二

我们可以采用技术成熟、操作简单、精确度高的温度传感器,在此,可以选用数字温度传感器DS18B20,根据它的特点和测温原理,很容易就能直接读取被测温度值并进行转换,这样就可以满足设计要求。

从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故在本设计中采用了方案二。

通过方案二设计的温度计总体设计方框图如图2.1所示,控制器采用单片机STCC52,温度传感器采用DS18B20,用4位LED数码管以串口并行输出方式传送数据实现温度显示。系统硬件电路图见附录A。

图2.1 总体设计方框图

时钟振荡 控 制 器 温 度 传 感 器 单片机复位 主 报警装置 LED显示

— 5 —

第三章 系统的硬件选择及设计

3.1主控制器的设计

3.1.1 STCC52的简介

STCC52是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4kbytes的可编程的Flash只读程序存储器,兼容标准8051指令系统及引脚,并集成了 Flash 程序存储器,既可在线编程(ISP),也可用传统方法进行编程,因此,低价位STCC52单片机可应用于许多高性价比的场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。单片机STCC52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

3.2温度采集电路的设计

由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。这里采用DALLAS公司的数字温度传感器DS18B20作为测温元件。

3.2.1 DS18B20的简介

DS18B20温度传感器是美国DALLAS半导体公司推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:

DS18B20 的性能特点如下:

独特的单线接口仅需一个端口引脚进行通讯

每个器件有唯一的 位的序列号存储在内部存储器中 简单的多点分布式测温应用 无需外部器件

可通过数据线供电。供电范围为3.0V到5.5V。 测温范围为-55~+125℃(-67~+257℉) 在-10~+85℃范围内精确度为±5℃

— 6 —

温度计分辨率可以被使用者选择为9~12位 最多在 750ms 内将温度转换为12 位数字 用户可定义的非易失性温度报警设置

报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件 与DS1822兼容的软件

应用包括温度控制、工业系统、消费品、温度计或任何热感测系统

DS18B20内部结构主要由四部分组成:位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列、各种封装形式如图 3.2 所示。其中,DQ 为数据输入/输出引脚,也可用作开漏单总线接口引脚,当被用在寄生电源工作方式下,可以向器件提供电源;GND为地信号;VDD为可选择的电源引脚,当工作于寄生电源时,此引脚必须接地。其电路图3.3所示。

图3.2外部封装形式 图3.3 传感器电路图

3.2.2 DS18B20内部结构

图3.4为DS1820的内部结构框图,它主要包括寄生电源、温度传感器、位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。DS18B20采用3脚PR-35封装或8脚SOIC封装。

— 7 —

I/O C VDD 位 Rom 和 单 总 线 接 存储器与逻辑控制 高 速 温度传感器 高温触发器TH 低温触发器TL 配置寄存器 8位CRC发生器 缓 存 图3.4 DS18B20内部结构框图

温度传感器DS18B20的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3.5所示。

Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 Byte8

图3.5 高速暂存RAM结构图

其中,前2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

暂存存储器的第5个字节是配置寄存器,可以通过相应的写命令进行配置,其内容如下:

温度 LSB 温度 MSB TH用户字节1 TL用户字节2 配置寄存器 保留位(FFh) 保留位(0Ch) 保留位(10h) CRC TH用户字节1 TL用户字节2 配置寄存器

— 8 —

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0

0 R1 R0 1 1 1 1 1 其中R0和R1是温度值分辨率位,可按表3.3进行配置。

表3.3 温度值分辨率配置表

R1 0 0 1 1

R0 0 1 0 1

分辨率 9位 10位 11位 12位

最大转换时间(ms) 93.75ms(tconv/8) 183.50ms(tconv /4) 375ms(tconv /2) 750ms(tconv)

当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可通过单线接口读到该数据,读取时低位在前、高位在后,数据格式以0.0625℃/LSB形式表示。温度值格式如下: LS Byte MS Byte Bit7 23 Bit15 S Bit6 22 Bit14 S Bit5 21 Bit13 S Bit4 20 Bit12 S Bit3 2-1 Bit11 S Bit2 2-2 Bit10 26 Bit1 2-3 Bit9 25 Bit0 2-4 Bit8 24 这是12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。格式中,S表示位。对应的温度计算:当符号位S=0时,表示测得的温度植为正值,直接将二进制位转换为十进制;当S=1时,表示测得的温度植为负值,先将补码变换为原码,再计算十进制值。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较,若T>TH或T3.2.3 温度采集电路

设计的温度采集电路如图3.6所示:

— 9 —

图3.6 温度采集电路图

3.3温度显示电路的设计

3.3.1 LED数码管的操作

LED数码管,也叫LED数码显示器,由于它具有很高的性能价格比、显示清晰、亮度高、使用方便、电路简单、寿命长等诸多优点,长期以来一直在各类电子产品和工程控制中得到非常广泛的应用。

LED数码管的基本组成是半导体发光二极管,它是将若干个发光二极管,按照一定的笔段组合起来构成的一个整体。LED数码管能显示0~9十个数字及部份英文字母。常见的八段LED数码管结构如图3.7所示。

图3.7 数码管的内部结构

根据8个发光二极管的不同连接形式,可以将LED数码管分成共阳极和共阴极两种。

— 10 —

(如图3.8所示)。

图3.8 LED数码管共阳极和共阴极链接

如果加到各笔段对应发光二极管阳极上的代码不同,则就能控制LED数码管显示不同的字符和数字,这个代码称为段码。通常将这个段码用单片机系统中的一个字节进行存储,正好这个字节中的8个二进制位(D7、D6、D5、D4、D3、D2、D1、D0),依次对应LED数码管的8个笔段dp、g、f、e、d、c、b、a。

3.3.2温度显示电路

显示电路采用4个共阴极LED数码管,从P0口并行输出段码,用P2.1~P2.4四个端口输出选择脉冲,控制数码管的点亮。

— 11 —

图3.8 数码管显示电路

— 12 —

第四章 系统的软件设计

4.1概述

软件设计关键在于DS18B20的使用。DS18B20属于单线式器件,它在一根数据线上实现数据的双向传输,这就需要一定的协议,来对读写数据提出严格的时序要求,而STCC52单片机并不支持单线传输,因此必须采用软件的方法来模拟单线的协议时序。

4.2程序流程图

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。

1、 主程序

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图4.4所示。

调用子程序 发跳转ROM命令 初始化

发DS18B20复位命令 N 1S到? 发读取温度命令 读取操作,CRC校验 Y 初次上电 Y Y N N 9字节完? Y 读出温度值,温度计算处理显示数据刷新 N

发温度转换开始命令 CRC校验正确? 移入温度暂存器 结束

图4.4 主程序流程图 图4.5 读温度流程图

2、读出温度子程序

— 13 —

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图4.5所示。

发跳过ROM命令 发DS18B20复位命令 发温度转换开始命令 结束 图4.6 温度转换流程图

3、温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如上图,图4.6所示。

4、计算温度子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图4.7所示。

计算小数位温度BCD值 计算整数位温度BCD值

结束 结束 温度值取补码置“—”标志 置“+”标志 百位数0? Y 十位数显示符号百位数不显示 百位数显示数据(不显示符号) 温度零下? Y Y N N 开始 N 温度数据移入显示寄存器 十位数0? 图4.7 计算温度流程图 图4.8 显示数据刷新流程图

5、 显示数据刷新子程序

— 14 —

显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如图4.8所示。

4.3 控制源程序

/****************此部分为18B20的驱动程序*****************/ #include #include

sbit D18B20=P3^7;

#define NOP() _nop_() /* 定义空指令 */ #define _Nop() _nop_() /*定义空指令*/

void TempDelay (unsigned char idata us); void Init18b20 (void);

void WriteByte (unsigned char idata wr); //单字节写入 void read_bytes (unsigned char idata j); unsigned char CRC (unsigned char j); void GemTemp (void);

— 15 —

void Config18b20 (void); void ReadID (void);

void TemperatuerResult(void);

bit flag;

unsigned int idata Temperature;

unsigned char idata temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节 unsigned char idata id_buff[8]; unsigned char idata *p,TIM; unsigned char idata crc_data;

unsigned char code CrcTable [256]={

0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 157, 195, 33, 127, 252, 162, , 30, 95, 1, 227, 1, 62, 96, 130, 220,

— 16 —

35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, 70, 24, 250, 1, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, , 7, 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53}; //

/************************************************************

— 17 —

*Function:延时处理 *parameter: *Return: *Modify:

*************************************************************/ void TempDelay (unsigned char idata us) {

while(us--); }

/************************************************************ *Function:18B20初始化 *parameter: *Return: *Modify:

*************************************************************/

— 18 —

void Init18b20 (void) {

D18B20=1; _nop_(); D18B20=0;

TempDelay(80); //delay 530 uS//80 _nop_(); D18B20=1;

TempDelay(14); //delay 100 uS//14 _nop_(); _nop_(); _nop_();

if(D18B20==0)

flag = 1; //detect 1820 success! else

— 19 —

flag = 0; //detect 1820 fail! TempDelay(20); //20 _nop_(); _nop_(); D18B20 = 1; }

/************************************************************ *Function:向18B20写入一个字节 *parameter: *Return: *Modify:

*************************************************************/ void WriteByte (unsigned char idata wr) //单字节写入 {

unsigned char idata i;

— 20 —

for (i=0;i<8;i++) {

D18B20 = 0; _nop_(); D18B20=wr&0x01;

TempDelay(3); //delay 45 uS //5 _nop_(); _nop_(); D18B20=1; wr >>= 1; } }

/************************************************************ *Function:读18B20的一个字节 *parameter:

— 21 —

*Return: *Modify:

*************************************************************/ unsigned char ReadByte (void) //读取单字节 {

unsigned char idata i,u=0; for(i=0;i<8;i++) {

D18B20 = 0; u >>= 1; D18B20 = 1; if(D18B20==1) u |= 0x80; TempDelay (2); _nop_(); }

— 22 —

return(u); }

/************************************************************ *Function:读18B20 *parameter: *Return: *Modify:

*************************************************************/ void read_bytes (unsigned char idata j) {

unsigned char idata i; for(i=0;i*p = ReadByte(); p++;

— 23 —

} }

/************************************************************ *Function:CRC校验 *parameter: *Return: *Modify:

*************************************************************/ unsigned char CRC (unsigned char j) {

unsigned char idata i,crc_data=0; for(i=0;icrc_data = CrcTable[crc_data^temp_buff[i]]; return (crc_data); }

— 24 —

/************************************************************ *Function:读取温度 *parameter: *Return: *Modify:

*************************************************************/ void GemTemp (void) {

read_bytes (9);

if (CRC(9)==0) //校验正确 {

Temperature = temp_buff[1]*0x100 + temp_buff[0]; // Temperature *= 0.625; Temperature /= 16; TempDelay(1);

— 25 —

} }

/************************************************************ *Function:内部配置 *parameter: *Return: *Modify:

*************************************************************/ void Config18b20 (void) //重新配置报警限定值和分辨率 {

Init18b20();

WriteByte(0xcc); //skip rom WriteByte(0x4e); //write scratchpad WriteByte(0x19); //上限 WriteByte(0x1a); //下限

— 26 —

WriteByte(0x7f); //set 12 bit (0.125) Init18b20();

WriteByte(0xcc); //skip rom WriteByte(0x48); //保存设定值 Init18b20();

WriteByte(0xcc); //skip rom WriteByte(0xb8); //回调设定值 }

/************************************************************ *Function:读18B20ID *parameter: *Return: *Modify:

*************************************************************/ void ReadID (void)//读取器件 id

— 27 —

{

Init18b20();

WriteByte(0x33); //read rom read_bytes(8); }

/************************************************************ *Function:18B20ID全处理 *parameter: *Return: *Modify:

*************************************************************/ void TemperatuerResult(void) {

p = id_buff; ReadID();

— 28 —

Config18b20(); Init18b20 ();

WriteByte(0xcc); //skip rom

WriteByte(0x44); //Temperature convert

Init18b20 ();

WriteByte(0xcc); //skip rom WriteByte(0xbe); //read Temperature p = temp_buff; GemTemp(); }

void GetTemp() {

if(TIM==100) //每隔 1000ms 读取温度

— 29 —

{ TIM=0;

TemperatuerResult(); } }

/************************************* [ t1 (10ms)中断] 中断

*************************************/ void T1zd(void) interrupt 3 {

TH1 = 0xD8; //10 TL1 = 0xF0; TIM++; }

— 30 —

/*****************************************************************

**************

* 标题: 试验数码管上显示温度

******************************************************************

***************

* 1.通过本例程了解 DLASS18b20的基本原理和使用 ,理解并掌握18B20驱动程序的编写

* 2.了解掌握I2C总线接口的工作原理及一般编程方法。 * * 插上18B20 观察数码管的实际温度显示

* 用排线将JP10(P0口)与J12连接在数码管上可以看温度显示 *

* 18B20程序只能在12T模式下工作 6T模式自己修改相应时序* *************************************************************/ #include

extern GetTemp(); //声明引用外部函数 extern unsigned int idata Temperature; // 声明引用外部变量 void delay(unsigned int i);

— 31 —

//else IO

sbit LS138A=P2^2; //管脚定义 sbit LS138B=P2^3; sbit LS138C=P2^4; sbit Beep = P1^5 ;

//此表为 LED 的字模, 共阴数码管 0-9 - unsigned

char

code

Disp_Tab[]

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned long LedOut[5],LedNumVal;

void system_Ini() {

TMOD|= 0x11; TH1 = 0xD8; //10

=

— 32 —

TL1 = 0xF0; IE = 0x8A; TR1 = 1; } main()

{ unsigned char i; unsigned char K=0; system_Ini(); while(1) { GetTemp();

/********以下将读18b20的数据送到LED数码管显示*************/ LedNumVal=Temperature; //把实际温度送到LedNumVal变量中 LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

— 33 —

LedOut[1]=Disp_Tab[LedNumVal%1000/100]; LedOut[2]=Disp_Tab[LedNumVal%100/10]; //十位 LedOut[3]=Disp_Tab[LedNumVal%10]; //个位 K= LedNumVal%100/10; for(i=0; i<4; i++) {

P0 = LedOut[i] ;

switch(i) { //138译码

case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS138B=0; LS138C=0; break; case 2:LS138A=0; LS138B=1; LS138C=0; break; case 3:LS138A=1; LS138B=1; LS138C=0; break; } delay(100);

— 34 —

} P0 = 0; if(K>=3 && K<7) {

Beep=!Beep; } } }

//延时程序

void delay(unsigned int i) {

char j;

for(i; i > 0; i--)

for(j = 200; j > 0; j--); }

— 35 —

第五章 系统调试

系统的调试以程序为主,硬件调试比较简单,首先检查电路的焊接是否正确,然后可用万用表测试或通电检测。软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换子程序、计算温度子程序、显示数据刷新等子程序的编程及调试,由于DS18B20与单片机采用串行数据传送,因此,对DA18B20进行读写编程时必须严格的保证读写时序,否则将无法读取测量结果。本程序采用单片机汇编边写,用Keil C51编译器编程调试。软件调试到能显示温度值,而且在有温度变化时(例如用手去接触)显示温度能改变就基本完成。

性能测试可用制作的温度计和已有的成品温度计来同时测量比较,由于DS18B20的精度很高,所以误差指标可以在0.1℃以内,另外-55℃~+125℃的测量范围使得该温度计完全适合一般的应用场合,其低电压供电特性可做成用电池供电的手持温度计。

DS18B20温度计还可以在高低温报警、远距离多点测温控制等方面进行应用开发,但在实际设计中应注意一下问题:

① ② ③

DS18B20工作时电流高达1.5mA,总线上挂节点数较多且同时进行转换时,要考虑增加总线驱动,可用单片机端口在温度转换时导通一个MODFET供电。 连接DS18B20的总线电缆是有长度的,因此在用DS18B20进行长距离测温系统设计时,要充分考虑总线分布电容和阻抗匹配等问题。

在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或短线,当程序读该DS18B20时,将没有返回信号,程序进行死循环,这一点在进行DS18B20硬件连接和软件设计时要给予一定的重视。

— 36 —

结 论

本设计介绍了基于DS18B20的数字温度显示、报警系统的工作原理及实现过程,我和小组成员程考在这三周的时间阅读了有关C语言编程的若干书籍,完成了温度显示及设置程序的修改和调试。

通过这次毕业设计使我们学习到了很多的东西,不仅加深了对专业知识的理解,而且更好地把理论知识与实践相结合,提高了自身的动手能力和实践水平,增强了学习单片机系统开发与设计的兴趣。

由于我们的知识有限,在本设计中不可避免存在一些不足之处,我们会在以后的学习生活中不断加以完善。相信本次课程设计的经历一定会在我们今后的学习生活中产生巨大的推动作用。

致 谢

衷心感谢康会峰、赵宝亚(按姓氏拼音排列)两位指导教师的热心指导。感谢张凌浩、姚少锋的热心帮助。

— 37 —

参考文献

[1] 于永.51单片机C语言常用模块与综合系统设计实例精讲[M].北京:电子工业出版社,2008

[2] 戴永成等.基于DS18B20的数字温度测量仪[J].北华航天工业学院学报,2008 [3] 廖常初.现场总线概述[J].电工技术,1999

[4] 张越等.基于DS18B20温度传感器的数字温度计[J].微电子学,2007

[5] 李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,1998 [6] 黄河.基于DS18B20的单总线数字温度计[J].湘潭师范学院学报,2008 [7] 李广弟.单片机基础[M].北京:北京航空航天大学出版社,1994

[8] 王建强等.基于DSP控制器与DS18B20的温度测量方法[J]. 仪器仪表与检测技术,2009

— 38 —

附 录A

系统的硬件电路图

— 39 —

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务