国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

51單片機(jī)讀取DS18B20溫度傳感器

這篇具有很好參考價(jià)值的文章主要介紹了51單片機(jī)讀取DS18B20溫度傳感器。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.首先我們知道DS18B20是單總線協(xié)議,只有一根數(shù)據(jù)線。所以Data數(shù)據(jù)線即使發(fā)送端又是接收端,同時(shí)DS18B20內(nèi)部接了弱上拉電阻(如圖一所示),數(shù)據(jù)線默認(rèn)為高電平。有了這些概念,我們就能進(jìn)行下一步。

51單片機(jī)讀取DS18B20溫度傳感器

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖一(截取DS18B20芯片手冊)

2.初始化DS18B20

? ? ?看圖二可知,首先我們將總線從高拉低,保持480us左右,然后釋放總線(沒人拉低,默認(rèn)高電平),此時(shí)總線上為高電平。然后等待15-60us,等待DS18B20模塊將總線拉低。(如果拉低則說明DS18B20響應(yīng)成功),DS18B20拉低60-240us后,釋放總線。初始化完成。

51單片機(jī)讀取DS18B20溫度傳感器

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖二

?3.向DS18B20寫入數(shù)據(jù)。

? ? ? ? 3.1 向DS18B20寫0。

? ? ? ?首先將總線由高拉低,低電平保持15us到60us,然后釋放總線。寫入0完成。

? ? ? ? 3.2 向DS18B20寫1。

? ? ? ? 將總線由高拉低,低電平保持1-15us(看圖三可知,低電平時(shí)間要低于15us),再釋放總線。

?51單片機(jī)讀取DS18B20溫度傳感器

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖三

4.讀取DS18B20寄存器中數(shù)據(jù)

? ? ? ? 4.1 讀數(shù)據(jù)0

將總線由高拉低,保持1-15us。如果DS18B20中數(shù)據(jù)是0,則會(huì)將總線拉低。此時(shí),總線上為低電平。我們要在60us以內(nèi)讀取數(shù)據(jù)(圖四可知,60us以內(nèi)DS18B20會(huì)釋放總線)。否則可能會(huì)讀到錯(cuò)誤數(shù)據(jù)。

? ? ? ? 4.2 讀數(shù)據(jù)1

將總線由高拉低,保持1-15us,如果數(shù)據(jù)是1,DS18B20會(huì)釋放總線,總線上為高電平。然后在15us以后讀取數(shù)據(jù)。

? ?51單片機(jī)讀取DS18B20溫度傳感器

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??圖四

5.DS18B20一些命令

? 5.1 0xCC→跳過ROM?51單片機(jī)讀取DS18B20溫度傳感器?

?5.2 其他命令

? 0x44→開始溫度轉(zhuǎn)換指令 ,0xBE→讀取數(shù)據(jù)寄存器指令

51單片機(jī)讀取DS18B20溫度傳感器

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖五

6.DS18B20數(shù)據(jù)寄存器

?這里也比較關(guān)鍵,所以拎出來講一下。

首先DS18B20的數(shù)據(jù)寄存器是16位,其中寄存器高字節(jié)的高5位的S表示符號(hào)位,其余3位才是表示數(shù)據(jù)。這里就淺講一下,后面結(jié)合代碼來解析一下。

51單片機(jī)讀取DS18B20溫度傳感器

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 圖六?

?7.代碼實(shí)例

? ? 聲明:首先這里面的延時(shí)都是按照經(jīng)驗(yàn)值,就是通過實(shí)踐,得出比較準(zhǔn)確的延時(shí)。

? ? 注:這里使用的是12M頻率的單片機(jī),如果是1M可以把for循環(huán)去掉

延時(shí)函數(shù)如下:

  sbit DQ=P1^4;
//我這里是P1^4連接了DS18B20的數(shù)據(jù)線。
//你們根據(jù)自己的單片機(jī)原理圖查詢
void Delay_OneWire(unsigned int t)  
{
	unsigned char i;
	while(t--){
		for(i=0;i<12;i++);
	}
}

