基于DS18B20数字温度计设计

发布者:老桃子最新更新时间:2016-09-07 来源: eefocus关键字:DS18B20  数字温度计 手机看文章 扫描二维码
随时随地手机看文章
单片机除了可以测量电信号外,还可以用与温度、湿度等非电信号的测量,能独立工作的单片机温度检测、温度控制系统已经广泛的应用于很多领域。单片机的接口信号是数字信号,要想用单片机作区温度这类非电信号,就要使用温度传感器将温度信息转换为电流或者电压信号输出,如果转化的信号是模拟信号,还需要进行A/D转化,以满足单片机接口的需要。

本试验结合温度传感器DS18B20及单线技术实现数字温度计的设计。

 

主要器件:

1、  AT89C52单片机芯片,控制温度传感器和数据处理。

2、  单线数字温度传感器DS18B20。

 

试验流程图: 
 

实验电路图: 
 

试验程序代码:

//DigThermo.h程序

#ifndef    _DIGTHERMO_H               // 防止DigThermo.h被重复引用

 

#define    _DIGTHERMO_H

 

#include         // 引用标准库的头文件

#include

#include

#include

 

#define uchar unsigned char

#define uint unsigned int

 

uchar tplsb,tpmsb;         // 温度值低位、高位字节

 

sbit DQ = P3^5;                   // 数据通信线DQ

 

 

#endif

 

//DigThermo.c程序

#include "DigThermo.h"

 

/* 延时t毫秒 */

void delay(uint t)

{

       uint i;

       while(t--)

       {

              /* 对于11.0592M时钟,约延时1ms */

              for (i=0;i<125;i++)

              {}

       }

}

 

/* 产生复位脉冲初始化DS18B20 */

void TxReset(void)

{

       uint i;

       DQ = 0;

 

       /* 拉低约900us */

       i = 100;

       while (i>0)      i--;  

      

       DQ = 1;                       // 产生上升沿

       i = 4;

       while (i>0)      i--;

}

 

/* 等待应答脉冲 */

void RxWait(void)

{

       uint i;

       while(DQ);

       while(~DQ);                 // 检测到应答脉冲

       i = 4;

       while (i>0)      i--;

}

 

/* 读取数据的一位,满足读时隙要求 */

bit RdBit(void)

{

       uint i;

       bit b;

       DQ = 0;

       i++;

       DQ = 1;

       i++;i++;                 // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效

       b = DQ;

       i = 8;

       while(i>0) i--;

       return (b);

}

 

/* 读取数据的一个字节 */

uchar RdByte(void)

{

       uchar i,j,b;

       b = 0;

       for (i=1;i<=8;i++)

       {

              j = RdBit();

              b = (j<<7)|(b>>1);

       }

       return(b);

}

 

/* 写数据的一个字节,满足写1和写0的时隙要求 */

void WrByte(uchar b)

{

       uint i;

       uchar j;

       bit btmp;

       for(j=1;j<=8;j++)

       {

              btmp = b&0x01;

              b = b>>1;              // 取下一位(由低位向高位)

              if (btmp)

              {

                     /* 写1 */

                     DQ = 0;

                     i++;i++;   // 延时,使得15us以内拉高

                     DQ = 1;

                     i = 8;

                     while(i>0) i--; // 整个写1时隙不低于60us

            }

              else

              {

                     /* 写0 */

                     DQ = 0;               

                     i = 8;

                     while(i>0) i--; // 保持低在60us到120us之间

                     DQ = 1;

                     i++;

                     i++;

              }

       }

}

 

/* 启动温度转换 */

void convert(void)

{

       TxReset();                    // 产生复位脉冲,初始化DS18B20

       RxWait();                     // 等待DS18B20给出应答脉冲

       delay(1);                // 延时

       WrByte(0xcc);              // skip rom 命令

       WrByte(0x44);              // convert T 命令

}

 

/* 读取温度值 */

void RdTemp(void)

{

       TxReset();                    // 产生复位脉冲,初始化DS18B20

       RxWait();                     // 等待DS18B20给出应答脉冲

       delay(1);                // 延时

       WrByte(0xcc);              // skip rom 命令

       WrByte(0xbe);              // read scratchpad 命令

       tplsb = RdByte();    // 温度值低位字节(其中低4位为二进制的“小数”部分)

       tpmsb = RdByte();  // 高位值高位字节(其中高5位为符号位)          

}

 

/* 主程序,读取的温度值最终存放在tplsb和tpmsb变量中。

   tplsb其中低4位为二进制的“小数”部分;tpmsb其中高

   5位为符号位。真正通过数码管输出时,需要进行到十进

   制有符号实数(包括小数部分)的转换。              */

void main(void)

{

       do

       {    

              delay(1);         // 延时1ms

              convert();              // 启动温度转换,需要750ms

              delay(1000);   // 延时1s

              RdTemp();             // 读取温度                

       }

       while(1);

}

关键字:DS18B20  数字温度计 引用地址:基于DS18B20数字温度计设计

上一篇:基于MPX4105数字气压计设计
下一篇:单片机实现语音录放

推荐阅读最新更新时间:2024-03-16 15:08

