• 大小: 0.3M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: 其他  

资源简介

ds18b20.zip

资源截图

代码片段和文件信息


   #include 
   //通过DS18B20测试当前环境温度 并通过数码管显示当前温度值
   sbit wela = P2^1;  //数码管位选
   sbit dula = P2^0;  //数码管段选
   sbit ds = P2^2;
   //0-F数码管的编码(共阴极)
    unsigned char code table[]={0x3f0x060x5b0x4f0x66
       0x6d0x7d0x070x7f0x6f0x630x390x770x7c0x390x5e0x790x71};
   //0-9数码管的编码(共阴极) 带小数点
   unsigned char code tableWidthDot[]={0xbf 0x86 0xdb 0xcf 0xe6 0xed 0xfd 
      0x87 0xff 0xef};
  
  //延时函数 例i=10则大概延时10ms.
  void delay(unsigned char i)
   {
      unsigned char j k;
      for(j = i; j > 0; j--)
       {
          for(k = 125; k > 0; k--);
      }
  }
  
  //初始化DS18B20
  //让DS18B20一段相对长时间低电平 然后一段相对非常短时间高电平 即可启动
  void dsInit()
   {
      //一定要使用unsigned int型 一个i++指令的时间 作为与DS18B20通信的小时间间隔
      //以下都是一样使用unsigned int型
      unsigned int i;  
      ds = 0;
      i = 103;
      while(i>0) i--;
      ds = 1;
      i = 4;
      while(i>0) i--;
  }
  

  //向DS18B20读取一位数据
  //读一位 让DS18B20一小周期低电平 然后两小周期高电平 
  //之后DS18B20则会输出持续一段时间的一位数据
  bit readBit()
   {
      unsigned int i;
      bit b;
      ds = 0;
      i++;
      ds = 1; 
      i++; i++;
      b = ds;
      i = 8; 
      while(i>0) i--;
      return b;
  }
  
  //读取一字节数据 通过调用readBit()来实现
  unsigned char readByte()
   {
      unsigned int i;
      unsigned char j dat;
      dat = 0;
      for(i=0; i<8; i++)
       {
          j = readBit();
          //最先读出的是最低位数据
          dat = (j << 7) | (dat >> 1);
      }
      return dat;
  }
  
  //向DS18B20写入一字节数据
  void writeByte(unsigned char dat)
   {
      unsigned int i;
      unsigned char j;
      bit b;
      for(j = 0; j < 8; j++)
       {
          b = dat & 0x01;
          dat >>= 1;
          //写“1“ 让低电平持续2个小延时 高电平持续8个小延时
          if(b)   
           {
              ds = 0;
              i++; i++;
              ds = 1;
              i = 8; while(i>0) i--;
          }
          else  //写“0“ 让低电平持续8个小延时 高电平持续2个小延时
           {
              ds = 0;
              i = 8; while(i>0) i--;
              ds = 1;
              i++; i++;
          }
      }
  }
  
  //向DS18B20发送温度转换命令
  void sendChangeCmd()
  {
     dsInit();    //初始化DS18B20
     delay(1);    //延时1ms
     writeByte(0xcc); //写入跳过序列号命令字
     writeByte(0x44); //写入温度转换命令字
 }
 
 //向DS18B20发送读取数据命令
 void sendReadCmd()
  {
     dsInit();
     delay(1);
     writeByte(0xcc); //写入跳过序列号命令字
     writeByte(0xbe); //写入读取数据令字
 }
 
 //获取当前温度值
 unsigned int getTmpValue()
  {
     unsigned int value; //存放温度数值
     float t;
     unsigned char low high;
     sendReadCmd();
     //连续读取两个字节数据
     low = readByte(); 
     high = readByte();
     //将高低两个字节合成一个整形变量
     value = high;
     value <<= 8;
     value |= low;
     //DS18B20的精确度为0.0625度 即读回数据的最低位代表0.0625度
     t = value * 0.0625;
     //将它放大10倍 使显示时可显示小数点后一位 并对小数点后第二2进行4舍5入
     //如t=11.0625 进行计数后 得到value = 111 即11.1 度
     value = t * 10 + 0.5;
     retu

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-11-15 15:38  ds18b20\
     文件      123853  2015-04-07 17:19  ds18b20\DS18B20 (0-99).DSN
     文件        1054  2015-04-08 09:29  ds18b20\DS18B20 (0-99).PWI
     文件      123854  2015-04-07 17:17  ds18b20\Last Loaded DS18B20 (0-99).DBK
     文件        6376  2009-05-07 14:37  ds18b20\STARTUP.A51
     文件       14048  2015-04-08 16:41  ds18b20\STARTUP.LST
     文件         749  2015-04-08 16:41  ds18b20\STARTUP.OBJ
     目录           0  2016-11-16 08:41  ds18b20\仿真\
     文件      124959  2016-09-29 16:13  ds18b20\仿真\DS18B20 (-55~125).DSN
     文件        1340  2016-10-28 10:16  ds18b20\仿真\DS18B20 (-55~125).PWI
     文件      124950  2016-09-29 16:05  ds18b20\仿真\Last Loaded DS18B20 (-55~125).DBK
     文件        6376  2009-05-07 14:37  ds18b20\仿真\STARTUP.A51
     文件       14048  2016-09-29 16:27  ds18b20\仿真\STARTUP.LST
     文件         749  2016-09-29 16:27  ds18b20\仿真\STARTUP.OBJ
     目录           0  2016-11-16 08:41  ds18b20\仿真\温度显示lcd1602\
     文件      123878  2016-09-28 14:46  ds18b20\仿真\温度显示lcd1602\Last Loaded 温度显示LCD1602.DBK
     文件       13096  2016-09-29 11:45  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602
     文件        4809  2016-09-29 11:45  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602.c
     文件      123995  2016-09-28 15:13  ds18b20\仿真\温度显示lcd1602\温度显示LCD1602.DSN
     文件        4336  2016-09-29 11:45  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602.hex
     文件          47  2016-09-29 11:45  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602.lnp
     文件       10435  2016-09-29 11:45  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602.LST
     文件       17385  2016-09-29 11:45  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602.M51
     文件       14923  2016-09-29 11:45  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602.OBJ
     文件         178  2016-11-15 15:25  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602.plg
     文件        1340  2016-11-15 15:27  ds18b20\仿真\温度显示lcd1602\温度显示LCD1602.PWI
     文件       55255  2016-11-16 08:41  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602.uvopt
     文件       13268  2016-09-28 16:34  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602.uvproj
     文件       55257  2016-09-29 15:43  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602_uvopt.bak
     文件           0  2016-09-28 15:03  ds18b20\仿真\温度显示lcd1602\温度显示lcd1602_uvproj.bak
     文件       13309  2016-09-29 16:27  ds18b20\仿真\温控-55~125
............此处省略43个文件信息

评论

共有 条评论