|
void delay(uint i)
{ while(i--);
}
void Init_DS18B20(void) //DS18B20初始化函數(shù)
{ uchar x=0;
DQ=1; //DQ復(fù)位
delay(8); //稍作延時(shí)
DQ=0; //將DQ拉低
delay(80);
DQ=1; //拉高總線
delay(14);
x=DQ; //如果x=0則初始化成功,x=1初始化失敗
delay(20);
}
uchar ReadOneCharl(void)
{ uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{ DQ=0; //給脈沖信號(hào)
dat >>=1;
DQ=1; //給脈沖信號(hào)
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
void WriteOneChar(uchar dat)
{ uchar i=0;
for(i=8;i>0;i--)
{ DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
}
void ReadTemp(void)
{ uchar a=0;
uchar b=0;
uchar t=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號(hào)列號(hào)的操作
WriteOneChar(0x44); //啟動(dòng)溫度轉(zhuǎn)換
delay(100);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號(hào)列號(hào)的操作
WriteOneChar(0xBE); //讀取溫度寄存器
delay(100);
a=ReadOneChar(); //讀取溫度值低位
b=ReadOneChar(); //讀取溫度值高位
temp_value=b<<4;
temp_value+=(a&0xf0)>>4;
}
void tmp_to_str() //溫度數(shù)據(jù)轉(zhuǎn)換為液晶字符顯示
{ TempBuffer[0]=temp_value/10+'0'; //十位
TempBuffer[1]=temp_value%10+'0'; //個(gè)位
TempBuffer[2]=0xdf; //溫度符號(hào)
TempBuffer[3]='C';
TempBuffer[4]='\0';
}
|
評(píng)分
-
查看全部評(píng)分
|