精华内容
下载资源
问答
  • DS18B20自用封装函数

    2021-06-10 09:38:13
    #ifndef __DS18B20_H__ #define __DS18B20_H__ #include <reg51.h> //DS18B20 IO设置 sbit DS18B20_DQ = P2^7; //函数声明 extern void DS18B20_Delay( unsigned int n ); extern void DS18B20_Write_...

    头文件

    #ifndef __DS18B20_H__
    #define __DS18B20_H__
    
    
    #include <reg51.h>
    
    //DS18B20 IO设置
    sbit DS18B20_DQ = P2^7;
    
    
    //函数声明
    extern void DS18B20_Delay( unsigned int n );
    extern void DS18B20_Write_Byte( unsigned char dat);
    extern unsigned char DS18B20_Read_Byte( );
    extern void DS18B20_Init(void);
    extern unsigned int Get_temp(void);
    //变量声明
    extern unsigned char flag_temper;
    extern unsigned int temp;
    
    #endif
    
    

    主文件

    #include "DS18B20.h"
    #include "digital.h"
    #include<intrins.h>
    
    //定义变量
    unsigned char flag_temper = 0;
    unsigned int temp;
    //****************************************************
    //DS18B20延时函数
    //****************************************************
    void DS18B20_Delay( unsigned int n )
    {
    	while(n--) ;
    }
    //****************************************************
    //DS18B20写1字节
    //****************************************************
    void DS18B20_Write_Byte( unsigned char dat)
    {
    	unsigned char i;
    	for( i = 0 ; i < 8 ; i++ )
    	{
    		DS18B20_DQ = 0;
    		DS18B20_DQ = dat&0x01;	 	//先写低位
    		DS18B20_Delay(5);       //延迟50Us
    	  DS18B20_DQ = 1;		//释放总线
        dat >>= 1;	
    	}		
    			
    }
    
    //****************************************************
    //DS18B20读1字节
    //****************************************************
    unsigned char DS18B20_Read_Byte( )
    {
    	unsigned char dat,i;
    	for( i = 0 ; i < 8 ; i++ )
    	{
    		DS18B20_DQ = 0;
    		dat >>= 1;
    //		_nop_();			//延时>1us
    //		_nop_();
    			DS18B20_DQ = 1;		//释放总线
    		
    		if( DS18B20_DQ == 1)
    		{
    			dat |= 0X80;
    		}
    		DS18B20_Delay(4);	//延时40us			
    	}
    	return dat;		
    }
    
    //****************************************************
    //DS18B20初始化
    //****************************************************
    void DS18B20_Init(void)
    {
    	bit Flag_exist = 0;
    	DS18B20_DQ = 1;			//释放总线
    //	_nop_();				//延时>1us
    //	_nop_();
    DS18B20_Delay(8);       //延时80us	
    	DS18B20_DQ = 0;	
    	DS18B20_Delay(80);		//延时800us	
    
    	DS18B20_DQ = 1;			//释放总线
    	DS18B20_Delay(14);		//延时140us
    
    	Flag_exist = DS18B20_DQ;
    	DS18B20_Delay(20);		//延时200us		
    }
    
    //**********************************************************
    //读取温度函数,返回温度的绝对值,并标注flag_temper,flag_temper=1表示负,flag_temper=0表示正
    //**********************************************************
    unsigned int Get_temp(void)         //读取温度值 
    {  
    	float tt;
    	unsigned char a,b;
      DS18B20_Init();
    		DS18B20_Write_Byte(0xcc);          //忽略ROM指令
    		DS18B20_Write_Byte(0x44);          //温度转换指令
    	
    	//	_delay_ms(750);				//PROTEUS仿真需要加
    	
    	DS18B20_Init();
    			DS18B20_Write_Byte(0xcc);         //忽略ROM指令
    			DS18B20_Write_Byte(0xbe);         //读暂存器指令
    			a = DS18B20_Read_Byte();          //读取到的第一个字节为温度LSB
    			b = DS18B20_Read_Byte();          //读取到的第一个字节为温度MSB
    			temp = b;                         //先把高八位有效数据赋于temp
    			temp <<= 8;                       //把以上8位数据从temp低八位移到高八位
    			temp = temp|a;                    //两字节合成一个整型变量
    			
    			if(temp>0xfff)
    			{
    				flag_temper=1;				          //温度为负数
    				temp=(~temp)+1;
    			}
    			else
    			{																			   
    				flag_temper=0;				          //温度为正或者0
    			}
    			
    			tt = temp*0.0625;                 //得到真实十进制温度值
    			                                  //因为DS18B20可以精确到0.0625度
    			                                  //所以读回数据的最低位代表的是0.0625度
    			temp = tt*10+0.5;                 //放大十倍
    			                                  //这样做的目的将小数点后第一位也转换为可显示数字
    		                              	    //同时进行一个四舍五入操作。10指的是小数位,100=2位小数
    	return temp;
    }
    

    问题一:
    仿真提示RAM COMMAND UNSUPPORTED,这是由于读数据太快,以至于DS18B20还没准备好,导致数码显示0,或者其他数字。

    解决:应该是延迟没有严格按照时序图设置

    展开全文
  • 本文主要讲了DS18B20封装和管脚定义,希望对你的学习有所帮助。
  • DS18B20温度传感器

    2019-11-01 01:00:19
    DS18B20温度传感器DS18B20封装ROM操作命令存储器操作命令 DS18B20封装 ROM操作命令 存储器操作命令

    DS18B20温度传感器封装

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    ROM操作命令

    在这里插入图片描述

    存储器操作命令

    在这里插入图片描述

    效果图

    在这里插入图片描述
    看图知有LCD显示屏,因此可延用先前的LCD1602.C文件

    代码

    DS18B20.c

    #include<reg51.h>
    #include<stdio.h>
    #include<intrins.h>
    #include<string.h>
    #include<stdlib.h>
    
    #define INT8U unsigned char
    #define INT16U unsigned int
    
    sbit DQ = P3^4; //special bit
    INT8U tempValue[]={0x00, 0x00};	   //代表RAM低8位和高8位
    extern void delay_ms(INT16U x);
    
    /**
    * 延时函数 针对12Mhz的晶振
    * _nop_()相当于一个机器周期(12个振荡周期) --> 1us
    *
    *@param x 延时时间(单位us)
    *@return
    */
    void delay_us(INT16U x)
    {
    	while(x--)
    		_nop_();
    }
    
    
    /**
    * 精确延时函数
    * delay(0):延时518us 误差:518-2*256=6
    * delay(1):延时7us
    * delay(10):延时25us    误差:25-20=5
    * delay(20):延时45us    误差:45-40=5
    * delay(100):延时205us 误差:205-200=5
    * delay(200):延时405us 误差:405-400=5
    *
    *@param x 延时时间
    *@return 
    */
    void delay(INT16U x)
    {
    	while(--x);
    }
    
    /**
    * 初始化(先拉低再拉高才能生效,1->0->1)
    * 拉低电平需要保持480us,高电平需要保持15us
    *
    *@return 0:初始化成功 ,1:初始化失败 
    */
    INT8U init()
    {
    	INT8U status; //状态
    	//下面整个过程时间为480us
    	DQ = 1; delay_us(15);	
    	DQ = 0; delay_us(450);	
    	DQ = 1; delay_us(15);
    
    	status = DQ;
    	delay_ms(100);   //延时一段时间再读取DQ时若一下子变0则初始化成功
    	
    	return status;
    }
    
    /**
    * 读取DQ中的数据
    *
    * @return 八位数据
    */
    INT8U read_byte()
    {
    	INT8U i, dat=0x00;
    	
    	for(i=0x01; i!=0x00; i<<=1) // 从低到高读(从右往左移)	   0000 0001 -->  0000 0010  -->  0000 0100   ........
    	{
    		DQ=0; delay_us(1);
    		DQ=1; delay_us(7);	  //有上升延是读
    		if(DQ)
    			dat = dat|i;	//把每次读取的位依次放入
    		delay_us(25); //此延时不能少,确保读时序的长度60us。 硬件读和软件写要等它一会儿。
    	}
    	
    	return dat;
    }
    
    /**
    *写数据(与上面读相对应,该案例没用到写只用了读)
    *
    *@dat 八位数据
    *@return
    */
    void write(INT8U dat)
    {
    	INT8U i;
    	
    	for(i=0; i<8; i++)
    	{
    		DQ=0; delay_us(1);	//下降延写
    		dat = dat>>1; //把最低位移到PSW的进/借位CY
    		DQ = CY;	  //写
    		delay(8);
    		DQ = 1;
    	}
    }
    
    /**
    *读取温度数据值
    *
    *@return 1:成功,0:失败
    */
    INT8U read_temp()
    {
    	if(init()) return 0;   //判断初始化是否成功
    	else
    	{
    		write(0xCC); //单点连线 
    		write(0x44); //启动温度转换	  (存储器操作命令)
    		write(0xBE); //读取温度数字值
    		tempValue[0] = read_byte(); //读取RAM里低8位
    		tempValue[1] = read_byte(); //读取RAM里高8位
    		return 1;
    	}
    }
    

    MainX.c

    #include<reg51.h>
    #include<stdio.h>
    #include<intrins.h>
    #include<string.h>
    #include<stdlib.h>
    
    #define INT8U unsigned char
    #define INT16U unsigned int
    //导入外部的函数和变量
    INT8U temp_buff[17];
    extern INT8U tempValue[];
    extern void delay_ms(INT16U x);
    extern void LCD_Initialize();
    extern void LCD_String(INT8U r,INT8U c,INT8U *str);
    extern INT8U read_temp();
    
    void main()
    {
    	float tempV = 0.0;
    	LCD_Initialize();	//LCD初始化
    	LCD_String(0, 0, " DS18B20 Project");	 //总共只能有16个字符
    	LCD_String(1, 0, "    waiting.....");
    	read_temp();	   //读取温度数据值
    	delay_ms(1000);
    	
    	while(1)
    	{
    		if(read_temp())	   //若读取温度数据值成功
    		{
    			tempV = (((int)tempValue[1]<<8) | (int)tempValue[0]) * 0.0625; //转化为16位,0.0625是精度
    			sprintf(temp_buff, "  temp: %5.2f\xDF\x43", tempV);		//格式化(tempV以这种格式拷贝到temp_buff),.2是两个小数点,\xDF\x43对应字符集里面的
    			LCD_String(1, 0, temp_buff);		 //写字符串
    		}
    		delay_ms(50);
    	}
    }
    

    LCD1602.c

    #include<reg51.h>
    #include<intrins.h>
    
    #define INT8U unsigned char
    #define INT16U unsigned int
    
    sbit RS=P2^0;
    sbit RW=P2^1;
    sbit EN=P2^2;
    
    void delay_ms(INT16U x)
    {
    	INT8U i;
    	while(x--)
    	{
    		for(i=0;i<120;i++);
    	}
    }
    
    void Busy_Wait()
    {
    	INT8U LCD_Status;
    	do
    	{
    		P0=0xFF;
    		EN=0;RS=0;RW=1;
    		EN=1; LCD_Status=P0;
    		EN=0;
    	}
    	while(LCD_Status&0x80);//1000 0000
    }
    
    void Write_LCD_Command(INT8U cmd)
    {
    	Busy_Wait();
    	EN=0;RS=0;RW=0;
    	P0=cmd;
    	EN=1;_nop_();EN=0;
    
    }
    
    void Write_LCD_Data(INT8U data1)
    {
    	Busy_Wait();
    	EN=0;RS=1;RW=0;
    	P0=data1;
    	EN=1;_nop_();EN=0;
    }
    
    void LCD_String(INT8U r,INT8U c,INT8U *str)
    {
    	INT8U i=0;
    	INT8U code DDRAM[]={0x80,0xC0};
    	Write_LCD_Command(DDRAM[r]|c);
    	for(i=0;i<16&&str[i];i++)
    	{
    		Write_LCD_Data(str[i]);
    	}
    	for(;i<16;i++)
    		Write_LCD_Data(' ');
    }
    
    void LCD_Initialize()
    {
    	Write_LCD_Command(0x38); delay_ms(1);//置功能位,8位,双行,每一个字符占5*7
    	Write_LCD_Command(0x01); delay_ms(1);//清屏 
    	Write_LCD_Command(0x06); delay_ms(1);//字符进入模式,屏幕不动,字符后移
    	Write_LCD_Command(0x0C); delay_ms(1);//开显示,关光标
    }
    
    

    在这里插入图片描述
    喜欢的朋友可以关注我的个人公众号,后台回复java资料、单片机、安卓可免费领取资源。
    在这里插入图片描述

    展开全文
  • DS18B20介绍doc

    2021-01-20 22:58:49
    数字温度传感器DS18B20介绍 TS-18B20数字温度传感器,该产品采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多
  • 51单片机之DS18B20

    千次阅读 多人点赞 2020-03-10 13:11:26
    一文读懂DS18B20温度传感器及编程 对于新手而言, DS18B20基本概念仅做了解,最重要的是利用单片机对DS18B20进行编程,读取温度信息,并把读取到的温度信息利用数码管,LCD... [1] DS18B20数字温度传感器接线方便,封装 ...

    一文读懂DS18B20温度传感器及编程

    对于新手而言, DS18B20基本概念仅做了解,最重要的是利用单片机对DS18B20进行编程,读取温度信息,并把读取到的温度信息利用数码管,LCD1602或者上位机进行显示

    一、初识DS18B20

    DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。 DS18B20数字温度传感器接线方便,封装 成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。

    二、适用场景

    该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域。轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。
    汽车空调、冰箱、冷柜、以及中低温干燥箱等。
    供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制。

    三、特点

    1.1、适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数 据线供电
    1.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
    1.3、 DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
    1.4、DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内
    1.5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
    1.6、可编程 的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
    1.7、在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
    1.8、测量结果直接输出数字温度信号,以"一 线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
    1.9、负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。

    四、DS18B20引脚定义

    DS18B20在这里插入图片描述

    从图中可以看到DS18B20有三个引脚,其中GND接地,VCC接电源,DQ与单片机的一个I/O相连,所以DS18B20采用的是单总线方式,只需要一根线连接到单片机的I/O口即可

    DS18B20自带A/D转换芯片,所以我们只需要通过51单片机唤醒DS18B20,设置DS18B20的工作状态,以及从DS18B20的寄存器中读出温度值即可,要注意负温度以补码的形式存储,读取后要进行码值的转换

    五、程序

    我们需要构建4个函数

    1. 向DS18B20写入一个字节的函数
    2. 从DS18B20读取一个字节的函数
    3. DS18B20初始化函数
    4. 从DS18B20寄存器读取温度的函数,该函数需要调用2函数,也就是通讯桥梁

    1,2函数相当于单片机通过I/0口与DS18B20通讯的桥梁,无论是唤醒DS18B20,还是找到DS18B20的地址,亦或是从DS18B20的寄存器读取A/D转换后的温度值都需要这两个桥梁,桥梁就是通讯的规则,也就是DS18B20器件的时序图,时序图可在DS18B20的芯片手册里找到

    但对于新手而言,可能不懂得时序的操作,但不要丧气,因为有人已经把时序对应的函数写好了,我们只需要借用即可,也就是常说的不要重复造轮子

    编程实例

    需特别注意延时函数需要结合自己单片机的晶振去写,delay(10us)代表延时10微妙,delay(10Ms)代表延时10毫秒

    #include<reg52.h>
    #include<stdio.h>
    #define uchar unsigned char
    #define uint  unsigned int
    sbit DQ=P1^0;                         //定义DS18B20端口
    void WriteOneChar(uchar dat);        //单片机向DS18B20写一个字节数据的函数
    uchar ReadOneChar(void);            //单片机从DS18B20读一个字节数据的函数
    bit Init_DS18B20(void);            //DS18B20初始化函数
    uint ReadTemperature(void);       //从DS18B20读取温度函数
    
    
    **D18B20写入一个字节函数**
    void WriteOneChar(uchar dat)
    {
    uchar i=0;
    for (i=8; i>0; i--)
    {
      DQ = 0;
      DQ = dat&0x01;
      Delay(50us);
      DQ = 1;
      dat>>=1;
    }
    Delay(50us);
    }
    
    
    
    **DS18B20读取一个字节函数**
    uchar ReadOneChar()
    {
    uchar i=0;
    uchar dat = 0;
    for (i=8;i>0;i--)
    {
      DQ = 0; // 给脉冲信号
      dat>>=1;
      DQ = 1; // 给脉冲信号
      if(DQ)
       dat|=0x80;
      Delay(50us);
    }
    return(dat);
    }
    
    
    
    **DS18B20初始化函数**
    bit Init_DS18B20(void)
    {
    bit dat=0;
    DQ = 1;    			     //DQ复位
    Delay(10us);  	 	    //稍做延时
    DQ = 0;      		   //单片机将DQ拉低
    Delay(800us); 		  //精确延时 大于 480us 小于960us
    DQ = 1;       		 //拉高总线
    Delay(100us); 		//15~60us 后 接收60-240us的存在脉冲
    dat=DQ;            //如果x=0则初始化成功, x=1则初始化失败
    Delay(50us);      //稍作延时返回
    return dat;
    }
    
    
    
    
    **DS18B20读取温度函数**
    uint ReadTemperature()
    {
    uchar a=0;
    uint b=0;
    uint t=0;
    Init_DS18B20();
    WriteOneChar(0xCC);  // 跳过读序号列号的操作
    WriteOneChar(0x44); // 启动温度转换
    Delay(10MS);
    Init_DS18B20();
    WriteOneChar(0xCC);  //跳过读序号列号的操作
    WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
    a=ReadOneChar();   //低位
    b=ReadOneChar();  //高位
    
    
    b<<=8;
    t=a+b;
    
    
    return(t);//**返回读取到的温度值**
    }
    
    
    
    
    **定时器初始化函数**
    定时器的作用是控制读取DS18B20温度的时间间隔
    void Init_Timer0(void)
    {
     TMOD = 0x01;	  //使用模式1,16位定时器
     
     EA=1;            //总中断打开
     ET0=1;           //定时器中断打开
     TR0=1;           //定时器开关打开
    }
    
    
    
    **定时器中断函数**
    void Timer0_isr(void) interrupt 1 
    {
     static unsigned int num;
     TH0=(65536-2000)/256;		  //重新赋值 2ms
     TL0=(65536-2000)%256;
     
     num++;
     if(num==30)        //可通过挑整if条件判断语句控制时间间隔
       {
        num=0;
        ReadTempFlag=1; //读标志位置1
    	}
    
    }
    
    
    char displaytemp[10]; //该数组存放读取到的温度值
    bit  ReadTempFlag;   //定义一个读取DS18B20温度的标志
    float temperature;  //定义温度值 
    
    
    void main()
    {
    int temp;
    if(ReadTempFlag==1)
    			 {
    				ReadTempFlag=0;
    				temp=ReadTemperature();
    			    temperature=(float)temp*0.0625;//最终读取到的温度值,可以把它放到一个数组里面,以便于LCD1602或者数码管显示
    				sprintf(displaytemp,"%6.2f",temperature);//sprintf函数在<stdio.h>头文件中
    			}	
    
    展开全文
  • DS18B20专题一

    2020-03-22 23:12:29
    DS18B20专题一DS18B20外观主要参数全部指令流程图电路连接使用中问题汇总其他引用 这是关于DS18B20的第一篇专题,站在器件应用的角度对DS18B20重要的参数,知识点进行了总结归纳,旨在日后能够快速的应用此器件,只...

    这是关于DS18B20的第一篇专题,站在器件应用的角度对DS18B20重要的参数,知识点进行了总结归纳,旨在日后能够快速的应用此器件,只写干货和重要的内容。

    DS18B20外观

    在这里插入图片描述

    注:(a)TO-92封装形式,(b)TO-92封装的仰视图,(b)SO-8封装 ,(d)USOP-8封装

    主要参数

    供电范围:3.0v-5.0v
    测温范围:-55℃~+125℃
    分辨率:12位:0.0625℃ (默认的)

    全部指令

    指令分为ROM指令和功能指令

    指令码 注释
    Read ROM[33H] 当单总线上仅有1个从机设备时可以用该指令读取DS18B20设备中的64位ROM序列码
    Match ROM[55H] ` 这个是匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定的DS18B20。只有和64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作。所有和64位ROM序列不匹配的从机都将等待复位脉冲。这条命令在总线上有单个或多个器件时都可以使用
    Skip ROM[CCH `这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下,可以节省时间。如果总线上不止一个从机,在Skip ROM命令之后跟着发一条读命令,由于多个从机同时传送信号,总线上就会发生数据冲突(漏极开路下拉效果相当于相“与”)
    Search ROM[F0H]` 当一个系统初次启动时,总线控制器可能并不知道单线总线上有多个器件或它们的64位编码,搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。
    Alarm Search[0ECH] `这条命令的流程和Search ROM相同。然而,只有在最近一次测温后遇到符合报警条件的情况,DS18B20才会响应这条命令。报警条件定义为温度高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,知道再一次测得的温度值达不到报警条件。
    Write Scratchpad[4EH] 这个命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复位命令来中止写入。
    Read Scratchpad[0BEH] `这个命令读取暂存器的内容。读取将从第1个字节开始,一直进行下去,直到第9(CRC)字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。
    Copy Scratchpad[48H] `这个命令把暂存器的内容拷贝到DS18B20的E2ROM存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于把暂存器拷贝到E2存储器,DS18B20就会输出一个0,如果拷贝结束的话,DS18B20则输出1。如果使用寄生电源,总线控制器必须在这条命令发出后立即启动强上拉并保持10ms。
    Convert T[44H] 这条命令启动一次温度转换而无需其他数据。温度转换命令被执行,而后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出时间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出0,若温度转换完成,则输出1,。如果使用寄生电源,总线控制必须在发出这条命令后立即启动强上拉,并保持500ms以上时间 。
    Recall EEPROM[B8] 这条命令把报警触发器里的值拷贝回暂存器。这种拷贝操作在DS18B20上电时自动执行,这样器件一上电,暂存器里马上就存在有效的数据了。若在这条命令发出之后发出读数据隙,器件会输出温度转换忙的标识:0为忙,1为完成。
    Read Power Supply[0B4H] 若把这条命令发给DS18B20后发出读时间隙,器件会返回它的电源模式:0为寄生电源,1为外部电源。

    流程图

    DS18B20温度读取函数流程图

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    电路连接

    (1)外部供电模式下的单只DS18B20芯片的连接图
    在这里插入图片描述
    (2)外部供电模式下的多只DS18B20芯片的连接图
    在这里插入图片描述

    使用中问题汇总

    (1)第一次读取到的问题为+85℃?
    在温度寄存器中默认存储为+85℃。只要发送温度转换指令后,要留给DS18B20足够的时间进行温度的装换即可正确的读出温度值!

    其他引用

    DS18B20 英文数据手册 .

    展开全文
  • DS18B20

    千次阅读 2016-09-13 21:31:39
     DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于...
  • 温度传感器DS18B20

    2019-03-13 09:19:47
    DS18B20 数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,主要根据应用场合的不同而改变其外观。封装后的 DS18B20 可用于电缆沟测温,高炉水循环测温,锅炉测温,...
  • DS18B20温度传感器51库

    2017-11-30 14:28:54
    51单片机使用DS18B20模块获取当前温度的实现方法,整个文件最终封装为一个函数 51单片机使用DS18B20模块获取当前温度的实现方法,整个文件最终封装为一个函数 51单片机使用DS18B20模块获取当前温度的实现方法,整个...
  • DS18B20 温度传感器定义 DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。...
  • DS18B20传感器的原理

    万次阅读 多人点赞 2015-02-23 16:03:22
    而可组网数字式温度传感器DS18B20则是DS1820的更新产品,它在电压、特性及封装方面都具有优势,让用户可以更方便地构建适合自己的测温系统。DS18B2。充分利用了单总线的独特特点,可以轻松地组建传感器网络,提高...
  • ds18b20温度检测

    2018-12-20 21:47:48
    DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆...
  • DS18B20 fpga控制逻辑用verilogHDL进行控制,DS18B20 单线数字...DS18B20 具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。
  • 测温芯片DS18B20详细解读

    万次阅读 多人点赞 2015-12-06 11:15:26
    首先,我们来认识一下DS18B20这款芯片的外观和针脚定义,DS18B20芯片的常见封装为TO-92,也就是普通直插三极管的样子,当然也可以找到以SO(DS18B20Z)和μSOP(DS18B20U)形式封装的产品,下面为DS18B20各种封装的...
  • DS18B20测温范围-55——125度,在-10——85度之间精度为0.5度,其测温精度还是较高的,DS18B20常见封装为3个引脚,VCC(电源正),DQ(信号线),GND(点怨负),如图: DS18B20相关指令,如下表: 指令 功能 33H...
  • DS18B20 for STM32

    2019-11-01 14:58:46
    DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃。主机控制DS18B20完成温度转换必须经过三...
  • 基于51单片机+DS18B20温度测温器+LCD1602显示

    千次阅读 多人点赞 2021-02-22 16:03:23
    DS18B20温度传感器DS18B20相关介绍DS18B20特性封装形式与引脚说明供电方式(外部电源供电、寄生电源供电、寄生电源强上拉)内部结构温度存储格式及配置寄存器(模式和分辨率)DS18B20指令(ROM指令操作)指令的使用...
  • ds18b20示例.zip

    2021-03-23 19:52:43
    ds18b20示例,液晶显示,模块调用,仿真实例,现成调用封装使用,可运行的仿真电路图和调好的程序,开箱即用。适用于教学案例、毕业设计、电子设计比赛、出书项目实例,实际设计、个人DIY参考。 已调试好,proteus...
  • DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行...
  • 温度传感器DS18B20简介特点实物图原理图内部结构(1) 64位(激)光刻只读存储器(2) DS18B20温度转换规则(3) DS18B20温度传感器的存储器(4) 配置寄存器ROM指令RAM指令编程原理DS18B20初始化DS18B20读时序DS18B20写时序...
  • 51单片机驱动——DS18B20 1.描述 DS18B20是常用的环境温度测量的传感器,但其对通信时序要求较高,而51单片机资源有限,大部分人在使用时也不会严格对照数据手册的时序图操作,所以经常会有人遇到,网上下载的代码...
  • Ds18b20的使用

    万次阅读 多人点赞 2018-05-31 21:22:48
    一、概述:Ds18b20是最常见的数字温度传感器,有着诸多优点,比如:体积小;精度高(12位时精度可以达到0.625摄氏度,出厂默认12位);接线简单,无需外围短路;封装形式多样,能满足不同应用需求等等。但是,“鱼与...
  • DS18B20源代码

    2013-12-08 00:19:54
    DS18B20源代码,完全封装好,直接调用,很好哦,不能用PM我。
  • 一、DS18B20温度传感器DS18B20相关介绍DS18B20特性封装形式与引脚说明供电方式(外部电源供电、寄生电源供电、寄生电源强上拉)内部结构温度存储格式及配置寄存器(模式和分辨率) DS18B20相关介绍 DS18B20特性 ...
  • 关于ds18b20程序

    2009-05-05 18:01:55
    DS18B20温度传感器 * * C51 * * yajou 2008-06-28 无CRC * ********************************************************/ #include "reg51.h" #include "intrins.h" #include "DS18B20.h" /**********************...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 148
精华内容 59
关键字:

ds18b20封装