/**读出温度**/
int readtemperature(void)
{
uchar a=0;
uchar b=0;
uint t=0;
ds18b20_init();
ds18b20_writechar(0xCC); //跳过读序号列号的操作
ds18b20_writechar(0x44); //启动温度转换
ds18b20_init();
ds18b20_writechar(0xCC); //跳过读序号列号的操作
ds18b20_writechar(0xBE); //读取温度寄存器
a=ds18b20_readchar(); //低位温度值
b=ds18b20_readchar(); //高位温度值
temp_TH=ds18b20_readchar(); //读取温度设定的上限值
temp_TL=ds18b20_readchar(); //读取温度设定的下限值
if((b*256+a)>63488)//(1111 1xxx xxxx xxxx)>63488,大于63488的都是负数
{
flag=1; //负温度标志位
t=~(b*256+a)+1;//取反加1
t=t*0.625; //放大10倍,方便取出小数位
}
else
{
flag=0; //正温度标志位
t=(b*256+a)*0.625;
}
return((t==0x0352)?0:t); //开机启动显示85时替换为0
}
/**温度数值处理**/
int gettemperature(void)
{
static int te=0xffff;
realtemp=readtemperature();
if(te!=realtemp)
{
temp[0]=realtemp/1000; //百位
temp[1]=realtemp/100%10; //十位
temp[2]=(realtemp/10)%10; //个位
temp[3]=realtemp%10; //小数位
te=realtemp;
}
return realtemp;
}
把读出的数值,乘以8,(相当于在后面添上3个0),就成12位精度了。
以后,就可以利用12位精度的程序来处理。