零下的值要做取反加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;
}
那是你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];
}
不准确 有多离谱??