? ? ? ??7.1 DS18B20初始化

bit init_ds18b20(void)
{
  	bit initflag = 0;
  	
  	DQ = 1;  
  	Delay_OneWire(12);
  	DQ = 0;  //拉低總線
  	Delay_OneWire(80);
  	DQ = 1;
  	Delay_OneWire(10); //等待DS18B20拉低
    initflag = DQ;     //獲取總線數(shù)據(jù)
  	Delay_OneWire(5);
  	return initflag;  
}

? ? ? ? ?7.2 向DS18B20寫入一字節(jié)數(shù)據(jù)

void Write_DS18B20(unsigned char dat)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		DQ = 0;  //拉低
		DQ = dat&0x01; //獲取dat最后一位數(shù)據(jù)
		Delay_OneWire(5);//寫入數(shù)據(jù)
		DQ = 1;         //釋放總線
		dat >>= 1;      //dat右移一位
	}
	Delay_OneWire(5);
}

? ? ? ? 7.3 讀取DS18B20數(shù)據(jù)寄存器的值

unsigned char Read_DS18B20(void)
{
	unsigned char i;
	unsigned char dat;
  //循環(huán)8次,讀一個(gè)字節(jié)
	for(i=0;i<8;i++)
	{
		DQ = 0;  //拉低
		dat >>= 1; 
		DQ = 1;  //釋放總線
		if(DQ)  // 因?yàn)閐at>>1位默認(rèn)是0 ,如果DQ為0,就不需要賦0了
		{
			dat |= 0x80; //給dat賦1
		}	    
		Delay_OneWire(5);
	}
	return dat;
}

? ? ? ? 7.4 讀取溫度

unsigned int  get_temp()
{ 
	unsigned int result;
    float i;
	unsigned char low,high;
    init_ds18b20();
	Write_DS18B20(0xcc);//跳過rom
    Write_DS18B20(0x44);//開始轉(zhuǎn)換
	 
	init_ds18b20();
	Write_DS18B20(0xcc);//跳過rom
	Write_DS18B20(0xbe);//開始轉(zhuǎn)換
	 
    low=Read_DS18B20(); //先讀取低字節(jié)
	high=Read_DS18B20();//再讀取高字節(jié)
	result =high&0x0f;  //獲取高字節(jié)低4位數(shù)據(jù)(1位符號(hào)位,3位數(shù)據(jù)位)
	result<<=8;         //左移8位
	result=result|low;  //或上低字節(jié),拼成16位數(shù)據(jù)。
	i=result*0.0625;    //為什么乘0.0625,下面講
	result=i*100;       //溫度值擴(kuò)大100倍,方便數(shù)碼管顯示
	return result;      //返回溫度值
}

這里為什么最后的結(jié)果result需要乘以*0.0625。我們上面講過DS18B20的數(shù)據(jù)寄存器,其實(shí)高字節(jié)的低3位才是數(shù)據(jù)位。?如高字節(jié)的最后一位本來是 2^4,假如有這個(gè)數(shù)據(jù)。則數(shù)據(jù)寄存器這個(gè)位為1,因?yàn)槲覀円呀?jīng)左移了8位,則變成了2^8.則實(shí)際上擴(kuò)大了2^8/2^4=2^4=16,比實(shí)際結(jié)果擴(kuò)大了16倍,所以我們需要乘以0.0625,縮小16倍。這樣才能得到真實(shí)值。

所以整體原因是因?yàn)閞esult左移8位,導(dǎo)致數(shù)據(jù)擴(kuò)大了16倍,所以result需要乘以0.0625縮小16倍!

?文章來源地址http://www.zghlxwxcb.cn/news/detail-482517.html

8.結(jié)語?

?這次也是通過DS18B20的芯片手冊來講解如何讀取DS18B20的數(shù)據(jù),以及最后轉(zhuǎn)化為真實(shí)溫度。? ?最后也是用代碼實(shí)例來鞏固理論,以及驗(yàn)證理論。

????????

?

到了這里,關(guān)于51單片機(jī)讀取DS18B20溫度傳感器的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于51單片機(jī)多路溫度檢測proteus仿真 ds18b20

    基于51單片機(jī)多路溫度檢測proteus仿真 ds18b20

    本設(shè)計(jì)是基于51單片機(jī)多路溫度檢測proteus仿真_ds18b20(仿真+程序+原理圖) 仿真圖proteus 7.8 程序編譯器:keil 4/keil 5 編程語言:C語言 設(shè)計(jì)編號(hào):C0042 功能說明: 通過對多路DS18B20溫度傳感器的數(shù)據(jù)采集,實(shí)現(xiàn)8路/4路溫度采集并將數(shù)值顯示在LCD顯示屏上; 通過按鍵設(shè)置溫度報(bào)警

    2024年02月12日
    瀏覽(25)
  • 【小實(shí)驗(yàn)】C51單片機(jī) DS18B20溫度顯示實(shí)驗(yàn)

    【小實(shí)驗(yàn)】C51單片機(jī) DS18B20溫度顯示實(shí)驗(yàn)

    ? ? ?利用單總線技術(shù)和數(shù)碼管動(dòng)態(tài)顯示的原理,要求實(shí)現(xiàn)DS18B20溫度采集并顯示,能夠設(shè)定溫度值上限值27.5度,當(dāng)超出上限值LED燈閃爍。? ? 實(shí)驗(yàn)前可先用protues繪制出原理圖: ? 代碼僅供參考,希望大家能夠在此基礎(chǔ)上優(yōu)化代碼,而不是ctrl+c,ctrl+v。 謝謝?。。?? ? ? ?

    2024年02月12日
    瀏覽(23)
  • 基于51單片機(jī)的DS18B20溫度控制加熱降溫系統(tǒng)設(shè)計(jì)

    基于51單片機(jī)的DS18B20溫度控制加熱降溫系統(tǒng)設(shè)計(jì)

    仿真圖:proteus8.9以上 程序代碼:KEIL4/KEIL5 原理圖:AD 設(shè)計(jì)編號(hào):A0007 結(jié)合實(shí)際情況,基于51單片機(jī)設(shè)計(jì)一個(gè)排隊(duì)叫號(hào)系統(tǒng)設(shè)計(jì)。該系統(tǒng)應(yīng)滿足的功能要求為: 系統(tǒng)由51單片機(jī)、DS18B20溫度傳感器、LCD1602液晶顯示屏、繼電器、風(fēng)扇、加熱膜、按鍵、蜂鳴器組成。 可實(shí)現(xiàn)以下基本功能

    2023年04月09日
    瀏覽(29)
  • 51單片機(jī)DS18B20溫度報(bào)警器proteus仿真設(shè)計(jì)_可調(diào)上下限

    51單片機(jī)DS18B20溫度報(bào)警器proteus仿真設(shè)計(jì)_可調(diào)上下限

    (仿真+源碼+原理圖+報(bào)告+講解視頻) 原理圖:Altium Designer 仿真版本:proteus 7.8 程序編譯器:keil 4/keil 5 編程語言:C語言 設(shè)計(jì)編號(hào):S0008 本設(shè)計(jì)系統(tǒng)是18b20溫度報(bào)警系統(tǒng)數(shù)碼管顯示,可設(shè)置溫度上限高溫報(bào)警和下限低溫報(bào)警,報(bào)警溫度可精確到0.1度,并具有掉電保存功能,數(shù)

    2024年02月11日
    瀏覽(19)
  • 51單片機(jī)DS18B20溫度傳感器使用及數(shù)碼管溫度計(jì)、LCD1602溫度顯示代碼詳解

    51單片機(jī)DS18B20溫度傳感器使用及數(shù)碼管溫度計(jì)、LCD1602溫度顯示代碼詳解

    溫馨提示:讀者若要徹底理解并會(huì)靈活使用DS18B20溫度傳感器,請?jiān)敿?xì)閱讀中文手冊,并且對照代碼注釋充分分析代碼。請不要覺得中文手冊內(nèi)容繁多!如能靜心分析,定能深有體會(huì),獲益匪淺! 主函數(shù)操作順序(執(zhí)行序列) 功能指令 最后希望我的分享對你有所幫助!敬請關(guān)

    2024年02月12日
    瀏覽(29)
  • 【TB作品】MSP430單片機(jī) Proteus仿真 DS18B20溫度 LCD1602顯示器 溫度讀取與顯示

    【TB作品】MSP430單片機(jī) Proteus仿真 DS18B20溫度 LCD1602顯示器 溫度讀取與顯示

    效果圖如下: 首先,讓我們先來說說DS18B20集成電路。 ? DS18B20是一款采用OneWire通訊協(xié)議的集成電路,因此只需要一條線就可以與微控制器通訊。它不需要額外的電源,但是也有外部電源輸入端口。 ? OneWire設(shè)備具有64位的ROM代碼。如我們之前所說,這64位的前8位是家族代碼,中間

    2024年02月08日
    瀏覽(24)
  • DS18B20與單片機(jī)的通信、DS18B20采集溫度、MODBUS協(xié)議、練習(xí)框架

    DS18B20與單片機(jī)的通信、DS18B20采集溫度、MODBUS協(xié)議、練習(xí)框架

    單總線數(shù)字溫度計(jì) 異步的半雙工的串行通信 測量范圍從-55℃ ~ +125℃,增量值為0.5℃ 要用DS18B20采集溫度,就要實(shí)現(xiàn)與單片機(jī)之間的通信,因此有兩個(gè)問題 Bus master active low:主機(jī)執(zhí)行低電平 DS1820 active low:DS18B20執(zhí)行低電平 Both bus master and DS1820 active low:全都釋放低電平 Resis

    2024年04月16日
    瀏覽(26)
  • 【單片機(jī)】17-溫度傳感器DS18B20

    【單片機(jī)】17-溫度傳感器DS18B20

    (1)測溫度的方式:物理(汞柱,氣壓),電子(金屬電性能隨溫度變化) (2)早期:熱敏電阻(模擬接口---》 A/D轉(zhuǎn)換 ) (3)現(xiàn)代:專用sensor(數(shù)字接口,如I2C,DS18B20單總線接口等) DS18B20 可編程分辨率單總線 溫度傳感器 (1)內(nèi)置集成ADC,外部數(shù)字接口 (2) 單總線

    2024年02月04日
    瀏覽(22)
  • 單片機(jī)第二季:溫度傳感器DS18B20

    單片機(jī)第二季:溫度傳感器DS18B20

    目錄 1,DS18B20介紹 2,DS18B20數(shù)據(jù)手冊? 2.1,初始化時(shí)序? 2.2,讀寫時(shí)序? 3,DS18B20工作流程 4,代碼 ? DS18B20的基本特征: (1)內(nèi)置集成ADC,外部數(shù)字接口,也就是可以直接與單片機(jī)的數(shù)字接口連接,DS18B20 在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只

    2024年02月10日
    瀏覽(23)
  • 【藍(lán)橋杯-單片機(jī)學(xué)習(xí)筆記(十三)】DS18B20溫度傳感器

    【藍(lán)橋杯-單片機(jī)學(xué)習(xí)筆記(十三)】DS18B20溫度傳感器

    一、溫度傳感器-DS18B20介紹 DS18B20是單總線數(shù)字化溫度傳感器,測量溫度范圍是-55℃~+125℃,在-10℃~+85℃范圍內(nèi),精度為±0.5℃。支持3V~5.5V的供電電壓范圍。DS18B20可以程序設(shè)定9~12位的分辨率,精度為±0.5℃。 1.DS18B20內(nèi)部結(jié)構(gòu) DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度

    2023年04月09日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包