51单片机做的智能时钟具有闹钟功能(DS1302+DS18B20+LCD1602)
本贴针对学完单片机并且有读懂代码的非新手同学。本人目前放寒假,这个是本人在上个学期的单片机课上要求做的综合实验,现在重新修改了下增加了菜单目前测试毫无问题可以完美使用。有志向做闹钟的同学可以参考一下,原码上由本人写的大量注释可以方便看懂。 使用了LCD1602、DS1302、DS18B20用来测试温度、内部含闹钟系统但本人没有做EEPROM有需要的同学可以自行添加。 单片机源程序如下: #include reg52.h #include key.h #include LCD1602.h #include DS1302.h #include music.h #include DS18B20.H #define no
[单片机]
DS18B20,源程序测试OK
; FLAG1: 标志位,为 1 时表示检测到DS18B20 ; DQ: DS18B20的数据总线接脚 ; TEMPER_NUM:保存读出的温度数据 ; 本程序仅适合单个DS18B20和51 单片机 的连接, 晶振 为12M Hz 左右 TEMPER_L EQU 36H TEMPER_H EQU 35H DQ BIT P1.7 ; DS18B20初始化程序 ;//*****************************************// INIT_1820: SETB DQ NOP CLR DQ MOV R0,#06BH TSR1: DJNZ R0,TSR1 ;
[单片机]
智能温度传感器DS18B20的原理与应用
DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 1DS18
[传感技术]
基于AT89C51和DS18B20的最简温度测量系统
  l引 言   温度的测量和控制在激光器、光纤光栅的使用及其他的工农业生产和科学研究中应用广泛。 温度检测 的传统方法是使用诸如 热电偶 、热电阻、半导体PN结之类的 模拟 温度 传感器 。信号经取样、放大后通过 模数转换 ,再交自单片机处理。被测温度信号从温敏元件到单片机,经过众多器件,易受干扰、不易控制且精度不高。因此,本文介绍一种新型的可编程 温度传感器 DS18B20,他能代替模拟温度传感器和信号处理电路,直接与单片机沟通,完成温度采集和数据处理。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场 温度测量 ,有广泛的应用前景。   2温度测量系统硬件
[单片机]
STM8S - DS18B20
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- /******** STM8S-Discovery DS18B20 Test ******** * 版本.........: 1.0 * 目标.........: STM8S105C6T6 * 文件名.......: main.c * 开发环境.....: IAR for STM8 V1.1 ***********************************************/ #include iostm8s105
[单片机]
农业大棚智能检测环境系统
0 引言 随着科学技术的不断发展,人们的生产对周围环境的要求也越来越高,比如农作物大棚、工厂以及一些大型机械设备,都需要实时掌握工作条件的温度、光照等。传统的人工测量方法浪费人力物力,效率低,安全性差。随着单片微型机技术的发展,人们已越来越多地采用单片机对一些工业控制系统参数进行检测和控制。与此同时,PC机具有强大的监控和管理功能,而单片机则具有简洁、灵活、快速的控制特点。通过PC机的RS 232串行接口与外部设备进行通信,是现在测控中常用的一种通信解决方案,所以PC机与单片机之间的通信具有非常重要的现实意义。 1 系统硬件总体设计 系统总体设计是基于上位机利用串口通信与单片机环境监控系统设计,由上位机、通信接口和下位机
[单片机]
农业大棚智能检测环境系统
采用单片微控制器的低成本数字温度计
在许多应用中,温度的检测和显示功能都是所期望或绝对需要的。温度探头、自动调温器、CPU监控器和过程控制设备就是一些这样的应用。插图示出了一个用于温度检测和显示的简单系统。该电路只需要一个微控制器(MCU),而不像其他解决方案那样需要单独的功率管理和模拟变换器芯片。而且,该电路无需对复位引脚进行任何的特殊处理,因为所使用的MCU引入了节电型的检测方法。 德州仪器(TI)公司的MSP430F412型MCU在执行快闪存储器代码的同时由一个高速内部振荡器进行计时。首先,代码运用单斜率模拟转换技术来读取电阻性传感器的信息。然后,将读数变换成BCD值并显示于LCD上。LCD不需要单独的驱动芯片;它由MCU直接驱动。LCD还会显示一个闪烁的“F”
[单片机]
基于DS18B20与TMS320LF2407A的温度测量系统
  前 言   DS18B2普遍都是和单片机配合使用,很少有关于 DSP 与DS18B20的连接的接口报道,所以此文详细介绍了TMS320LF2407与 DS18B20的连接方法,并且很详细的介绍了如何用C语言完成精确的软件延时,从而完成DS18B20与TMS320LF2407之间的基于单线总线协议的数据通讯。   1 DS18B20的时序   1. 1 复位时序   复位使用DS18B20时,首先需将其复位,然后才能执行其它命令。复位时,主机将数据线拉为低电平并保持480us~960us,然后释放数据线,再由上拉电阻将数据线拉高15~60us,等待DS18B20发出存在脉冲,存在脉冲有效时间为60~240us,这
[单片机]
基于<font color='red'>DS18B20</font>与TMS320LF2407A的温度测量系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved