各位大俠,請問下,我用ds18b20采集溫度到單片機,利用LCD1602來顯示,可是為什么每次運行時,第一次顯示的都是85度,然后再恢復(fù)正常,可能是什么原因?qū)е碌模恳韵率侵骱瘮?shù)部分,我覺得可能出錯這這部分,
void main(void)
{
uchar TL; //儲存暫存器的溫度低位
uchar TH; //儲存暫存器的溫度高位
uchar TN; //儲存溫度的整數(shù)部分
uchar TD; //儲存溫度的小數(shù)部分
uint j;
Relay=0;
LcdInitiate(); //將液晶初始化
delayms(5);
if(Init_DS18B20()==1)
display_error();
display_explain();
display_symbol(); //顯示溫度說明
display_dot(); //顯示溫度的小數(shù)點
display_cent(); //顯示溫度的單位
while(1) //不斷檢測并顯示溫度
{
flag=0;
ReadyReadTemp(); //讀溫度準備
TL=ReadOneChar(); //先讀的是溫度值低位
TH=ReadOneChar(); //接著讀的是溫度值高位
TN=TH*16+TL/16; //實際溫度值=(TH*256+TL)/16,即:TH*16+TL/16
//這樣得出的是溫度的整數(shù)部分,小數(shù)部分被丟棄了
TD=(TL%16)*10/16; //計算溫度的小數(shù)部分,將余數(shù)乘以10再除以16取整,
//這樣得到的是溫度小數(shù)部分的第一位數(shù)字(保留1位小數(shù))
display_temp1(TN); //顯示溫度的整數(shù)部分
display_temp2(TD); //顯示溫度的小數(shù)部分
delayms(50);
請大俠幫忙指點指點。!謝謝!
|