下載手機(jī)汽配人

基于DS18B20溫度傳感器的溫度計(jì)設(shè)計(jì)c程序

提問者:網(wǎng)友 2018-07-30
最佳回答
#include "REG51.H" #include "INTRINS.H" typedef unsigned char BYTE; sbit DQ = P3^3; //DS18B20的數(shù)據(jù)口位P3.3 BYTE TPH; //存放溫度值的高字節(jié) BYTE TPL; //存放溫度值的低字節(jié) void DelayXus(BYTE n); void DS18B20_Reset(); void DS18B20_WriteByte(BYTE dat); BYTE DS18B20_ReadByte(); void main() { DS18B20_Reset(); //設(shè)備復(fù)位 DS18B20_WriteByte(0xCC); //跳過ROM命令 DS18B20_WriteByte(0x44); //開始轉(zhuǎn)換命令 while (!DQ); //等待轉(zhuǎn)換完成 DS18B20_Reset(); //設(shè)備復(fù)位 DS18B20_WriteByte(0xCC); //跳過ROM命令 DS18B20_WriteByte(0xBE); //讀暫存存儲(chǔ)器命令 TPL = DS18B20_ReadByte(); //讀溫度低字節(jié) TPH = DS18B20_ReadByte(); //讀溫度高字節(jié) while (1); } /************************************** 延時(shí)X*10微秒 不同的工作環(huán)境,需要調(diào)整此函數(shù) **************************************/ void DelayX0us(BYTE n) { while (n--) { _nop_(); _nop_(); } } /************************************** 復(fù)位DS18B20,并檢測(cè)設(shè)備是否存在 **************************************/ void DS18B20_Reset() { CY = 1; while (CY) { DQ = 0; //送出低電平復(fù)位信號(hào) DelayX0us(48); //延時(shí)至少480us DQ = 1; //釋放數(shù)據(jù)線 DelayX0us(6); //等待60us CY = DQ; //檢測(cè)存在脈沖 DelayX0us(42); //等待設(shè)備釋放數(shù)據(jù)線 } } /********************
回答者:網(wǎng)友
產(chǎn)品精選
搜索問答
還沒有汽配人賬號(hào)?立即注冊(cè)

我要提問

汽配限時(shí)折扣

本頁(yè)是網(wǎng)友提供的關(guān)于“基于DS18B20溫度傳感器的溫度計(jì)設(shè)計(jì)c程序”的解答,僅供您參考,汽配人網(wǎng)不保證該解答的準(zhǔn)確性。