标题:
简易18B20温度传感器并联3路温度指示程序
[打印本页]
作者:
bibi
时间:
2015-4-19 02:41
标题:
简易18B20温度传感器并联3路温度指示程序
#include "1602.h"
#define u8 unsigned char
#define u16 unsigned int
sbit dq=P3^7;
float t;
bit start;
u8 id[8];
u8 id1[8]={0x28,0xFE,0x27,0xFA,0x03,0x00,0x00,0x58};
u8 id2[8]={0x28,0x82,0x0F,0xC7,0x05,0x00,0x00,0x7F};
u8 id3[8]={0x28,0xA1,0xC1,0xC6,0x05,0x00,0x00,0x9F};
void send_0()
{
dq=0;
delay(30);
dq=1;
}
void send_1()
{
dq=0;
delay(0);
dq=1;
delay(30);
}
void ds18B20_send_cmd(u8 cmd)
{
u8 i,d;
d=cmd;
for(i=0;i<8;i++)
{
if(d&0x01)
{
send_1();
}
else
{
send_0();
}
d>>=1;
}
}
u8 ds18B20_receive()
{
u8 i,d;
for(i=0;i<8;i++)
{
d>>=1;
dq=0;
delay(0);
dq=1;
delay(0);
if(dq==1)
{
d|=0x80;
}
delay(35);
}
return d;
}
u8 ds18b20_start()
{
u16 tt;
dq=0;
delay(330);
dq=1;
delay(30);
tt=0;
while(dq==1)
{
tt++;
if(tt>10000)
{
return 1;
}
}
tt=0;
delay(120);
while(dq==0)
{
tt++;
if(tt>10000)
{
return 2;
}
}
return 0;
}
float read_n_18b20_temp(u8 *id)
{
u8 th,tl;
u16 temp;
u8 i;
start=ds18b20_start();
ds18B20_send_cmd(0x55);
for(i=0;i<8;i++)
{
ds18B20_send_cmd(id[i]);
}
ds18B20_send_cmd(0x44);
delay(2000);
start=ds18b20_start();
ds18B20_send_cmd(0x55);
for(i=0;i<8;i++)
{
ds18B20_send_cmd(id[i]);
}
ds18B20_send_cmd(0xbe);
tl=ds18B20_receive();
th=ds18B20_receive();
temp=th;
temp<<=8;
temp|=tl;
if(temp&0x8000)
{
temp=~temp+1;
}
t=temp*0.0625;
return t;
}
void main()
{
float t1,t2,t3;
LCD_init();
delay(1000);
show_char(0x00,'A');
show_char(0x08,'B');
show_char(0x40,'C');
while(1)
{
t1=read_n_18b20_temp(id1);
t2=read_n_18b20_temp(id2);
t3=read_n_18b20_temp(id3);
delay(2000);
show_float(0x02,t1);
show_float(0x42,t2);
show_float(0x0A,t3);
}
}
//------------------------------------------
复制代码
作者:
pipilu
时间:
2015-4-19 10:42
这个可以学习,感谢楼主分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1