freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于51單片機及ds18b20溫度傳感器的數(shù)字溫度計設(shè)計(更新版)

2025-08-02 16:40上一頁面

下一頁面
  

【正文】 //等待DS18B20拉低總線 ds18b20_delayus(20)。i) for(j=120。 //測量溫度的小數(shù)部bit f=0。 //報警函數(shù) keyscan()。 //關(guān)閉蜂鳴器 led=1。K1是用來* 進入上下限調(diào)節(jié)模式的,當(dāng)按一下K1進入上限調(diào)節(jié)模式,再按一下進入下限* 調(diào)節(jié)模式。還有就是文章中提到的蜂鳴器驅(qū)動問題等等。比如本來是采用NPN型9013驅(qū)動蜂鳴器,但是在實際調(diào)試中蜂鳴器驅(qū)動不了,經(jīng)多次試驗,在三極管的基極電阻與單片機的接口處接一個2kΩ的上拉電阻就能驅(qū)動了。圖33 DS18B20傳感器的讀寫時序 DS18B20獲取溫度程序流程圖DS18B20的讀字節(jié),寫字節(jié),獲取溫度的程序流程圖如圖33所示。在數(shù)據(jù)總線由高電平變?yōu)榈碗娖街?,DS18B20在15μs至60μs的時間間隙對總線采樣,如果為“1”則向DS18B20寫“1”, 如果為“0”則向DS18B20寫“0”。 DS18B20傳感器的初始化時序DS18B20傳感器為單總線結(jié)構(gòu)器件,在讀寫操作之前,傳感器芯片應(yīng)先進性復(fù)位操作也就是初始化操作。告警搜索命令0xEC執(zhí)行后只有溫度超過設(shè)定值上限或下限的片子才做出響應(yīng)。DS18B20的操作流程如圖31所示。四位一體的共陰數(shù)碼管的管腳分布圖如圖25所示。 系統(tǒng)硬件設(shè)計 單片機電路設(shè)計圖24 單片機最小系統(tǒng)原理圖單片機最小系統(tǒng)是由晶振電路,上電復(fù)位、按鍵復(fù)位電路,ISP下載接口和電源指示燈組成。因此,可用多只DS18B20同時測量溫度并進行報警搜索。當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲器,結(jié)構(gòu)如圖23所示。顯示電路采用4位共陰LED數(shù)碼管,從P0口輸出段碼,P2口的高四位為位選端。 32 2 系統(tǒng)總體方案及硬件設(shè)計 系統(tǒng)總體方案由于DS18B20數(shù)字溫度傳感器具有單總線的獨特優(yōu)點,可以使用戶輕松地組建起傳感器網(wǎng)絡(luò),并可使多點溫度測量電路變得簡單、可靠,所以在該設(shè)計中采用DS18B20數(shù)字溫度傳感器測量溫度。本設(shè)計的顯示模塊是用四位一體的數(shù)碼管動態(tài)掃描顯示實現(xiàn)的。所以本次設(shè)計的數(shù)字溫度計在工業(yè)、農(nóng)業(yè)、日常生活中都有廣泛的應(yīng)用。本次設(shè)計采用的AT89S52是一種flash型單片機,可以直接在線編程,向單片機中寫程序變得更加容易。其輸出溫度采用LED數(shù)碼管顯示,主要用于對測溫比較準確的場所。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程的Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。DS18B20的性能特點如下:獨特的單線接口僅需要一個端口引腳進行通信;多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)功能;無須外部器件;可通過數(shù)據(jù)線供電,~;零待機功耗;溫度以9或12位二進制數(shù)字表示;用戶可定義報警設(shè)置;報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件;負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作; DS18B20采用3腳TO-92封裝或8腳SO或181。表21:配置寄存器D7 D6 D5 D4 D3 D2 D1 D0TMR1R011111配置寄存器的低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設(shè)置為0,用戶要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率,“R1R0”為“00”是9位,“01”是10位,“10”是11位,“11”是12位。當(dāng)符號位s=0時,表示測得的溫度值為正值,可以直接將二進制位轉(zhuǎn)換為十進制;當(dāng)符號位s=1時,表示測得的溫度值為負值,要先將補碼變成原碼,再計算十進制數(shù)值。調(diào)節(jié)模塊是由四個按鍵接地后直接接單片機的I/O口完成的。電源供電方式如圖27,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源。電路原理圖如圖210所示。表31 DS18B20的指令表指 令指令代碼功 能讀ROM0x33讀DS1820溫度傳感器ROM中的編碼(即64位地址)符合 ROM0x55發(fā)出此命令之后,接著發(fā)出 64 位 ROM 編碼,訪問單總線上與該編碼相對應(yīng)的 DS1820 使之作出響應(yīng),為下一步對該 DS1820 的讀寫作準備。讀暫存器0xBE讀內(nèi)部RAM中9字節(jié)的內(nèi)容寫暫存器0x4E發(fā)出向內(nèi)部RAM的4字節(jié)寫上、下限溫度數(shù)據(jù)命令,緊跟該命令之后,是傳送兩字節(jié)的數(shù)據(jù)。圖32 DS18B20初始化時序 DS18B20傳感器的讀寫時序 DS18B20傳感器的讀寫操作是在傳感器初始化后進行的。對于主機產(chǎn)生寫“1”時序時,數(shù)據(jù)線必須先被拉至低電平,且至少保持低電平60μs。程序流程圖如圖34所示。此次的設(shè)計使我從中學(xué)到了一些很重要的東西,那就是如何從理論到實踐的轉(zhuǎn)化,怎樣將我們所學(xué)到的知識運用到實踐中去。通過此次的綜合設(shè)計,我們初步掌握了單片機系統(tǒng)設(shè)計的基本原理。 * 編程者:zicreate* 編程時間:2009/10/2 *********************************************************************/include //include //(調(diào)用其中的_nop_()空操作函數(shù)延時)define uint unsigned int //變量類型宏定義,用uint表示無符號整形(16位)define uchar unsigned char //變量類型宏定義,用uchar表示無符號字符型(8位)uchar max=0x00,min=0x00。 //首次啟動DS18B20獲取溫度(DS18B20上點后自動將EEPROM中的上下限溫度復(fù)制到TH和TL寄存器) while(1) //主循環(huán) { keyscan()。 *********************************************************************/ifndef __ds18b20_h__ //定義頭文件define __ds18b20_h__define uint unsigned int //變量類型宏定義,用uint表示無符號整形(16位)define uchar unsigned char //變量類型宏定義,用uchar表示無符號字符型(8位)sbit DQ= P2^3。 //下限溫度的標(biāo)志位‘0’表示“正溫度”、‘1’表示“負溫度”)bit w=0。}/**************************ds18b20初始化函數(shù)*************************/void ds18b20_init() // DS18B20初始化{ DQ=1。 //定義一個局部變量i(局部變量只在本函數(shù)中有效) uchar d = 0。_nop_()。i) //一位一位的寫 { DQ=0。 d = 1。 //用開機動畫耗時 } else ds18b20_delayms(1)。 //讀內(nèi)部RAM (Tl) } if((maxamp。 i=b。 //i為1,表示讀取的溫度是負溫度,設(shè)立負溫度標(biāo)記 a=~a+1。 ds18b20_init()。 //向DS18B20發(fā)跳過讀ROM命令 ds18b20_write(0x48)。} //若測量值是負值時報警 } if(f_min==1) //若下限值是負值 { if(f==0) //若測量值是正值 { if((temp+temp_d*)=max)//當(dāng)測量值大于最大值時報警 {w=1。} //當(dāng)測量值小于最大值或大于最小值時報警 if((temp+temp_d*)minamp。 //sbit key3=P2^0。 //消按鍵音功能調(diào)整位,為‘0’時開按鍵音,為‘1’時關(guān)按鍵音/***************************讀鍵盤延時子函數(shù)**************************/void keyscan_delay(uint z) //延時1ms左右{ uint i,j。 //延時10ms if(key2==0) //再次判斷K2是否按下(實現(xiàn)按按鍵時消抖) { beer=1。 keyscan_delay(10)。 keyscan_delay(10)。 //在上下溫度調(diào)節(jié)功能模式下選擇KK3的溫度加減功能 i++。 //a=0選擇顯示測得的溫度 case 1:a=1。amp。 if(k4==1) //k4=1時K4按鍵選擇正負溫度設(shè)定功能 { if(key4==0) { if(v2==0)beer=0。 keyscan_delay(10)。 keyscan_delay(10)。 keyscan_delay(10)。 //為‘0’時開按鍵音,為‘1’時關(guān)按鍵音 } while(key4==0)。 //定義num為全局無符號字符型變量,賦初值為‘0’uchar code temperature1[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}。j)。 //重新賦初值,定時50ms TL0=0xb0。if(w==1){beer=0。 else P0=temperature1[k/100]。 else P0=temperature1[k%100/10]。 //關(guān)第二個數(shù)碼管 wei3=0。//若s1=1則顯示第二個數(shù)碼管(s1標(biāo)志位用于上下限查看時的顯示) } if(a==2) //若a=2則在第二個數(shù)碼管上顯示下限報警溫度的百位或‘’ { if(s==0) selsct_1(f_min,min)。 case 2: //選通第三個數(shù)碼管 if(a==0){P0=temperature2[t%10]。 wei2=0。//若s1=1則顯示第四個數(shù)碼管 } if(a==2) //若a=2則在第四個數(shù)碼管上顯示下限報警溫度的個位 { if(s==0) P0=temperature1[min%10]。 } display_delay(3)。//第一個數(shù)碼管顯示 wei2=0。 wei4=0。 break。 //每個數(shù)碼管顯示200ms左右 } }}endif附2 系統(tǒng)原理圖
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1