九游会体育官网

    <address id="5pd33"></address>

      文章详情
      所在位置: 首页> 技术文章> 其它>

      DS18B20数字温度计使用

      日期:2021-11-12 17:22
      浏览次数:4041
      摘要:
      DS18B20数字温度计使用


      1.DS18B20基本知识

       DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

      1、DS18B20产品的特点

       ?。?)、只要求一个端口即可实现通信。

       ?。?)、在DS18B20中的每个器件上都有有一无二的序列号。

       ?。?)、实际应用中不需要外部任何元器件即可实现测温。

       ?。?)、测量温度范围在-55。C到+125。C之间。

       ?。?)、数字温度计的分辨率用户可以从9位到12位选择。

       ?。?)、内部有温度上、下限告警设置。

      2、DS18B20的引脚介绍

        TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。

      (底视图)图1

       

      表1 DS18B20详细引脚功能描述

      序号

      名称

      引脚功能描述

      1

      GND

      地信号

      2

      DQ

      数据输入/输出引脚??┑プ芟呓涌谝?。当被用着在寄生电源下,也可以向器件提供电源。

      3

      VDD

      可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。



      3. DS18B20的使用方法

      由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

      由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

      DS18B20的复位时序

      DS18B20的读时序

      对于DS18B20的读时序分为读0时序和读1时序两个过程。

      对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。

      DS18B20的写时序

      对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。

      对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

       

      4. 实验任务

      用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。

      5. 电路原理图

       

      6. 系统板上硬件连线

      (1). 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。

      (2). 把“单片机系统”区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。

      (3). 把DS18B20芯片插入“四路单总线”区域中的任一个插座中,注意电源与地信号不要接反。

      (4). 把“四路单总线”区域中的对应的DQ端子连接到“单片机系统”区域中的P3.7/RD端子上。

      7. C语言源程序
      #include
      #include
       
      unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
      0xef,0xdf,0xbf,0x7f};
      unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
      0x66,0x6d,0x7d,0x07,
      0x7f,0x6f,0x77,0x7c,
      0x39,0x5e,0x79,0x71,0x00,0x40};
      unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
      25,28,31,34,38,41,44,48,
      50,53,56,59,63,66,69,72,
      75,78,81,84,88,91,94,97};
      unsigned char displaycount;
      unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
      unsigned char timecount;
      unsigned char readdata[8];  
      sbit DQ=P3^7;
      bit sflag;
       
      bit resetpulse(void)
      {
      unsigned char i;
       
      DQ=0;
      for(i=255;i>0;i--);
      DQ=1;
      for(i=60;i>0;i--);
      return(DQ);
      for(i=200;i>0;i--);
      }
       
      void writecommandtods18b20(unsigned char command)
      {
      unsigned char i;
      unsigned char j;
       
      for(i=0;i<8;i++)
      {
      if((command & 0x01)==0)
      {
      DQ=0;
      for(j=35;j>0;j--);
      DQ=1;
      }
      else
      {
      DQ=0;
      for(j=2;j>0;j--);
      DQ=1;
      for(j=33;j>0;j--);
      }
      command=_cror_(command,1);
      }
      }
       
      unsigned char readdatafromds18b20(void)
      {
      unsigned char i;
      unsigned char j;
      unsigned char temp;
       
      temp=0;
      for(i=0;i<8;i++)
      {
      temp=_cror_(temp,1);
      DQ=0;
      _nop_();
      _nop_();
      DQ=1;
      for(j=10;j>0;j--);
      if(DQ==1)
      {
      temp=temp | 0x80;
      }
      else
      {
      temp=temp | 0x00;
      }
      for(j=200;j>0;j--);
      }
      return(temp);
      }
       
      void main(void)
      {
      TMOD=0x01;
      TH0=(65536-4000)/256;
      TL0=(65536-4000)%256;
      ET0=1;
      EA=1;
       
      while(resetpulse());
      writecommandtods18b20(0xcc);
      writecommandtods18b20(0x44);
      TR0=1;
      while(1)
      {
      ;
      }
      }
       
      void t0(void) interrupt 1 using 0
      {
      unsigned char x;
      unsigned int result;
       
      TH0=(65536-4000)/256;
      TL0=(65536-4000)%256;
      if(displaycount==2)
      {
      P0=displaycode[displaybuf[displaycount]] | 0x80;
      }
      else
      {
      P0=displaycode[displaybuf[displaycount]];
      }
      P2=displaybit[displaycount];
      displaycount++;
      if(displaycount==8)
      {
      displaycount=0;
      }
       
      timecount++;
      if(timecount==150)
      {
      timecount=0;
      while(resetpulse());
      writecommandtods18b20(0xcc);
      writecommandtods18b20(0xbe);
      readdata[0]=readdatafromds18b20();
      readdata[1]=readdatafromds18b20();
      for(x=0;x<8;x++)
      {
      displaybuf[x]=16;
      }
      sflag=0;
      if((readdata[1] & 0xf8)!=0x00)
      {
      sflag=1;
      readdata[1]=~readdata[1];
      readdata[0]=~readdata[0];
      result=readdata[0]+1;
      readdata[0]=result;
      if(result>255)
      {
      readdata[1]++;
      }
      }
      readdata[1]=readdata[1]<<4;
      readdata[1]=readdata[1] & 0x70;
      x=readdata[0];
      x=x>>4;
      x=x & 0x0f;
      readdata[1]=readdata[1] | x;
      x=2;
      result=readdata[1];
      while(result/10)
      {
      displaybuf[x]=result%10;
      result=result/10;
      x++;
      }
      displaybuf[x]=result;
      if(sflag==1)
      {
      displaybuf[x+1]=17;
      }
      x=readdata[0] & 0x0f;
      x=x<<1;
      displaybuf[0]=(dotcode[x])%10;
      displaybuf[1]=(dotcode[x])/10;
      while(resetpulse());
      writecommandtods18b20(0xcc);
      writecommandtods18b20(0x44);
      }
      }

      尊龙凯时软件 凯时k66手机版 火狐体育APP下载 尊龙凯时人生就是博! 尊龙凯时 亚美体育 即胜体育 尊龙d88入口登录 鉴黑担保网 尊龙凯时app 火狐体育APP下载 欧亚体育 即胜体育 尊龙凯时人生就是博 银娱优越会 多宝体育 恒峰国际g22手机版 九游会体育 球王会官网 尊龙凯时软件 尊龙人生就是博手机版 亚盈体育 鸿运国际 尊龙d88入口登录 尊龙app手机版 d88尊龙网址 尊龙凯时APP下载 俄罗斯贵宾会 尊龙凯时下载 乐动体育 凯时最新网站 凯时体育 尊龙APP下载官网 尊龙凯时真人APP one体育-官网 凯时k66手机版 亚盈体育 尊龙人生就是博app 尊龙凯时最新版 乐动体育 尊龙新版app 尊龙app下载官网 尊龙凯时app官网 华体会体育 鉴黑担保网 九游会集团 意大利贵宾会 凯时k66手机版 俄罗斯贵宾会 d88尊龙登录 尊龙手机版 尊龙d88入口登录 尊龙凯时电脑版下载 海博测评 尊龙凯时真人APP one体育-官网 emc易倍体育 银娱优越会 k66旗舰厅 海博测评 尊龙凯时app 鸿运国际 尊龙app官网 m6米乐 尊龙d88登录 永信贵宾会 乐动·LDSports 尊龙凯时新版app 尊龙凯时下载 尊龙凯时APP 尊龙凯时手机版 尊龙凯时官网 凯时体育app d88尊龙登录下载 俄罗斯贵宾会 尊龙凯时登录 尊龙凯时网址登录下载 尊龙app手机版 尊龙app官方下载 d88尊龙登录 欧亚体育 尊龙凯时真人APP 全网担保网 尊龙人生就是博 凯时手机版 乐动·LDSports 米乐 亚游九游会 尊龙新版app E尊国际 火狐体育APP下载 币游国际真人游戏 j9九游会网站 k66凯时平台 全网担保网 凯时手机版 尊龙凯时电脑版下载 m6米乐 欧亚体育 球王会官网
      鉴黑担保网 尊龙d88平台 尊龙凯时app下载 j9九游会 尊龙app下载官网 k66凯时平台 尊龙凯时网址登录下载