這三句話相當於:t=b<<8+a; 由於a,b,t都是unsigned int 型,也就是16位的 ,這樣是可以的。其目的就是將兩個溫度值寄存器合成壹個,方便處理。
上面的程序采用的是12位精度的,此時最小分辨率為0.0625°。下面是是溫度操作過程 ,我在旁邊幫妳註釋了。
a = ReadOneChar(); //讀取LSB,溫度值低位字節
b = ReadOneChar(); //讀取MSB,溫度值高位字節
t = b;
t <<= 8;
t = t | a; //最終結果是t = b*(2^8) + a;
tt = t * 0.0625; //總的溫度值,分辨率是0.0625
t = tt * 10 + 0.5; //放大10倍輸出並四舍五入
a = t / 100; //十位
b = t / 10 - a * 10; //個位
c = t - a * 100 - b * 10; //小數位
小數會有壹定的誤差,最好用查找表的方式,可取多位小數更準確。