大家帮我看看这段程序怎么错了 关于ds18b20的程序
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit ds=P1^0;
uchar code table[]={
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80, 0x90};
uint temp;
float f_temp;
void delay(uint z) //延迟
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void reset() //复位
{
uchar i;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
}
bit read_bit() //读一位
{
uint i;
bit dat;
ds=0;i++;
ds=1;i++;i++;
dat=ds;
i=8;
while(i>0)i--;
return (dat);
}
uchar tmpread() //读一个字节
{
uchar j,i,dat;
dat=0;
for(i=1;i<8;i++)
{
j=read_bit();
dat=(j<<7)|(j>>1);
}
return (dat);
}
void write(uchar dat) //写
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)
{
ds=0;i++;i++;
ds=1;
i=8;
while(i>0)i--;
}
else
{
ds=0;
i=8;
while(i>0)i--;
ds=1;i++;i++;
}
}
}
void stop() //开始获取温度并转换
{
reset();
delay(1);
write(0xcc);
write(0x44);
}
uint read_data() //读温度
{
uchar a,b;
reset();
delay(1);
write(0xcc);
write(0xbe);
a=tmpread();
b=tmpread();
temp=b;
temp<<=8;
temp=temp|a;
f_temp=temp*0.0625;
temp=f_temp*10+0.5;
return (temp);
}
void display(uint temp) //显示程序
{
uchar ad1,ad2,ad3;
ad1=temp/100;
ad2=temp%100/10;
ad3=temp%10;
P0=0xff;
P0=table[ad1];
P2=0x01;
delay(1);
P0=0xff;
P0=table[ad2];
P2=0x02;
delay(1);
P0=0xff;
P0=table[ad3];
P2=0x04;
delay(1);
}
void main()
{
uchar a;
do
{
stop();
for(a=10;a>0;a--)
{
display(read_data()) ;
}
}while(1);
}
#define uint unsigned int
#define uchar unsigned char
sbit ds=P1^0;
uchar code table[]={
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80, 0x90};
uint temp;
float f_temp;
void delay(uint z) //延迟
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void reset() //复位
{
uchar i;
ds=0;
i=103;
while(i>0)i--;
ds=1;
i=4;
while(i>0)i--;
}
bit read_bit() //读一位
{
uint i;
bit dat;
ds=0;i++;
ds=1;i++;i++;
dat=ds;
i=8;
while(i>0)i--;
return (dat);
}
uchar tmpread() //读一个字节
{
uchar j,i,dat;
dat=0;
for(i=1;i<8;i++)
{
j=read_bit();
dat=(j<<7)|(j>>1);
}
return (dat);
}
void write(uchar dat) //写
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)
{
ds=0;i++;i++;
ds=1;
i=8;
while(i>0)i--;
}
else
{
ds=0;
i=8;
while(i>0)i--;
ds=1;i++;i++;
}
}
}
void stop() //开始获取温度并转换
{
reset();
delay(1);
write(0xcc);
write(0x44);
}
uint read_data() //读温度
{
uchar a,b;
reset();
delay(1);
write(0xcc);
write(0xbe);
a=tmpread();
b=tmpread();
temp=b;
temp<<=8;
temp=temp|a;
f_temp=temp*0.0625;
temp=f_temp*10+0.5;
return (temp);
}
void display(uint temp) //显示程序
{
uchar ad1,ad2,ad3;
ad1=temp/100;
ad2=temp%100/10;
ad3=temp%10;
P0=0xff;
P0=table[ad1];
P2=0x01;
delay(1);
P0=0xff;
P0=table[ad2];
P2=0x02;
delay(1);
P0=0xff;
P0=table[ad3];
P2=0x04;
delay(1);
}
void main()
{
uchar a;
do
{
stop();
for(a=10;a>0;a--)
{
display(read_data()) ;
}
}while(1);
}
