ds18b20用lcd1602显示温度,为什么温度小于0时显示不准确?并且负号也不显示

wshg689
2011-06-16 · TA获得超过172个赞
知道答主
回答量:79
采纳率:0%
帮助的人:59.7万
展开全部
零下的值要做取反加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;
}
深圳市鸿佳联合科技有限公司_
2021-01-25 广告
提供户外强光下可视、高清高亮、超宽视角、工业级宽温中小尺寸TFT液晶屏,可差异化定制,接口可兼容SPI/MCU/RGB/MIPI。以上内容如果还觉得不够全面,也可以沟通下深圳市鸿佳联合科技有限公司。深圳市鸿佳联合科技有限公司专注于中小尺寸T... 点击进入详情页
本回答由深圳市鸿佳联合科技有限公司_提供
爬行的山羊
2011-06-16 · TA获得超过3026个赞
知道大有可为答主
回答量:6445
采纳率:70%
帮助的人:1185万
展开全部
那是你1820的数据的读数处理问题,1820对零下时是以补码的形式出现的。就是201--255之间是零下55----0度。负号要你1602显示的时候处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zijingwz
2011-06-18
知道答主
回答量:3
采纳率:0%
帮助的人:0
展开全部
给你一段程序
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];
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
过客茂
2011-06-26 · TA获得超过102个赞
知道答主
回答量:141
采纳率:0%
帮助的人:75.2万
展开全部
不准确 有多离谱??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式