您的位置:首页 > 其它

DS18B20 LCD显示当前温度

2017-02-13 20:07 330 查看

include

include “./delay/delay.h”

include

include <1602.h>

include

define SUCC 1

define ERR 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 = 1;
}
delay_us(40);   //等待应答  大于60us


}

void ds18b20_write_byte(unsigned char byte)

{

unsigned char i;

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

{

ds = 1;

ds = 0;

nop(); //延迟1us

nop();

ds = byte & 0x01;
byte = byte >> 1;

delay_us(30); //2t+7

}

delay_us(30);
ds = 1;


}

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();

j = j << 7;

k = k >> 1;

k = j + k;

}
return k;


}

void main()

{

unsigned int temp;

float temp_f;

unsigned char a;

unsigned int b;

unsigned char disbuf[20];

LCD_Init();

while(1)
{

ds18b20_init();

ds18b20_write_byte(0xcc);
ds18b20_write_byte(0x44);
delay_ms(20);

ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0xbe);

a = ds_read_byte();
b = ds_read_byte();

temp = (b << 8) + a;
temp_f = (float)temp *0.0625;
sprintf(disbuf,"temp is %7.3f",temp_f);

LCD_Write_String(0,0,disbuf);
}


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