uint Read_temperature()
{
uint temt;
unsigned long int temperature = 0;
uchar dat_l = 0,dat_h = 0;
Init_da18b20();
//************开始转换**************
Writer_ds18b20(0xcc);//忽视r o m指令 后面跟44h可完成温度转换
Writer_ds18b20(0x44);
delay_ms(800);
//**********读暂存数据************
Init_da18b20();
Writer_ds18b20(0xcc);
Writer_ds18b20(0xbe);//一个从机只能跟一条读寄存器指令
dat_l = Read_ds18b20();
dat_h = Read_ds18b20();
Init_da18b20();//***********读取暂存结束*************
//temperature = (dat_h * 256 )+ dat_l;
temperature = dat_h;
temperature <<= 8;
temperature += dat_l;
temt =temperature * 0.0625;
return temt; //temperature;
}
我的ds18b20的温度采集函数是这样的 这是最终版 一开始时候显示00.00 后来发现是声明的问题 一开始我只有 uint temt的反回值 没有temperature这个中间变量 返回值都为00.00 是uint 即unsigned int的范围不够 溢出 。还发现temperature = (dat_h * 256 )+ dat_l;这样显示的温度是实际温度的2倍 不能使用()也很奇怪 想不通
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>