ds18b20用lcd1602显示温度,为什么温度小于0时显示不准确?并且负号也不显示
展开全部
零下的值要做取反加1的处理。程序啥的都没有,负号要进行判断,如果是零度以下,那么取字符库里的负号。
void GetTemp()
{
uchar n=0,temp;
reset(); //×ÜÏ߸´Î»
writebyte(0xCC); // ·¢Skip ROMÃüÁî
writebyte(0xBE); // ·¢¶ÁÃüÁî
TL=readbyte();
TH=readbyte();
reset();
writebyte(0xCC); // Skip ROM
writebyte(0x44); // ·¢×ª»»ÃüÁî
if((TH&0xf8)!=0x00)
{
TH=~(TH);
TL=~(TL)+1;
n=1;
}//¸ºÎ¶ÈÇó²¹Âë
if(TL>255)
TH++;
temp=((TL&0xf0)>>4)|((TH&0x07)<<4);
if((temp<=TL2)||(temp>=TH2))
Speak=1;
else
Speak=0;
if(n!=1)
fuhao=temp/100;
else
fuhao=10;
shi=temp/10%10;
ge=temp%10;
}
void GetTemp()
{
uchar n=0,temp;
reset(); //×ÜÏ߸´Î»
writebyte(0xCC); // ·¢Skip ROMÃüÁî
writebyte(0xBE); // ·¢¶ÁÃüÁî
TL=readbyte();
TH=readbyte();
reset();
writebyte(0xCC); // Skip ROM
writebyte(0x44); // ·¢×ª»»ÃüÁî
if((TH&0xf8)!=0x00)
{
TH=~(TH);
TL=~(TL)+1;
n=1;
}//¸ºÎ¶ÈÇó²¹Âë
if(TL>255)
TH++;
temp=((TL&0xf0)>>4)|((TH&0x07)<<4);
if((temp<=TL2)||(temp>=TH2))
Speak=1;
else
Speak=0;
if(n!=1)
fuhao=temp/100;
else
fuhao=10;
shi=temp/10%10;
ge=temp%10;
}
深圳市鸿佳联合科技有限公司_
2021-01-25 广告
2021-01-25 广告
提供户外强光下可视、高清高亮、超宽视角、工业级宽温中小尺寸TFT液晶屏,可差异化定制,接口可兼容SPI/MCU/RGB/MIPI。以上内容如果还觉得不够全面,也可以沟通下深圳市鸿佳联合科技有限公司。深圳市鸿佳联合科技有限公司专注于中小尺寸T...
点击进入详情页
本回答由深圳市鸿佳联合科技有限公司_提供
展开全部
那是你1820的数据的读数处理问题,1820对零下时是以补码的形式出现的。就是201--255之间是零下55----0度。负号要你1602显示的时候处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你一段程序
if((temp_h&0xf0)==0xf0)
{
temp_l=~temp_l;
if(temp_l==0xff)
{
temp_l=temp_l+0x01;
temp_h=~temp_h;
temp_h=temp_h+0x01;
}
else
{
temp_l=temp_l+0x01;
temp_h=~temp_h;
}
LCD_0=dot_tab[temp_l&0x0f];
temp=((temp_l&0xf0)>>4)|((temp_h&0x0f)<<4);
LCD_3='-';
LCD_2=Data[(temp%100)/10];
LCD_1=Data[(temp%100)%10];
}
else
{
LCD_0=dot_tab[temp_l&0x0f];
temp=((temp_l&0xf0)>>4)|((temp_h&0x0f)<<4);
LCD_3=' ';
LCD_2=Data[(temp%100)/10];
LCD_1=Data[(temp%100)%10];
}
if((temp_h&0xf0)==0xf0)
{
temp_l=~temp_l;
if(temp_l==0xff)
{
temp_l=temp_l+0x01;
temp_h=~temp_h;
temp_h=temp_h+0x01;
}
else
{
temp_l=temp_l+0x01;
temp_h=~temp_h;
}
LCD_0=dot_tab[temp_l&0x0f];
temp=((temp_l&0xf0)>>4)|((temp_h&0x0f)<<4);
LCD_3='-';
LCD_2=Data[(temp%100)/10];
LCD_1=Data[(temp%100)%10];
}
else
{
LCD_0=dot_tab[temp_l&0x0f];
temp=((temp_l&0xf0)>>4)|((temp_h&0x0f)<<4);
LCD_3=' ';
LCD_2=Data[(temp%100)/10];
LCD_1=Data[(temp%100)%10];
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不准确 有多离谱??
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询