天天看点

单片机(八)__ds18b20测试温度

首先我们看一下ds18b20的结构图:

单片机(八)__ds18b20测试温度

通过结构图,我们大致能了解一些DS18B20的内部结构,重点是我们要知道,他是如何测温度的,以及温度是怎么计算为我们想要的值的。

单片机(八)__ds18b20测试温度

ds18b20采用的是单总线结构,我们来了解它是如何初始化的:

单片机(八)__ds18b20测试温度

通过它初始化的时序图,我们可以写出程序:

void ds_reset()//初始化

{

      ds = 1;

      ds = 0;

      delay_us(200);

      delay_us(200);

      ds = 1;

      delay_us(20);

      if(0 == ds)

        {

              ack = 1;

    }

        else

        {

              ack = 0;

    }

        delay_us(200);

        delay_us(100);

}

然后我们再看看如何写入一个位:

单片机(八)__ds18b20测试温度

程序:

void ds_send_byte(unsigned char byte)//写入一个字节

{

      unsigned char i;

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

      {

              ds = 0;

              _nop_();

              _nop_();

              ds = byte & 0x01;

              byte >>= 1;

              delay_us(30);

              ds = 1;

    }

        delay_us(30);

}

我们看看如何读取一个位;

单片机(八)__ds18b20测试温度

程序:

bit ds_read_bit()//读一位

{

      bit tmp;

      ds = 1;

      ds = 0;

      _nop_();

      _nop_();

      ds = 1;

      tmp = ds;

      delay_us(30);

      return tmp;

}

unsigned char ds_read_byte()//读一个字节

{

      unsigned char i,j,k;

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

      {

              j = ds_read_bit();

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

    }

        return k;

}

然后下面开始启动温度传感器:

1.复位DS18B20.

2.发出跳过ROM命令(ccH)。

3.发出启动温度转换命令(44H)。

启动温度传感器后,我们要读暂存器中的值:

通过使用手册,我们了解到读暂存器的编码是BEH.

ds_reset();

ds_send_byte(0xcc);

ds_send_byte(0xbe);

综上所述:

void main()

{

      unsigned char a;

      unsigned int temp,b;

      float wendu;

      unsigned char disbuf[20];

      lcd_init();

      while(1)

        {

          ds_reset();

          ds_send_byte(0xcc);

              ds_send_byte(0x44);

              ds_reset();

              ds_send_byte(0xcc);

              ds_send_byte(0xbe);

              a = ds_read_byte();

              b = ds_read_byte();

              temp = (b << 8) | a;

              wendu = (float)temp * 0.0625;

              sprintf(disbuf,"temp is %7.3f",wendu);

              lcd_str(0,0,disbuf);

        }      

}

到这里,相信大家都能对ds18b20有所了解,若还有疑问,很高兴和大家探讨。

继续阅读