采集到的温度一直不变,显示也不对,改变延时和显示函数,结果也不会变,求大神指导,小弟拜谢了
////////////////////////////////////////////////////
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit duan=P2^6;
sbit wei=P2^7;
sbit DQ=P2^2;
uchar code num[10]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
uchar code table[7]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
void delay_ms(uint t)
{
uint a,b;
for(a=0;a<t;a++)
for(b=0;b<113;b++);
}
void delay_us(uint t) //11us
{
for(;t>0;t--);
}
void display(uint j,uint k)
{
P0=num[j];
duan=1;
duan=0;
P0=table[k];
wei=1;
wei=0;
}
/*DS18B20初始化*/
void init()
{
DQ=1;
delay_us(5);
DQ=0;
delay_us(45);
DQ=1;
delay_us(10);
while(DQ==1);
while(~DQ==1)
delay_us(23);
}
/*DS18B20写数据*/
write_data(uchar dat)
{
uint i;
bit b;
for(i=8;i>0;i--)
{
b=dat&0x01;
dat=dat>>1;
if(DQ==0)//写0
{
DQ=0;
delay_us(6);
DQ=1;
_nop_();
}
else //写1
{
DQ=0;
delay_us(1);
DQ=1;
delay_us(6);
}
}
}
/*DS18B20读数据*/
uchar read_data()
{
uchar i;
uchar dat=0;
for(i=8;i>0;i--)
{
DQ=0;
dat>>=1;
_nop_();
DQ=1;
if(DQ==1)
dat=0|0x80;
delay_us(6);
}
return dat;
}
int gettemp(uint tempdata16) /*读取温度*/
{
uchar data1,data2;
float tt;
init();
write_data(0xcc);
write_data(0x44);
init();
write_data(0xcc);
write_data(0xbe);
data1=read_data();
data2=read_data();
tempdata16=tempdata16|data2;
tempdata16=(tempdata16<<8)|data1;
tt=tempdata16*0.0625;
tempdata16=tt*10+0.5;
return tempdata16;
}
void main()
{
int temp;
uint a,b,c,d;
while(1)
{
temp=gettemp();
a=temp/1000;
display(a,4);
delay_ms(5);
b=temp/100%10;
display(b,3);
delay_ms(5);
c=temp/10%10;
display(c,2);
delay_ms(5);
d=temp%10;
display(d,1);
delay_ms(5);
}
}
还有一个问题就是int gettemp(uint tempdata16) /*读取温度*/的uint tempdata16放到函数的参数里面和函数里面结果也不一样,求解释啊
|