




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
DS18B20的應(yīng)用任務(wù)5基于DS18B20的數(shù)字溫度計任務(wù)描述溫度測量在糧食倉儲、食品加工、藥品制造等領(lǐng)域有著廣泛應(yīng)用。在傳統(tǒng)的溫度測量系統(tǒng)設(shè)計中,往往采用熱敏電阻或PN結(jié)為溫度傳感器,這樣就不可避免地遇到諸如引線誤差補(bǔ)償、信號調(diào)理電路的誤差等問題,并且隨著測溫點(diǎn)數(shù)量的增加,信號傳輸線數(shù)量也隨之增加,這樣帶來系統(tǒng)安裝,維護(hù),可靠性以及成本的一系列問題。由于DS18B20具有體積小、結(jié)構(gòu)簡單,現(xiàn)場溫度直接以1-wire總線的數(shù)字方式輸出的特點(diǎn),被廣泛應(yīng)用在環(huán)境溫度測量系統(tǒng)中。設(shè)計一個簡易數(shù)字溫度計,測溫范圍-40~99℃,測量誤差為±1℃。要求:(1)在ProteusISIS中完成數(shù)字溫度計設(shè)計。(2)在KeilμVision3中創(chuàng)建數(shù)字溫度計項(xiàng)目、編寫、編譯數(shù)字溫度計程序。(3)用Proteus和KeilC51仿真與調(diào)試數(shù)字溫度計。2知識鏈接
一、1-Wire總線1-WireBUS(單總線)是Maxim全資子公司Dallas的一種串行總線技術(shù),該技術(shù)采用一根信號線,既傳輸時鐘,又傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,同時可以通過這根信號線向單總線器件提供電源。它具有節(jié)省I/O口線資源、結(jié)構(gòu)簡單、成本低廉、便于總線擴(kuò)展和維護(hù)等諸多優(yōu)點(diǎn)。
1.1-wire總線器件的硬件結(jié)構(gòu)
1-wire總線系統(tǒng)中包含一個主機(jī)和若干從機(jī),它們共用一條數(shù)據(jù)線,總線上的所有器件采用線或的方式進(jìn)行連接,這就要求單總線上每個器件的端口必須為漏極開路輸出或具有三態(tài)輸出的功能。由于主機(jī)和從機(jī)都是漏極開路輸出的,所以在總線靠近主機(jī)的地方必須連接上拉電阻(4.7kΩ),系統(tǒng)才能正常工作。3單總線器件一般采用3個引腳的封裝形式,一個是電源端、一個是數(shù)據(jù)端、一個是電源地端。電源端可以為單總線器件提供外部電源,如果在單總線上的從設(shè)備很少,甚至只有1個時,電源端可以不連接,而采用接地的方式。
單總線器件之所以將VCC引腳與地相連,主要是由內(nèi)部的結(jié)構(gòu)所決定。由圖可以看出,單總線器件的電源部分由兩個二極管D1和D2、一個電容器CP以及電源檢測電路組成。當(dāng)VCC端連接到系統(tǒng)的VCC時,總線器件由VCC經(jīng)D2向內(nèi)部進(jìn)行供電;當(dāng)VCC端與GND端連接并連接到系統(tǒng)中的數(shù)字地時,單總線器件的供電由CP(D1、D2截止)完成。
每個單總線器件都有一個采用激光刻制的序列號,任何單總線器件的序列號都不會重復(fù)。當(dāng)很多單總線器件連接在同一條總線上時,主設(shè)備可以通過搜尋每個器件的序列號進(jìn)行訪問。單總線器件的序列號由48位二進(jìn)制數(shù)組成,與家族碼、校驗(yàn)碼共同構(gòu)成單總線器件的ROM注冊碼,如圖所示。在單總線器件ROM注冊碼的數(shù)據(jù)格式中,最低的8位是家族碼,然后是48位序列號,最高8位是CRC校驗(yàn)碼。2.1-wire總線器件的序列號單總線的通信協(xié)議定義了以下幾種類型的信號:復(fù)位脈沖、應(yīng)答脈沖、寫“0”、寫“1”、讀“0”和讀“1”。在這些信號中,除了應(yīng)答脈沖外,其他均由主機(jī)發(fā)出同步信號,并且發(fā)送的所有命令和數(shù)據(jù)都是字節(jié)的低位在前,這一點(diǎn)與多數(shù)串行通信格式不同(多數(shù)為字節(jié)的高位在前)。在單總線協(xié)議中,將完成一位傳輸?shù)臅r間稱為一個時隙,于是字節(jié)傳輸可以通過多次調(diào)用位操作來實(shí)現(xiàn)。當(dāng)主機(jī)向從機(jī)輸出數(shù)據(jù)時,稱為“寫時隙”,當(dāng)主機(jī)由從機(jī)中讀取數(shù)據(jù)時,稱為“讀時隙”。無論是“寫時隙”還是“讀時隙”,都以主機(jī)驅(qū)動數(shù)據(jù)總線(DQ)為低電平開始,數(shù)據(jù)線的下降沿觸發(fā)從機(jī)內(nèi)部的延時電路,使之與主機(jī)取得同步。(1)初始化序列單總線上的所有通信都是以初始化序列開始的,包括主機(jī)發(fā)出的復(fù)位脈沖、從機(jī)的應(yīng)答脈沖。3.1-wire總線數(shù)據(jù)通信協(xié)議單總線初始化時序圖在初始化序列中,首先主機(jī)發(fā)出480~960μs的低電平作為復(fù)位脈沖,然后之機(jī)釋放總線,由上拉電阻將總線拉至高電平,同時主機(jī)進(jìn)入接收狀態(tài)。在進(jìn)入接收狀態(tài)15~60μs后,主機(jī)開始檢測I/O引腳上的下降沿,以監(jiān)視單總線上是否有從機(jī)存在,以及從機(jī)是否產(chǎn)生應(yīng)答,這個檢測的時間一般為60~240μs。檢測結(jié)束后,主機(jī)等待從機(jī)釋放總線。主機(jī)的整個接收狀態(tài)至少應(yīng)維持480μs。從機(jī)接收到主機(jī)發(fā)送的復(fù)位脈沖,在等待15~60μs后,向總線發(fā)出一個應(yīng)答脈沖(該脈沖是一個60~240μs的低電平信號,由從機(jī)將總線拉低),表示從機(jī)已經(jīng)準(zhǔn)備好,可根據(jù)各類命令發(fā)送或接收數(shù)據(jù)。復(fù)位脈沖是主機(jī)以廣播的形式發(fā)出的,所以總線上的所有從機(jī)只要接收到復(fù)位脈沖都會發(fā)出應(yīng)答脈沖。主機(jī)一旦檢測到應(yīng)答脈沖,就認(rèn)為總線上存在從機(jī),并已準(zhǔn)備好接收命令或數(shù)據(jù),這時主機(jī)可以開始發(fā)送相關(guān)信息。如果主機(jī)沒有檢測到應(yīng)答脈沖,則認(rèn)為總線上沒有從機(jī),在程序的設(shè)計上可以跳過相應(yīng)的單總線操作,而轉(zhuǎn)入其他的程序。(2)寫時隙單總線通信協(xié)議中包括兩種“寫時隙”:寫“0”和寫“1”,主機(jī)采用“寫時隙”向從機(jī)寫入二進(jìn)制數(shù)據(jù)“0”或“1”。所有“寫時隙”至少需要60μs,而且在兩次獨(dú)立的“寫時隙”之間至少需要1μs的恢復(fù)時間。兩種“寫時隙”均起始于主機(jī)拉低總線(DQ)。產(chǎn)生寫“0”時隙的方式:在主機(jī)拉低總線后,需在整個時隙期間內(nèi)保持低電平即可(至少60μs)。產(chǎn)生寫“1”時隙的方式:在主機(jī)拉低總線后,接著必須在15μs之內(nèi)釋放總線,由上拉電阻將總線拉至高電平,并維持時隙期間。在“寫時隙”起始后15~60μs期間,單總線的從機(jī)采樣總線的電平狀態(tài):如果在此期間采樣值為低電平,則寫入的數(shù)據(jù)為邏輯“0”;如果采樣值為高電平,則寫入的數(shù)據(jù)為邏輯“1”。單總線主機(jī)“讀/寫時隙”時序圖(3)讀時隙單總線器件僅在主機(jī)發(fā)出“讀時隙”時,才向主機(jī)傳輸數(shù)據(jù)。所以在主機(jī)發(fā)出讀數(shù)據(jù)命令后,必須馬上產(chǎn)生讀時隙,以便從機(jī)能夠傳輸數(shù)據(jù)。所有讀時隙至少需要60μs,且在兩次獨(dú)立的讀時隙之間至少需要1μs的恢復(fù)時間。每個讀時隙都由主機(jī)發(fā)起,至少拉低總線1μs。在主機(jī)發(fā)起“讀時隙”之后,從機(jī)才開始在總線上發(fā)送“0”和“1”。若從機(jī)發(fā)送“1”則保持總線為高電平,若發(fā)送“0”則拉低總線。當(dāng)發(fā)送“0”時,從機(jī)在該時隙結(jié)束后釋放總線,由上拉電阻將總線拉回至空閑高電平狀態(tài)。從機(jī)發(fā)出的數(shù)據(jù)在起始時隙之后,保持有效時間15μs,因而主機(jī)在“讀時隙”期間必須釋放總線,并且在起始時隙后的15μs之內(nèi)采樣總線狀態(tài)。在主機(jī)檢測到從機(jī)的應(yīng)答脈沖后,便可以向從機(jī)發(fā)送ROM命令(這些ROM命令與從機(jī)唯一的64位注冊碼有關(guān))。主機(jī)通過ROM命令得知但總線上從機(jī)的數(shù)量、類型、報警狀態(tài)以及讀取總線器件內(nèi)數(shù)據(jù)等相關(guān)信息。搜索ROM(命令代碼F0H)當(dāng)系統(tǒng)中存在單總線器件時,可以通過該命令獲知從機(jī)的注冊碼,這樣主機(jī)就可以判斷出總線上從機(jī)的數(shù)量和類型。如果總線上只有一個單總線器件,可以通過“讀取ROM”命令直接獲得從機(jī)的ROM注冊碼;如果總線上從機(jī)數(shù)量較多,則需要多次使用該命令,并結(jié)合相應(yīng)搜索算法才能獲得其中一個從機(jī)的ROM注冊碼,若需要其他從機(jī)的ROM注冊碼,就要重新搜索。讀取ROM(命令代碼33H)當(dāng)總線上只有一個單總線器件時,如果需要獲得該器件的注冊碼,可以執(zhí)行該命令。如果總線上連接有多個單總線器件,使用該命令必然引起混亂。匹配ROM(命令代碼55H)當(dāng)總線上連接有多個單總線器件并知道每個器件的ROM注冊碼時,可以使用該命令對任何一個從機(jī)進(jìn)行呼叫,這個過程相當(dāng)于串行通信中的地址匹配過程,只有與主機(jī)發(fā)出的ROM注冊碼相同的從機(jī),才能相應(yīng)主機(jī)發(fā)出的其他命令,而總線上的其他從機(jī)將等待主機(jī)再次發(fā)出復(fù)位脈沖。4.1-wire總線的ROM命令跳躍ROM(命令代碼CCH)如果總線上只有一個單總線器件,主機(jī)可跳過從機(jī)的ROM注冊碼,直接訪問從機(jī)內(nèi)其他單元(如寄存器等);如果總線上連接有多個單總線器件,并且類型相同,在訪問一些特殊單元時,也可以使用該命令。例如總線上連接有多個DS18B20溫度傳感器時,主機(jī)可以通過發(fā)出“跳躍ROM”(CCH)(也稱“直訪ROM”)后,接著發(fā)送啟動溫度轉(zhuǎn)換命令(44H),這樣就可以使總線上所有DS18B20同時啟動溫度轉(zhuǎn)換。如果在“直訪ROM”命令后,接著發(fā)送的是讀取暫存器等命令(BEH),這只等用于總線上只有一個單總線器件的情況,否則將造成數(shù)據(jù)的沖突。報警搜索(命令代碼為ECH)僅有少數(shù)單總線器件支持該命令。除那些設(shè)置了報警標(biāo)志的從機(jī)響應(yīng)外,該命令的工作方式完全等同于“搜索ROM”命令。該命令允許主機(jī)判斷哪些從機(jī)發(fā)生了報警,如最近的測量溫度過高或過低等。同“搜索ROM”命令一樣,在完成報警搜索循環(huán)后,主機(jī)必須返回重新搜索。單總線數(shù)據(jù)傳輸格式
在使用ROM命令對單總線器件進(jìn)行操作時,也需要按照一定的格式傳輸數(shù)據(jù)。二、基于1-Wire總線的數(shù)字溫度傳感器DS18B20單總線接口,可方便地實(shí)現(xiàn)多點(diǎn)測溫。每個芯片都有唯一的一個64位光刻的ROM注冊碼,家族碼為28H。無需外部器件,可通過數(shù)據(jù)線供電,電源電壓范圍:3.0~5.0V。溫度測量范圍-55~+125℃,在-10~+85℃范圍內(nèi),測量精度可達(dá)到±0.5℃。分辨率為可編程的9~12位(包括1位符號位),對應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃。DS18B20的轉(zhuǎn)換時間與設(shè)定的分辨率有關(guān)。當(dāng)設(shè)定為9位時,最大轉(zhuǎn)換時間為93.75ms;當(dāng)設(shè)定為10位時,轉(zhuǎn)換時間為187.5ms;當(dāng)設(shè)定為11位時,最大轉(zhuǎn)換時間為375ms;當(dāng)設(shè)定12位時,轉(zhuǎn)換時間為750ms。溫度數(shù)據(jù)由2個字節(jié)組成。內(nèi)部含有EEPROM,其報警上、下限溫度值和設(shè)定的分辨率在掉電的情況下不丟失。1.DS18B20的性能DS18B20的引腳定義及封裝形式DS18B20的核心功能是一個直接數(shù)字式溫度傳感器。芯片的分辨率可按照用戶的需要配置為9位、10位、11位、12位,芯片在上電后的默認(rèn)設(shè)置為12位。DS18B20可工作在低功耗的空閑狀態(tài)。單總線系統(tǒng)中的主機(jī)發(fā)出溫度轉(zhuǎn)換命令(44H)后,DS18B20便開始啟動溫度測量并把測量的結(jié)果進(jìn)行A/D轉(zhuǎn)換。經(jīng)過A/D轉(zhuǎn)化后,所產(chǎn)生的溫度數(shù)據(jù)將存儲在暫存寄存器中的兩個溫度寄存器單元中,數(shù)據(jù)的格式為符號擴(kuò)展的二進(jìn)制補(bǔ)碼,同時DS18B20返回到空閑狀態(tài)。DS18B20的溫度數(shù)據(jù)輸出單位為“攝氏度”。溫度數(shù)據(jù)在兩個溫度寄存器單元中的存儲格式如圖所示。2.DS18B20的工作原理標(biāo)志位(S)是溫度數(shù)據(jù)的符號擴(kuò)展位,表示溫度的正負(fù):如果溫度為正,則S=0;如果溫度為負(fù),則S=1。在實(shí)際使用過程中,如果DS18B20被設(shè)置為12位分辨率,則在溫度寄存器單元中所有數(shù)據(jù)位都是有效位;如果DS18B20被設(shè)置為11位分辨率,則D0位數(shù)據(jù)無效;如果DS18B20被設(shè)置為10位分辨率,則D1、D0位數(shù)據(jù)無效;如果DS18B20被設(shè)置為9位分辨率,則D2、D1、D0位數(shù)據(jù)無效。+85℃是DS18B20在上電復(fù)位后在溫度寄存器內(nèi)的對應(yīng)的數(shù)字量。在DS18B20完成溫度轉(zhuǎn)換后,其溫度值將與報警寄存器中的值相比較。在DS18B20中有兩個報警寄存器,TH為溫度上限值,TL溫度下限值,這兩個寄存器均為8位,所以在進(jìn)行溫度比較時,只取出溫度值的中間8位(D4~D11)進(jìn)行比較。如果溫度寄存器測量的結(jié)果低于TL或高于TH,則設(shè)置報警標(biāo)志,這個比較過程會在每次溫度測量和進(jìn)行。一旦報警標(biāo)志設(shè)置后,器件就會響應(yīng)系統(tǒng)主機(jī)發(fā)出的條件搜索命令(ECH)。這樣處理的好處是,可以使單總線上的所有器件同時測量溫度,如果有些點(diǎn)上的溫度超過了設(shè)定的閾值,則這些報警的器件就可以通過條件搜索的方式識別出來,而不需要一個一個器件去讀取。無論是溫度測量值還是報警閾值,都會存儲在DS18B20芯片內(nèi)的寄存器中。DS18B20的寄存器包括SRAM(暫存寄存器)和EEPROM(非易失寄存器)。EEPROM用于存放報警上限寄存器(TH)、報警下限寄存器(TL)和配置寄存器。如果在使用過程中,沒有使用報警功能,TH和TL可作為普通寄存器單元使用。溫度(℃)數(shù)字量輸出(二進(jìn)制數(shù)字量輸出(十六進(jìn)制)+125000001111101000007D0+8500000101010100000550+25.062500000001100100010191+10.125000000001010001000A2+0.500000000000010000008000000000000000000000-0.51111111111111000FFF8-10.1251111111101011110FF5E-25.06251111111001101111FE6F-551111110010010000FC90DS18B20部分?jǐn)?shù)字量輸出與溫度值之間的對應(yīng)關(guān)系TH和TL的格式D18B20存儲器結(jié)構(gòu)字節(jié)0和字節(jié)1是溫度數(shù)字量的低位字節(jié)和高位字節(jié),這兩個寄存器是只讀寄存器,在上電時的默認(rèn)值為0550H,即+85℃。字節(jié)2和字節(jié)3可用于存放報警閾值或用戶寄存器。字節(jié)4是配置寄存器,用于設(shè)置DS18B20溫度測量分辨率。配置寄存器中的D0~D4位在讀操作時總為1,在寫操作時可為任意值;D7在讀操作時總為0,在寫操作時可為任意值;D5和D6用于設(shè)置溫度測量分辨率。字節(jié)5、6、7保留未使用。字節(jié)8用于存放前8個字節(jié)的CRC校驗(yàn)值。配置寄存器格式R1R0分辨率(位)最長轉(zhuǎn)換時間(ms)00993.750110187.510113751112750溫度分辨率配置表DS18B20的功能命令包括兩類:溫度轉(zhuǎn)換和存儲命令。當(dāng)系統(tǒng)中DS18B20使用寄生電源供電時,由于“溫度轉(zhuǎn)換”和“復(fù)制SRAM”的操作都是發(fā)生在主機(jī)發(fā)命令之后,由DS18B20自主完成的,同時又需要較長的時間(“溫度轉(zhuǎn)換”的時間最長),所以通常在主機(jī)發(fā)出這些命令后,通過MOSFET將總線電壓強(qiáng)拉至高電平,以保證這些操作的順利完成。在“溫度轉(zhuǎn)換”時,需要根據(jù)溫度測量的分辨率選擇保持強(qiáng)上拉的時間;在“復(fù)制SRAM”時,需要至少保持10ms的強(qiáng)上拉,而且必須在主機(jī)發(fā)出命令的10μs的時間內(nèi)使用MOSFET進(jìn)行上拉。3.DS18B20的功能命令DS18B20的功能命令三、模擬1-Wire總線接口用單片機(jī)I/O口模擬1-wire總線通信,就是用單片機(jī)的任意一條I/O口線模擬1-wire總線,再配合上用C51編寫的與1-wire總線相關(guān)的函數(shù),實(shí)現(xiàn)單片機(jī)與1-wire總線器件通信。為了保證數(shù)據(jù)傳輸?shù)目煽啃裕诰帉懴嚓P(guān)函數(shù)時要遵循1-wire總線數(shù)據(jù)通信協(xié)議。1.初始化DS18B20初始化DS18B20的操作步驟如下:①先將數(shù)據(jù)線置高電平“1”。②短延時(該時間要求不是很嚴(yán)格,但是要盡可能短一點(diǎn))③數(shù)據(jù)線拉到底電平“0”。④延時750μs(該時間范圍可在480~960μs)。⑤數(shù)據(jù)線拉到高電平“1”。⑥延時等待。如果初始化成功,則在15μ~60μs內(nèi)產(chǎn)生一個由DS18B20返回的低電平“0”,表示存在1-wire總線器件。但是應(yīng)注意,不能無限地等待,否則會使程序進(jìn)入死循環(huán),所以要進(jìn)行超時判斷。⑦若CPU讀到數(shù)據(jù)線上的低電平“0”后,還要進(jìn)行延時,其延時的時間從發(fā)出高電平“1”計算(第③步的時間計算)最少要480μs。⑧將數(shù)據(jù)線再次拉到高電平“1”后結(jié)束。//**********************************************************************************
//μs級延時函數(shù)
//**********************************************************************************
voiddelay(uchartime)
{
uchari;
While(i<time)i++;
}//**********************************************************************************
//復(fù)位ds18B20
//**********************************************************************************
bitresetpulse(void)
{
ds=1;//數(shù)據(jù)線ds置高電平
delay(2); //短延時
ds=0;//拉低數(shù)據(jù)線
delay(92); //延時480~960us
ds=1;//拉高數(shù)據(jù)線
delay(5); //延時15~60us
return(ds); //返回ds采樣值
}初始化序列的程序//***********************************************************************************
//**功能:ds18b20初始化函數(shù)
//**參數(shù):無 //***********************************************************************************
voidds18b20_init(void)
{
while(1)
{
if(!resetpulse())//收到ds18b20的應(yīng)答信號
{
ds=1;
delay(40); //延時240~480us
break;
}
else
resetpulse(); //否則再發(fā)復(fù)位信號
}
}2.寫數(shù)據(jù)到DS18B20①數(shù)據(jù)線拉到底電平“0”。②延時15μs。③按從低位到高位的順序發(fā)送數(shù)據(jù)(一次只發(fā)送一位)。④延時45μs。⑤將數(shù)據(jù)線拉到高電平“1”。⑥重復(fù)①~⑤步驟,直到發(fā)送完一個字節(jié)。⑦最后將數(shù)據(jù)線拉到高電平“1”。//***********************************************************//寫一位函數(shù)//***********************************************************voidwrite_bit(uchartemp){ds=0;//拉低數(shù)據(jù)線_nop_();//延時_nop_();if(temp==1)//若發(fā)送的數(shù)據(jù)位為1,拉高數(shù)據(jù)線ds=1;delay(5);//延時ds=1;//拉高數(shù)據(jù)線}//***********************************************************//向DS18B20寫一個字節(jié)命令函數(shù)//***********************************************************voidwrite_byte(ucharval){uchari,temp;for(i=0;i<8;i++)//{temp=val>>i;//左移temp=temp&0x01;//得到數(shù)據(jù)位write_bit(temp);//寫數(shù)據(jù)位delay(5);//延時}}3.從DS18B20讀數(shù)據(jù)①將數(shù)據(jù)線拉到低電平“0”。②延時6μs。③將數(shù)據(jù)線拉到高電平“1”。④延時4μs。⑤讀數(shù)據(jù)線的狀態(tài),并進(jìn)行數(shù)據(jù)處理。⑥延時30μs。⑦重復(fù)①~⑤步驟,直到讀取完一個字節(jié)。//**************************************************************//讀一位函數(shù)//**************************************************************ucharread_bit(void){ds=0;//拉低數(shù)據(jù)線_nop_();//延時ds=1;//置數(shù)據(jù)線為高電平_nop_();//延時_nop_();return(ds);//返回采樣數(shù)據(jù)位}//*************************************************************************
//讀一個字節(jié)函數(shù)//*************************************************************************
ucharread_byte(void)
{
uchari,shift,temp;
shift=1;
temp=0;
for(i=0;i<8;i++)
{
if(read_bit())//讀取的數(shù)據(jù)位為1
{
temp=temp+(shift<<i);//該位置1
}
delay(1);//延時
_nop_();
_nop_();
}
return(temp);//返回讀取的字節(jié)數(shù)據(jù)
}任務(wù)實(shí)施1.制訂方案
數(shù)字式溫度傳感器DS18B20的溫度測量范圍是﹣55~﹢125℃,測量精度為±0.5℃,用DS18B20作為溫度測量傳感器可以滿足系統(tǒng)的要求。溫度測量值用四位一體LED數(shù)碼管顯示。2.電路設(shè)計
溫度測量元件DS18B20的數(shù)據(jù)線DQ連接單片機(jī)的P1.7引腳,上拉電阻的阻值選擇為為4.7kΩ。顯示器件采用四位一體LED共陽極數(shù)碼管,P0口作為段選口,連接四位一體LED共陽極數(shù)碼管的段選端a~dp;P2口作為位選口,四位一體LED共陽極數(shù)碼管的驅(qū)動電路由四個PNP三極管組成,由P2.0~P2.3控制。32333.程序設(shè)計數(shù)字式溫度傳感器DS18B20是一個1-wire總線器件,AT89C51單片機(jī)沒有1-wire總線接口,需要模擬一個1-wire總線接口,這也是數(shù)字溫度計程序設(shè)計的主要工作。數(shù)字溫度計程序設(shè)計的一個主要任務(wù)就是編寫DS18B20初始化函數(shù)、DS18B20寫數(shù)據(jù)操作函數(shù)、DS18B20讀數(shù)據(jù)操作函數(shù),在編寫上述函數(shù)時要遵循1-wire總線的初始化時序、寫時隙、讀時隙。數(shù)字溫度計程序設(shè)計的另一個主要任務(wù)是對DS18B20讀取的溫度值進(jìn)行處理,即當(dāng)測得的溫度大于0,只需將測得的16位二進(jìn)制溫度值的最高4位和最低4位屏蔽掉,組合成一個字節(jié)即可得到實(shí)際溫度值;如果所測得的溫度值小于0,需將測得的16位二進(jìn)制溫度值要先取反,再加1(DS18B20是以二進(jìn)制補(bǔ)碼的形式存放溫度值的),然后再組合成一個字節(jié)。當(dāng)然上述的溫度值處理是在不考慮所測得溫度值小數(shù)部分的精度前提下進(jìn)行的,如果考慮小數(shù)部分,則需要將測得的溫度值乘以0.0625才能得到實(shí)際的溫度值,這是因?yàn)镈S18B20的默認(rèn)分辨率為0.0625。3435#include<reg51.h>#include<absacc.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintsbitds=P1^7;//uinttempL=0;uinttempH=0;ucharcodedis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};// ucharleddis[4];//**********************************************************////DS18B20延時函數(shù)//**********************************************************//voiddelay(uchartime){ uchara=0; while(a<time)a++; }//**********************************************************//LED數(shù)碼管延時函數(shù)//**********************************************************voiddelay_smg(void){uinta;for(a=0;a<600;a++);}36//*********************************************************//復(fù)位DS18B20//*********************************************************bitresetpulse(void){ ds=1; //置DS18B20數(shù)據(jù)線為高電平
delay(2);//短延時
ds=0;//拉低數(shù)據(jù)線
delay(85); //低電平延時480~960us ds=1;//置DS18B20數(shù)據(jù)線為高電平
delay(4); //高電平延時50~100us return(ds); //返回DS18B20復(fù)位狀態(tài) }//************************************************************//DS18B20初始化 //*************************************************************voidds18b20_init(void){while(1){if(!resetpulse())
//收到DS18B20的應(yīng)答信號{ ds=1;
//置DS18B20數(shù)據(jù)線為高電平
delay(40);
//延時240~480us break; //退出while循環(huán) }elseresetpulse();//否則再發(fā)復(fù)位信號
}}37//********************************////溫度值顯示函數(shù)//********************************//voiddisplay(void){ P0=leddis[0];// P2=0xfe; delay_smg();P2=0xff; P0=leddis[1];// P2=0xfd; delay_smg(); P2=0xff; P0=leddis[2];// P2=0xfb; delay_smg(); P2=0xff; P0=leddis[3];// P2=0xf7; delay_smg(); P2=0xff;}//******************************//讀一位函數(shù)//******************************ucharread_bit(void){ds=0;//拉低數(shù)據(jù)線
_nop_();//延時
ds=1;//置數(shù)據(jù)線為高電平
_nop_();//延時
_nop_();//return(ds);
//返回采樣數(shù)據(jù)位}38//********************************************************//讀一個字節(jié)函數(shù)//********************************************************ucharread_byte(void){uchari,shift,temp;shift=1;temp=0;for(i=0;i<8;i++){if(read_bit())//讀取的數(shù)據(jù)位為1{temp=temp+(shift<<i);//該位置1}delay(5);//延時
_nop_();//_nop_();;}return(temp);//返回讀取的字節(jié)數(shù)據(jù)}//*********************************************************//寫一位函數(shù)//*********************************************************voidwrite_bit(uchartemp){ds=0;//拉低數(shù)據(jù)線
if(temp==1)//若發(fā)送的數(shù)據(jù)位為1,拉高數(shù)據(jù)線
ds=1;//置數(shù)據(jù)線為高電平
delay(5);//延時
ds=1;//置數(shù)據(jù)線為高電平}39//***********************************************////從DS18B20讀取溫度值//**********************************************//Read_Temperature(void){uchartemp;ds18b20_init(); //DS18B20初始化
write_byte(0xcc);//跳過讀序列號操作
write_byte(0x44);//啟動溫度轉(zhuǎn)換
delay(125);ds18b20_init(); //write_byte(0xcc);//跳過讀序列號操作
write_byte(0xbe);//讀取溫度值
tempL=read_byte();//讀取溫度值低8位
tempH=read_byte();//讀取溫度值高8位
if((tempH&0xf0)==0xf0){tempL=~tempL;//if(tempL==0xff){tempL=tempL+0x01;tempH=~tempH;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度簽約主播虛擬偶像形象授權(quán)及運(yùn)營合作協(xié)議
- 2025年度智能設(shè)備擔(dān)保合同解除與售后服務(wù)保障協(xié)議
- 二零二五年度環(huán)保技術(shù)研發(fā)合同履行技術(shù)創(chuàng)新個原則協(xié)議
- 二零二五年度農(nóng)村土地爭議調(diào)解與生態(tài)補(bǔ)償合同
- 二零二五年度音樂節(jié)品牌贊助合同
- 二零二五年度企業(yè)總部安全保衛(wèi)保安聘用協(xié)議
- 二零二五年度摩托車整車出口代理轉(zhuǎn)讓協(xié)議
- 二零二五年度磚廠土地承包及開發(fā)合同
- 2025年度獵聘人才委托招聘與人才激勵服務(wù)合同
- 2025年度生物制藥原材料采購合同(含GMP認(rèn)證)
- 河南省地圖含市縣地圖矢量分層地圖行政區(qū)劃市縣概況ppt模板
- 動畫基礎(chǔ)知識ppt(完整版)課件
- 中國音樂史PPT講稿課件
- 橋梁模板施工方案最終版
- 雅思大作文資料_十大類題材_解析詳細(xì)_應(yīng)有盡有(最好全部打印后看_非常全)
- 部編版小學(xué)六年級書法教案【16課時】電子稿
- 廣元九州施工合同正式
- 蘭州商學(xué)院二級學(xué)院權(quán)力運(yùn)行流程圖
- 三毛流浪記連環(huán)畫全集-漫畫
- 預(yù)埋件計算公式
- 鋼結(jié)構(gòu)廠房水電安裝施工組織設(shè)計方案
評論
0/150
提交評論