ds18b20如何修改精度,求修改精度的程序

如题所述

第1个回答  2015-06-29
精确到+000.00
显示五位
void LcdDisplay(int temp) //lcd显示
{

unsigned char datas[] = {0, 0, 0, 0, 0}; //定义数组
float tp;
if(temp< 0) //当温度值为负数
{
LcdWriteCom(0x80); //写地址 80表示初始地址
LcdWriteData('-'); //显示负
//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算由?.5,还是在小数点后面。

}
else
{
LcdWriteCom(0x80); //写地址 80表示初始地址
LcdWriteData('+'); //显示正
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上0.5,还是在小数点后面。
}
datas[0] = temp / 10000;
datas[1] = temp % 10000 / 1000;
datas[2] = temp % 1000 / 100;
datas[3] = temp % 100 / 10;
//datas[4] = temp % 10;

LcdWriteCom(0x82); //写地址 80表示初始地址
LcdWriteData('0'+datas[0]); //百位

LcdWriteCom(0x83); //写地址 80表示初始地址
LcdWriteData('0'+datas[1]); //十位

LcdWriteCom(0x84); //写地址 80表示初始地址
LcdWriteData('0'+datas[2]); //个位

LcdWriteCom(0x85); //写地址 80表示初始地址
LcdWriteData('.'); //显示 ‘.’

LcdWriteCom(0x86); //写地址 80表示初始地址
LcdWriteData('0'+datas[3]); //显示小数点

//LcdWriteCom(0x87); //写地址 80表示初始地址
// LcdWriteData('0'+datas[4]); //显示小数点
}本回答被网友采纳

怎么修改ds18b20的转换精度?最好有具体的C语言程序。
实际应用中精度不用设置,让其为最大12位,只需在程序中按需要的精度要求舍弃后面的位数即可。采用右移的办法舍弃,有个数码管显示的程序你可参考一下:uint16 temp;uint8 n=0; \/\/N=0符号为正 \/* if(tem>6348) \/\/温度值正负判断 { tem=65536-tem; \/\/负温度求补码 n=1; \/\/标志位置n=1...

DS18B20的精度问题
18b20的测量精度是正负0.5摄氏度,最高分辨率是0.0625摄氏度(可设置采样精度来改变分辨率)。可以将分辨率提高或减小,但是精度是改不了的,由芯片决定了,可查阅datasheet。比方说,你测得数据是:25.4325摄氏度,实际温度有可能是25.9度,也有可能是24度,这还不包括热传导带来的精度影响。改变分辨率...

从DS18B20读出的数据怎么转换?
a=read_byte(); \/\/读取温度低八位的数据 b=read_byte(); \/\/读取温度高八位的数据 t =(b*256+a)*25;return(t>>2)25\/4=6.25,DS18B20的分辨率是0.0625度,这里是保留了两位小数位,所以0.0625*100=6.25。详细解释一下:t>>2是右移的意思,就是把你的二进制数右移2位。通...

怎样提高DS18B20的精度
18b20的精确度只有0.5°C,最小分度是0.0625°C。也就是说虽然18b20测温时可以精确到小数点后1位,但它测出来的温度和实际温度相差只要在0.5°C以内就可以看做是正确的。ds18b20不可以做体温计。

由18B20和单片机构成的数字温度计,精度如何提高?测量范围怎么扩大...
1、ds18b20本身的精度,可以从硬件下手。因为传感器有贵的有便宜的,有不同的量程的,不同精度的,当然价格也不同 2、可以从软件下手, 传感器之所以会有误差,精度不高。 主要原因是硬件的温度漂移,零点漂移等造成的。 我们可以通过长期的观察,制作出规则表来尽量的补偿误差。 高端一点的可以引进...

有关温度报警器的程序,有关DS18B20的程序已写好,求助有关蜂鸣器报警和温...
如果需要更高的控制精度,则我们的模糊控制将不适应,需修改程序。 11 3.3 方案的改进 在不改变加热器容量的情况下,为减小调节时间,可以实行在加热快达到设定温度时开启风扇来减小热惯性对温度的影响的措施。在控制精度上可采用先进的数字 PID控制算法,对加热时间进行控制,提高控制精度。 可以改进控制系统使能同 PC ...

什么是精度?如何确定精度,如何提高精度。
两个变送器的精度都是0.5级的。精度就是误差的百分数。DS18B20的技术参数:电压范围为3.0 V至5.5 V 无需备用电源 测量温度范围为-55 ° C至+125 ℃ 。华氏相当于是-67 ° F到257华氏度 -10 ° C至+85 ° C范围内精度为±0.5 ° C AM1001的技术参数:(1)供电电压(Vin): DC 4.5...

51单片机DS18B20温度传感器原理及实验
当发送转换命令后,温度以补码形式存入高速暂存器,高位在前。通过单线接口读取时,根据符号位判断温度正负,然后转换成实际值。例如,测得85度,乘以精度后即得温度读数。数据读取和写入时序有严格的时间要求,如初始化、写入和读取时的低电平持续时间以及恢复时间。单总线通信需要严格遵循这些时序以确保数据...

ds18b20 精度
根据达拉斯芯片手册介绍,可以配置为9位,的温度显示,四种配置的分辨率分别为0.5℃,,出厂默认配置为12位,即最高精度。最低精度即是9位,小数位只有一位,所以才是0.5°C的精度,那么10位,11位,12位依此类推就是0.25℃,0.125℃和0.0625℃。 希望专业的回答得到你的肯定!谢谢~~~...

ds18b20怎么样工作的原理是什么
然后,通过1-Wire协议将结果传输给微控制器或其他系统。DS18B20支持多个传感器在一根线上工作,通过64位的唯一识别码来区分.附加特性:工作温度范围:-55~+125摄氏度高精度:±0.5摄氏度支持多种温度量程(9-12位)低功耗,待机电流为1uA左右数据传输速率高达1MbpsDS18B20通过1-Wire协议与微控制器进行通信。...

相似回答