?? ds18b20.h
字號:
//#include <at89x51.h>//用AT89C51時就用這個頭文件
#include <reg52.h>//用華邦W78E58B時必須用這個頭文件
sbit DQ = P3^7; //定義DQ引腳為P3.7
/***********ds18b20延遲子函數(晶振12MHz )*******/
/************DS18B20對時間要求很嚴,但只能長不能短
*************在11.0592M下也行,因為時間長些********/
void delay_18B20(unsigned int i)
{
while(i--);
}
/**********ds18b20初始化函數**********************/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 0; //單片機將DQ拉低
delay_18B20(80); //精確延時 大于 480us
DQ = 1; //拉高總線
delay_18B20(14);
x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
delay_18B20(20);
}
/***********ds18b20讀一個字節**************/
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)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
/*************ds18b20寫一個字節****************/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}
/****************設置DS18B20工作狀態*******************
TH和TL分別是上限報警和下限報警溫度,RS是顯示分辨率的設置
*******************************************************/
void setds18b20(unsigned char TH,unsigned char TL,unsigned char RS)
{
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x4E); // //寫入"寫暫存器"命令,修改TH和TL和分辯率配置寄存器
//先寫TH,再寫TL,最后寫配置寄存器
WriteOneChar(TH); //寫入想設定的溫度報警上限
WriteOneChar(TL); //寫入想設定的溫度報警下限
WriteOneChar(RS); //寫配置寄存器,格式為0 R1 R0 1,1 1 1 1
//R1R0=00分辨率婁9位,R1R0=11分辨率為12位
}
/**************讀取ds18b20當前溫度************/
unsigned char *ReadTemperature(void)
{ unsigned char tt[2];
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
delay_18B20(70); // 溫度轉化要一段時間
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
//delay_18B20(70);
tt[0]=ReadOneChar(); //讀取溫度值低位
tt[1]=ReadOneChar(); //讀取溫度值高位
return(tt);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -