您的位置:首页 > 其它

ds18b20温度传感器

2017-02-11 17:02 351 查看
#include<reg52.h>

#include<intrins.h>

#include<stdio.h>

#include"./delay/delay.h"

#include"./LCD/LCD.h"

#define SUCC 1

#define ERR 0

sbit ds = P2^0;

sbit led = P2^1;

bit ack = 0;

void ds18b20_init()

{

    ds = 0;
delay_us(200);
delay_us(200);
ds = 1;
delay_us(30);
if(ds == 0)
{
   ack = SUCC;
//led = 0;
}
else
{
   ack = ERR;
//led = 0;

delay_us(200);

}

void ds18b20_send_byte(unsigned char byte)

{

    unsigned char i;
for(i = 0 ;i< 8;i++)
{
   ds = 1;
ds = 0;
_nop_();
_nop_();
ds = byte & 0x01;
byte >>= 1;
delay_us(30);
}
ds = 1;
delay_us(30);

}

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=0;
for(i = 0;i < 8;i++)
{
   j = ds_read_bit();
k = (j <<= 7) | (k >>= 1);

}
return k;

}

void main()

{
//ds18b20_init();
//ds18b20_send_byte(0xaa);
unsigned int temp,b;
unsigned char a,disbuf[20];

    float temp_f;
LCD_Init();

    while(1)
{
  ds18b20_init();
ds18b20_send_byte(0xcc);
ds18b20_send_byte(0x44);
delay_ms(20);
ds18b20_init();
ds18b20_send_byte(0xcc);
ds18b20_send_byte(0xbe);
a = ds_read_byte();
b = ds_read_byte();
temp = (b << 8)|a;
temp_f = (float)temp*0.0625;
LCD_Write_String(1,0,"Temp now is :");
sprintf(disbuf,"%7.3f",temp_f);
//LCD_Clear();
LCD_Write_String(4,1,disbuf);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: