18B20溫度檢測
1.1 需求描述
本案例講解如何從18B20傳感器獲取溫度信息并顯示在LCD上。
1.2 硬件設(shè)計
1.2.1 硬件原理圖
1.2.3 18B20工作原理
可以看到18B20有兩根引腳負責供電,一根引腳負責數(shù)據(jù)交換。18B20就是通過數(shù)據(jù)線和單片機進行數(shù)據(jù)交換的。
1)18B20工作時序
2)初始化信號
#define DQ P44
/**
* @brief 初始化方法
*
* @return 1代表存在,0代表不存在
*/
static bit Int_DS18B20_Init()
{
bit result;
// 主機拉低
DQ = 0;
Delay60us(8);
// 主機釋放DQ
DQ = 1;
Delay60us(1);
// 查看18B20狀態(tài)
result = ~DQ;
Delay60us(7);
return result;
}
3)寫數(shù)據(jù)時序
寫‘1’時序
寫‘0’時序
寫字節(jié)
讓18B20測量溫度,并將溫度保存在RAM中。
根據(jù)說明書第五節(jié)“溫度測量”,我們需要向18B20發(fā)送功能指令0x44,可以觸發(fā)溫度測量動作,根據(jù)上面的事件序列,我們可以得知,這一步的通信流程如下:
發(fā)送初始化信號。
發(fā)送跳過ROM命令的指令(因為我們不需要ROM命令),查詢ROM命令列表可得知,我們需要向18B20發(fā)送0xCC。
發(fā)送溫度測量指令,查詢功能命令列表可得知,我們需要向18B20發(fā)送0x44。
4)讀數(shù)據(jù)時序
5)從18B20中讀取剛剛測量的溫度。
查詢說明書的命令指令可得知,如果我們想讀取18B20寄存器,需要向18B20發(fā)送功能指令0xBE,再從18B20中連續(xù)接收9字節(jié)數(shù)據(jù)。這9字節(jié)數(shù)據(jù)中,只有前兩個字節(jié)是我們需要的溫度數(shù)據(jù)。所以我們在接收兩個字節(jié)后,需要再發(fā)送一次復(fù)位(初始化)信號,打斷接下來的數(shù)據(jù)傳輸。整個通信流程如下:
發(fā)送初始化信號。
發(fā)送跳過ROM命令的指令0xCC。
發(fā)送讀取寄存器的命令0xBE。
接收兩個字節(jié)。
發(fā)送初始化信號打斷傳輸。
1.3軟件設(shè)計
1)Util.h文章來源:http://www.zghlxwxcb.cn/news/detail-855789.html
在Util.h中加入新的延時函數(shù)聲明。文章來源地址http://www.zghlxwxcb.cn/news/detail-855789.html
/**
到了這里,關(guān)于day07 51單片機-18B20溫度檢測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!