DS18B20 程序 求助 (真心菜鸟)
时间:10-02
整理:3721RD
点击:
准备让它超过30度点亮LED,结果,一上电就亮了,不要DS18B20上电也亮,可能直接没有结果DS18B20。(先不考虑低温)
#include<reg52.h>
#define u8 unsigned char
sbit DQ=P2^3;
sbit led=P0^0;
void delay(unsigned x)
{
int i;
x/=2;
for(i=0;i<x;i++);
}
void reset()
{
bit flag;
DQ=1;
DQ=0;
delay(490);
DQ=1;
delay(60);
if(DQ==0)
flag=1;
else
flag=0;
delay(240);
}
void wdata(u8 ida)
{
u8 i;
for(i=0;i<8;i++)
{
ida|=0x80;
DQ=0;
delay(15);
DQ=ida;
delay(60);
DQ=1;
ida>>=1;
}
}
u8 rdata()
{
u8 ida;
int i;
for(i=0;i<8;i++)
{
ida>>=1;
DQ=0;
delay(4);
DQ=1;
delay(8);
if(DQ==1)
{ ida|=0x80;}
delay(60);
DQ=1;
}
}
main()
{
unsigned int t[2];
unsigned int wendu;
while(1)
{
int i;
reset();
wdata(0xcc);
wdata(0x44);
delay(10000);
reset();
wdata(0xcc);
wdata(0xbe);
for(i=0;i<2;i++)
{
t[i]=rdata();
}
t[1]=t[1]<<8;
wendu=(t[0]|t[1])*0.026;
if(wendu>=30)
led=0;
else
led=1;
}
}
#include<reg52.h>
#define u8 unsigned char
sbit DQ=P2^3;
sbit led=P0^0;
void delay(unsigned x)
{
int i;
x/=2;
for(i=0;i<x;i++);
}
void reset()
{
bit flag;
DQ=1;
DQ=0;
delay(490);
DQ=1;
delay(60);
if(DQ==0)
flag=1;
else
flag=0;
delay(240);
}
void wdata(u8 ida)
{
u8 i;
for(i=0;i<8;i++)
{
ida|=0x80;
DQ=0;
delay(15);
DQ=ida;
delay(60);
DQ=1;
ida>>=1;
}
}
u8 rdata()
{
u8 ida;
int i;
for(i=0;i<8;i++)
{
ida>>=1;
DQ=0;
delay(4);
DQ=1;
delay(8);
if(DQ==1)
{ ida|=0x80;}
delay(60);
DQ=1;
}
}
main()
{
unsigned int t[2];
unsigned int wendu;
while(1)
{
int i;
reset();
wdata(0xcc);
wdata(0x44);
delay(10000);
reset();
wdata(0xcc);
wdata(0xbe);
for(i=0;i<2;i++)
{
t[i]=rdata();
}
t[1]=t[1]<<8;
wendu=(t[0]|t[1])*0.026;
if(wendu>=30)
led=0;
else
led=1;
}
}
大神们!别不理我啊!