单片机——ds18b20

获取当前环境温度值,并在lcd上显示
#include
#include "intrins.h"
#include "./delay/delay.h"
#include "stdio.h"
#include "./lcd1302/lcd1302.h"
bit ack = 0;
sbit ds = P1^0;
void ds_reset()
{
   ds = 1;
   ds = 0;
   delay_us(200);
   delay_us(200);
 
   ds = 1;
   delay_us(30);
 
   if(ds == 0)
  {
     ack = 1;
  }
  else
  {
     ack = 0;
    }
  
  delay_us(200);
  delay_us(100);
}
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);
}
bit ds_read_bit()
{
   bit temp;
   ds = 1;
   ds = 0;
   _nop_();
   _nop_();
 
   ds = 1;
   temp = ds;
   delay_us(30);
   return temp;
}
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;
}
void main()
{
   unsigned char a;
   unsigned int b,temp;
   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_display(0,0,disbuf);
  }
}

你可能感兴趣的:(单片机)