基于stc15芯片的温度传感器DS18B20的使用

发布者:MysticEssence最新更新时间:2018-06-20 来源: eefocus关键字:stc15芯片  温度传感器  DS18B20 手机看文章 扫描二维码
随时随地手机看文章

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

    File name:                      温度传感器DS18B20的使用 

    Main Function:              通过温度传感器DS18B20检测温度, 

                                                转换后上传至串口助手 

    Last modified Date:     2017-10-28 

    Created by:             Zhang Zhihao 

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

  

#ifndef _DS18B20_H  

#define _DS18B20_H  

  

#include  

  

#define uchar unsigned char  

#define uint  unsigned int  

  

sbit DQ = P3^7;         //DS1820数据线IO口  

bit nflag;                //温度正负标志  

sbit test = P5^5;  

  

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

    延时函数:延时1us 

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

void delayus(uint i)  

{  

    while(i--);  

}  

  

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

    功能:         延时,最小单位为ms(晶振为11.0592 

    计算方法:一个for循环 = 8个指令周期 = 8*12个机器周期 

                        = 8*12*1/11.0592 = 0.0086ms 

                        xms = 0.0086 * 110 = 0.946 ms 

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

void delayms(uint xms)  

{  

    uint i,j;  

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

        for(j=110;j>0;j--);  

}  

  

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

    DS18B20复位函数: 

    1 数据线拉低,延时480us 

    2 数据线拉高,延时480us 

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

void ds1820rst()          

{  

  

    DQ = 1;             //初始状态  

    delayus(4);       

    DQ = 0;             //拉低  

    delayus(480);   //延时480us  

    DQ = 1;             //拉高  

    delayus(480);    

}  

  

  

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

    18b20读数据:由低位到高位,重复八次,读一个字节 

    1 数据线拉低,延时4us 

    2 数据线拉高,延时10us 

    3 读数据线状态一位,处理数据,延时45us 

    4 重复步骤1-3 

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

uchar ds1820rd()  

{  

    uchar i = 0;  

    uchar dat = 0;  

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

    {  

        DQ = 0;         //拉低数据线  

        delayus(4);  

        dat>>=1;      //空出第一位  

        DQ = 1;         //拉高数据线  

        delayus(10);  

        if(DQ)          //若为高电平,则最高位置一  

            dat|=0x80;  

        delayus(45);//延时45us  

    }  

    return(dat);  

}  

  

  

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

    18b20写数据:由低位到高位,重复八次,写一个字节 

    1 数据线拉低,延时15us 

    2 送一位数据到数据线,延时60us 

    3 数据线拉高 

    4 重复步骤1-3 

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

void ds1820wr(uchar wdata)  

{  

    uchar i = 0;  

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

    {  

        DQ = 0;                  //数据线拉低  

        delayus(15);  

        DQ = wdata&0x01; //将数据最低位送入数据线  

        delayus(60);         //延时10us  

        DQ = 1;                  //数据线拉高  

        wdata>>=1;             //字节右移一位  

    }  

}  

  

  

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

    读温度并转换,根据RAM命令表写命令 

        0xcc:               不读取序列地址 

        0x44:               启动温度转换 

        0xbe:               读取温度 

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

uint read_temp()     

{  

    uchar TL,TH;                                        //TL:低八位 TH:高八位  

    uchar wd;                                               //最终温度的绝对值  

      

    ds1820rst();                                    //先复位  

    ds1820wr(0xcc);                             //不读取64位地址,因为总线上只有一个DB1820,单片工作  

    ds1820wr(0x44);                               //启动温度转换  

      

    delayus(125);  

      

    ds1820rst();  

    ds1820wr(0xcc);                             //跳过读序列号  

    ds1820wr(0xbe);                             //读取温度  

      

    TL = ds1820rd();                                //读低八位  

    TH = ds1820rd();                                //读高八位  

      

    wd = TL/16+TH*16;  

//  tvalue = TH;                                //tvalue为16位  

//  tvalue = (tvalue<<8)+TL;  

//  if((tvalue&0xf800) == 0xf800)       //判断负温度  

//  {  

//      tvalue=~tvalue+1;                           //补码=反码+1  

//      nflag = 0;                                      //置标志位为0  

//  }  

//  else  

//      nflag = 1;  

//    

//  wd = tvalue*0.625;                          //计算温度值  

    return(wd);                                         //返回温度值  

}  

  

  

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

    串口初始化函数: 

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

void init()  

{                 

    P1M0 = 0;P1M1 = 0;  

    SCON = 0x40;  

    T2L  = 0xe0;  

    T2H  = 0xfe;  

    AUXR = 0x14;  

    AUXR |= 0x01;  

    TI = 1;  

}  

  

  

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

    串口通讯函数:发送两个字节,首字节为正负标志位, 

                                第二个字节为温度值 

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

void comm(uchar temper)  

{  

  

//  while(!TI == 1);  

//  {  

//      TI = 0;  

//      SBUF = nflag;  

//  }  

    while(!TI == 1);  

    {  

        TI = 0;  

        SBUF = temper;  

    }  

}  

  

  

#endif  



#include "function.h"  

  

void main()  

{  

    uchar temp;                     //临时变量存储温度  

    init();                             //串口的初始化  

    test = 0;                           //蓝色的led,测试使用  

    while(1)  

    {  

        temp=read_temp();       //读取温度  

        delayms(500);               //延时0.5s  

        comm(temp);                 //发送至上位机  

    }  

}   


关键字:stc15芯片  温度传感器  DS18B20 引用地址:基于stc15芯片的温度传感器DS18B20的使用

上一篇:stm8程序设计之PWM
下一篇:STC15F2K60S2读取DS18B20温度串口显示

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

温度传感器MAX6613设计的温度采集系统原理解析
温度采集系统主要通过温度传感器MAX6613采集得到温度数据,MSP430F149作为CPU从温度传感器读取数据,将得到的数据进行判断然后做相应的处理,比如显示或者报警。温度传感器通过某种关系的换算,就可以得到温度与输出电压的关系,对于MAX6613来说,其输出的电压与温度的关系如图所示。 图 MAX6613传感器输出的电压与温度的关系 为了能够便于计算,得到温度与电压的转换等式为: VOUT=-0.0000022xT2-0.01105xT+1.8455V (4-1) 但是在大多数情况下,采用下面的线性关系式也可以完成转换运算。 VOUT=-0.0123xT+1.8455V (4-2) 感器的输入电压,再通过上面式(4-2)就
[单片机]
<font color='red'>温度传感器</font>MAX6613设计的温度采集系统原理解析
基于AVR单片机的温度测量系统
1 引言   传统温度测量系统中,一般选用模拟式温度传感器。常用的模拟式温度传感器,其中一个共同特点是输出为模拟量,因此在测量电路中必须经过A/D转换才能成为计算机所能处理的数字量。数字式温度传感器将非电模拟量转换到数字信号这一处理过程的多个环节集成在单芯片上,实现了在测量点将温度值数字化,有效解决了传统温度传感器外围电路复杂,抗干扰能力差的弊病,降低了对系统的要求。   该系统以Atmel公司的ATmega8L单片机为控制中心,温度测量使用DS18B20单总线数字温度传感器,采用1602字符型液晶显示器作为温度值的显示输出。编程使用CodeVision AVR C Compiler编译器,该编译软件自带了使用器件库函数文件
[单片机]
基于AVR单片机的温度测量系统
基于采用AT89S51单片机和LM35温度传感器的温度采集显示系统设计
随着电子和传感技术的快速发展,温度的测量和控制在民用、工业以及航空航天技术等领域,等到了广泛应用。小型的、低功耗的、廉价的、可靠性高的温度传感器引起了人们的广泛关注。在实际生产、生活等领域中,温度是环境因素不可或缺的一部分,对温度进行及时精确的控制和检测显得尤为重要。本文基于AT89S51单片机,采用 LM35温度传感器,设计了一种灵敏度较高,抗干扰能力强,工作稳定可靠的温度采集显示系统。 1、系统结构及工作原理 温度采集显示系统电路由温度采集模块、A/D转换模块、单片机控制模块、数码管显示模块和下载模块组成。电路工作原理是:首先由LM35温度传感器采集外界环境的温度,经LM358放大10倍后以电压形式输入到A/D采样电路,由
[单片机]
基于采用AT89S51单片机和LM35<font color='red'>温度传感器</font>的温度采集显示系统设计
STM32驱动DS18B20
DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线”接口的温度传感器。与传 统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的 数字化温度传感器。一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络, 从而为测量系统的构建引入全新概念,测量温度范围为-55~+125℃ ,精度为±0.5℃。现场温 度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。它能直接读出被测温度, 并且可根据实际要求通过简单的编程实现 9~l2 位的数字值读数方式。它工作在 3—5. 5 V 的电 压范围,采用多种封装形式,从而使系统设计灵活、方便,设定分辨率及用户设定的报警温度 存储在
[单片机]
STM32驱动<font color='red'>DS18B20</font>
Maxim Integrated的IO-Link智能温度传感器参考设计
Maxim Integrated的IO-Link智能温度传感器参考设计有效降低成本、延长工作时间,适用于工业控制和自动化应用。 中国,北京,2015年3月26日。Maxim Integrated Products, Inc. (NASDAQ: MXIM)推出MAXREFDES42# IO-Link温度传感器参考设计(RD),帮助设计人员降低功耗、成本和占板面积。 MAXREFDES42# RTD IO-Link参考设计是公司IO-Link系列参考设计的新成员,面向工业控制和自动化应用,其高集成度模拟前端(AFE)在检测温度的同时,还具备过压、短路和开路检测功能,分立方案则不具备上述功能。该款
[传感器]
Maxim Integrated的IO-Link智能<font color='red'>温度传感器</font>参考设计
单片机练习 - DS18B20温度转换与显示
最近都在学习和写单片机的程序, 今天有空又模仿DS18B20温度测量显示实验写了一个与DS18B20基于单总线通信的程序. DS18B20 数字温度传感器(参考:智能温度传感器DS18B20的原理与应用)是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。DS18B20 产品的特点: (1)、只要求一个I/O 口即可实现通信。 (2)、在DS18B20 中的每个器件上都有独一无二的序列号。 (3)、实际应用中不需要外部任何元器件即可实现测温。 (4)、测量温度范围在-55 到+125℃之间; 在-10 ~ +85℃范围
[单片机]
单片机练习 - <font color='red'>DS18B20</font>温度转换与显示
基于AT89C51的多点温度检测系统设计
0 引言 在工业生产及日常生活中,多点温度检测系统的应用十分广泛,例如消防电气的非破坏性温度检测,电力设备的过热故障预知检测,空调系统的温度检测,各类运输工具组件的过热检测,医疗与诊断设备的温度测试等。针对这一情况,本文设计了一种基于AT89C51、数字温度传感器DSl8820的多点温度检测系统,该系统利用DSl8820单总线的特点,可以方便地组建传感器网络,从而实现多点温度的测量。该系统设计灵活、抗干扰性好,可以在恶劣的工作环境中进行温度测量。 1 总体结构 设计的多点温度检测系统如图1所示。该系统主要由AT89C51单片微型计算机、键盘显示电路、温度显示电路、看门狗电路、温度测试电路、串口通信电路等组成。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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