?? 18b20a.c
字號(hào):
/*-----------------------------------------------
名稱(chēng):18B20溫度傳感器
網(wǎng)站:www.doflye.net
編寫(xiě):shifang
日期:2009.5
修改:無(wú)
內(nèi)容:18B20單線(xiàn)溫度檢測(cè)的應(yīng)用樣例程序
------------------------------------------------*/
#include"delay.h"
#include"18b20a.h"
/*------------------------------------------------
18b20初始化
------------------------------------------------*/
bit Init_DS18B20_a(void)
{
bit dat=0;
DQ1 = 1; //DQ1復(fù)位
DelayUs2x(5); //稍做延時(shí)
DQ1 = 0; //單片機(jī)將DQ1拉低
DelayUs2x(200); //精確延時(shí) 大于 480us 小于960us
DelayUs2x(200);
DQ1 = 1; //拉高總線(xiàn)
DelayUs2x(50); //15~60us 后 接收60-240us的存在脈沖
dat=DQ1; //如果x=0則初始化成功, x=1則初始化失敗
DelayUs2x(25); //稍作延時(shí)返回
return dat;
}
/*------------------------------------------------
讀取一個(gè)字節(jié)
------------------------------------------------*/
unsigned char ReadOneChar_a(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ1 = 0; // 給脈沖信號(hào)
dat>>=1;
DQ1 = 1; // 給脈沖信號(hào)
if(DQ1)
dat|=0x80;
DelayUs2x(25);
}
return(dat);
}
/*------------------------------------------------
寫(xiě)入一個(gè)字節(jié)
------------------------------------------------*/
void WriteOneChar_a(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ1 = 0;
DQ1 = dat&0x01;
DelayUs2x(25);
DQ1 = 1;
dat>>=1;
}
DelayUs2x(25);
}
/*------------------------------------------------
讀取溫度
------------------------------------------------*/
unsigned int ReadTemperature_a(void)
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20_a();
WriteOneChar_a(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar_a(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
DelayMs(10);
Init_DS18B20_a();
WriteOneChar_a(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
WriteOneChar_a(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
a=ReadOneChar_a(); //低位
b=ReadOneChar_a(); //高位
b<<=8;
t=a+b;
return(t);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -