ds18b20负温度显示问题

void wendu_decimal(uint dat) //温度转换后送显示
{
float temp;
if(temp=dat*0.625)
{
wendu_shi=temp/100; //取十位 temp除不用定义类型
wendu_ge =((uint)temp)%100/10; //取个位 temp求模要定义类型,为16位,故定义uint
wendu_shu=((uint)temp)%100%10; //取小数
wendu_fu=0;

}
else //负温度时
{
temp=(~temp+1)*0.0625*10;
wendu_shi=temp/100; //取十位 temp除不用定义类型
wendu_ge =((uint)temp)%100/10; //取个位 temp求模要定义类型,为16位,故定义uint
wendu_shu=((uint)temp)%100%10; //取小数
wendu_fu=-3;
}
lcd_write_com(0x80+0x40+10); //送显示
lcd_write_date(0x30+wendu_fu);
lcd_write_date(0x30+wendu_shi);
lcd_write_date(0x30+wendu_ge);
lcd_write_date(0x2e);
lcd_write_date(0x30+wendu_shu);
lcd_write_date(0xdf); //温度符号
lcd_write_date(0x43);
}

这样一段程序其实负温度我不会编写,请大家帮忙改一下让能正确显示负温度,好像就差了temp定义的一句话,
还有在正温度的时候,最前端显示的不是0,而是什么都不显示,到负温度的时候才显示-号
谢谢各位了!

第1个回答  2012-12-27
这有问题。
if(temp=dat*0.625)
{
应该改为
temp=dat*0.625;

if(temp>=32)//
{

华氏度与摄氏度的换算:
华氏度比摄影氏度小。一华氏度等于5/9摄氏度。从华氏度变成摄氏度的公式是:
(华氏度-32)× 摄氏度
也可以这样算:
(华氏度-32)×5÷9=摄氏度
将摄氏度换算为华氏度的公式是:摄氏度÷5/9 +32=华氏度
或者:摄氏度×9÷5+32=华氏度
32是个什么数字呢?
水的冰点是0摄氏度(0℃),是32华氏度(32℉),也就是说,用摄氏温度表测量,水到0°结冰;如果用华氏温度测量,水的结冰点是32°。追问

那么负温度
else //负温度时
{
temp=(~temp+1)*0.0625*10;
wendu_shi=temp/100; //取十位 temp除不用定义类型
wendu_ge =((uint)temp)%100/10; //取个位 temp求模要定义类型,为16位,故定义uint
wendu_shu=((uint)temp)%100%10; //取小数
wendu_fu=-3;
这部分的temp怎能定义?
我现在仿真,正温度
可以显示,负温度显示出来是乱码

本回答被提问者采纳
第2个回答  2020-05-28
可以私聊我~
第3个回答  2012-12-27
你是不会显示还是不知道怎么吧里面的数值转换成温度值。显示有很多方法。而且你是用液晶还是数码管,差别很大。追问

1.主要我是不会换算,也就是怎么判断温度为负数,就是用哪个temp,然后决定下面的各个位置的显示
正温度会判断,就是到了负温度,怎么利用temp判断
2.显示问题我用1602,但是我想正温度的时候,
wendu_fu也就是负号显示块,可以不显示而不是0,就是这位在屏幕上没显示,这倒是小事,主要是负温度不会判断

追答

应该是读出来的数值,直接*0.0625,就是一个浮点温度数值。然后跟0做一下比较,大于0就是正温度,小于零就是负温度吧。

ds18b20负温度显示问题
水的冰点是0摄氏度(0℃),是32华氏度(32℉),也就是说,用摄氏温度表测量,水到0°结冰;如果用华氏温度测量,水的结冰点是32°。

单片机,请教朋友们一个DS18b20传感器负温度的问题.,.
直接把取得的两个字节数据赋给int型的变量,然后乘以0.0625得到的就是带有符号的温度值,然后判断温度值是否小于0,如果小于0那么就用0减去这个int型数据 得到的就是正数

ds18b20用lcd1602显示温度,为什么温度小于0时显示不准确?并且负号也不...
零下的值要做取反加1的处理。程序啥的都没有,负号要进行判断,如果是零度以下,那么取字符库里的负号。void GetTemp(){ uchar n=0,temp;reset(); \/\/×ÜÏ߸´Î»writebyte(0xCC); \/\/ ·¢Skip ROMÃüÁîwritebyte(0xB...

ds18b20显示温度的时候忽然显示78或者一个负的很大的数字呢
读数据时的位数可能不对

DS18B20温度转换问题
if(t<0) \/\/负温度 { temp=(~t+1)*0.0625*10+0.5; \/\/负温度时,取反加1再乘以0.0625得实际温度,乘10+0.5显示小数点一位,且四舍五入 } else temp=t*0.0625*10+0.5; \/\/正温度 if(t<0)bai='-'; \/\/负温度时百位显示负号 else bai=(const) temp\/1000+0x30...

请教关于DS18B20温度传感器的温度读取
TMOD = 0x10; \/\/定时器1工作在方式1(显示扫描定时)TH1 = 0xfc;TL1 = 0x67;\/\/T1定时1ms初值 TR1 = 1;\/\/启动T1 } void delay(uint16 n){ while (n--);} \/\/ 18B20复位函数 void DS18b20_reset(void){ bit flag=1;while (flag){ while (flag){ DQ = 1;delay(1);DQ = 0;de...

单片机ds18b20温度转换问题
1:接收数据为双字节--先低位,后高位;先低字节,后高字节;2:高字节的前5位若为“0”,则将数据乘以0.0625;即 [t=(D*0.0625)].3:高字节的前5位若为“1”,则将数据先取反,再加一,再乘以0.0625;即 【t=[(~D)+1]*0.0625]】温度是-55~+125 对应的值是 :(-55>>FF92)...

关于ds18b20判断温度正负的问题,急求回答!!
DS18B20默认的数据存储格式为16位二进制数,其中后十一位是温度数据,前五位同时变化取其中任意一位可以判断温度正负。符号位为1,温度是负数,后十一位数据取反加一再乘以0.0625就是实际温度值。符号位为0,温度为正数,后十一位直接乘以0.0625就是实际温度值。对应到程序里面if(temp2&0xfc) 这句判断...

单片机温度传感器DS18B20如何整出有正负数的值
你可以参考一下我的程序,18B20中的负温度是以补码表示的!!!\/***DS18B20程序读取温度***\/ uchar ReadTemperature(void){ uchar a;uchar b;uint t=0;Init_DS18B20();WriteOneChar(0xCC); \/\/跳过读序号列号的操作 WriteOneChar(0xBE); \/\/读取温度寄存器等(共可读9个寄存器) 前两个就是温...

各位大侠,我是单片机新手,做个DS18B20的温测小系统,数码管老显示“00...
1.先不考虑检测值,单显示测试正常否。2.温度检测值应该是没检测到

相似回答