資源簡介
DS18B20底層驅(qū)動,用C8051F020做控制器,也可用普通51單片機(jī),只需修改微小部分就行

代碼片段和文件信息
#include“18B20.H“
/*************************************************************************************/
void?delay(unsigned?int?i)//延時函數(shù)
{
while(i--);
}
/***************************************************************************************/
//18b20初始化函數(shù)
void?Init_DS18B20(void)
{
unsigned?char?x=0;
DQ?=?1;????//DQ復(fù)位
delay(8);??//稍做延時
DQ?=?0;????//單片機(jī)將DQ拉低
delay(80);?//精確延時?大于?480us
DQ?=?1;????//拉高總線
delay(10);
x=DQ;??????//稍做延時后?如果x=0則初始化成功?x=1則初始化失敗
delay(5);
}
//讀一個字節(jié)
unsigned?char?ReadOneChar(void)
{
unsigned?char?i=0;
unsigned?char?dat?=?0;
for?(i=8;i>0;i--)
?{
??DQ?=?0;?//?給脈沖信號
??dat>>=1;
??DQ?=?1;?//?給脈沖信號
??//在if(DQ)之前將DQ設(shè)置為輸入口以便單片機(jī)讀取DQ的值
??if(DQ)
??dat|=0x80;
??delay(5);
?}
?return(dat);
}
//寫一個字節(jié)
void?WriteOneChar(unsigned?char?dat)
{
?unsigned?char?i=0;
?for?(i=8;?i>0;?i--)
?{
??DQ?=?0;
??DQ?=?dat&0x01;
??delay(5);
??DQ?=?1;
??dat>>=1;
?}
delay(5);
}
//讀取溫度
unsigned?char?ReadTemperature(void) ??
{
unsigned?char?a=0;
unsigned?char?b=0; ?
unsigned?char?t=0;
// unsigned?char?tt;
//float?tt=0; ???????????
Init_DS18B20();
WriteOneChar(0xCC);?//?跳過讀序號列號的操作
WriteOneChar(0x44);?//?啟動溫度轉(zhuǎn)換
delay(200); ???
Init_DS18B20();
WriteOneChar(0xCC);?//跳過讀序號列號的操作?
WriteOneChar(0xBE);?//讀取溫度寄存器等(共可讀9個寄存器)?前兩個就是溫度
a=ReadOneChar();
b=ReadOneChar();
b<<=4;
b+=(a&0xf0)>>4;
t=b;
// tt=t*0.0625;
// t=?t1*10;?//放大10倍輸出并四舍五入
return(t);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????I.A....???????629??2009-08-22?21:00??TEST.C
????I.A....??????1661??2009-08-22?21:00??18B20.c
????I.A....???????590??2009-08-22?20:48??18B20.H
????I.A....???????129??2009-08-22?20:45??HEADER.H
-----------?---------??----------?-----??----
?????????????????3009????????????????????4
評論
共有 條評論