国产精品久久久久久亚洲影视,插我舔内射18免费视频,国产+精品+在线观看,国产精品18久久久久久麻辣,丰满少妇69激情啪啪无

0 賣盤信息
BOM詢價
您現(xiàn)在的位置: 首頁 > 技術(shù)方案 >工業(yè)控制 > 基于DS18B20數(shù)字溫度傳感器和AT89C2051+CD4069實現(xiàn)溫度顯示電路設(shè)計方案

基于DS18B20數(shù)字溫度傳感器和AT89C2051+CD4069實現(xiàn)溫度顯示電路設(shè)計方案

來源: elecfans
2021-11-17
類別:工業(yè)控制
eye 75
文章創(chuàng)建人 拍明

原標(biāo)題:基于DS18B20和89C2051實現(xiàn)溫度顯示電路設(shè)計方案

基于DS18B20、AT89C2051與CD4069的數(shù)字溫度顯示電路設(shè)計方案


在本設(shè)計方案中,我們將深入探討如何構(gòu)建一個基于DS18B20數(shù)字溫度傳感器、AT89C2051單片機(jī)和CD4069非門集成電路的數(shù)字溫度顯示系統(tǒng)。該系統(tǒng)旨在實現(xiàn)精確的溫度測量和直觀的數(shù)字顯示,廣泛適用于各種需要實時溫度監(jiān)測的場合,如環(huán)境監(jiān)測、智能家居、工業(yè)控制等。我們將詳細(xì)闡述各個核心元器件的選擇理由、功能特性、在電路中的作用以及具體的電路設(shè)計考量,確保系統(tǒng)穩(wěn)定可靠、性能優(yōu)越。

image.png


一、 系統(tǒng)概述與設(shè)計目標(biāo)


本數(shù)字溫度顯示系統(tǒng)的核心目標(biāo)是利用DS18B20傳感器獲取環(huán)境溫度數(shù)據(jù),通過AT89C2051單片機(jī)對數(shù)據(jù)進(jìn)行處理,并最終通過數(shù)碼管(或其他顯示模塊)直觀地顯示出來。為了優(yōu)化系統(tǒng)性能,我們引入CD4069作為輔助元器件,以滿足特定的電平轉(zhuǎn)換或信號驅(qū)動需求。整個系統(tǒng)設(shè)計將著重于功耗優(yōu)化、測量精度、顯示穩(wěn)定性以及成本效益。

核心設(shè)計目標(biāo)包括:

  1. 精確的溫度測量: 實現(xiàn)$ pm 0.5^circ C (-10^circ C$ 至 $+85^circ C$范圍內(nèi))的測量精度。

  2. 實時溫度顯示: 能夠?qū)崟r更新并顯示當(dāng)前溫度值。

  3. 寬溫度測量范圍: 覆蓋$-55^circ C$ 至 $+125^circ C$的溫度范圍。

  4. 低功耗設(shè)計: 盡可能降低系統(tǒng)功耗,延長電池供電時的續(xù)航時間。

  5. 穩(wěn)定性與可靠性: 確保系統(tǒng)在各種環(huán)境下穩(wěn)定運(yùn)行,抗干擾能力強(qiáng)。

  6. 成本效益: 選用高性價比的元器件,降低整體制造成本。


二、 核心元器件選型與分析



2.1 數(shù)字溫度傳感器:DS18B20


型號選擇: DS18B20(TO-92封裝或防水封裝)

選擇理由: DS18B20是美國DALLAS半導(dǎo)體公司生產(chǎn)的一款單總線數(shù)字溫度傳感器,具有以下顯著優(yōu)點(diǎn),使其成為本設(shè)計的首選:

  • 單總線接口: 僅需一根信號線即可與單片機(jī)通信,大大簡化了硬件連接,節(jié)省了單片機(jī)的I/O口資源。這對于I/O資源有限的AT89C2051(僅有15個可編程I/O引腳)尤為重要。

  • 寬溫度測量范圍: 能在$-55^circ C$ 至 $+125^circ C$的范圍內(nèi)進(jìn)行測量,并且在$-10^circ C$ 至 $+85^circ C$范圍內(nèi)精度為$ pm 0.5^circ C $。這種寬范圍和高精度滿足了絕大多數(shù)應(yīng)用場景的需求。

  • 數(shù)字輸出: 直接輸出數(shù)字信號,無需A/D轉(zhuǎn)換電路,避免了模擬信號傳輸中的噪聲干擾和精度損失,簡化了電路設(shè)計。

  • 獨(dú)特ID號: 每個DS18B20都有一個全球唯一的64位序列號,允許多個DS18B20傳感器并聯(lián)在同一條總線上,實現(xiàn)分布式測溫。雖然本設(shè)計初期可能只使用一個,但這一特性為未來的擴(kuò)展提供了便利。

  • 寄生電源模式: 在某些應(yīng)用中,DS18B20可以在沒有獨(dú)立電源引腳的情況下工作,通過數(shù)據(jù)線寄生供電,進(jìn)一步簡化了布線。雖然我們推薦使用外部供電以提高穩(wěn)定性,但此功能在極端情況下提供了靈活性。

  • 可編程分辨率: 用戶可以根據(jù)需求配置9位、10位、11位或12位的溫度轉(zhuǎn)換分辨率,最高可達(dá)$0.0625^circ C$,兼顧了測量速度和精度。

功能: DS18B20內(nèi)部集成了溫度傳感器、A/D轉(zhuǎn)換器、存儲器和單總線接口電路。它能夠?qū)⒏袦y到的溫度轉(zhuǎn)換為對應(yīng)的數(shù)字量,并通過單總線協(xié)議與主控制器(如AT89C2051)進(jìn)行通信,發(fā)送溫度數(shù)據(jù)。其內(nèi)部的ROM存儲器用于存儲唯一的64位序列號,而RAM則用于存儲配置寄存器和溫度寄存器。

在電路中的作用: 作為系統(tǒng)的核心傳感器,負(fù)責(zé)實時采集環(huán)境溫度數(shù)據(jù),并將數(shù)字化的溫度值傳輸給單片機(jī)。它直接決定了系統(tǒng)溫度測量的準(zhǔn)確性和范圍。


2.2 微控制器:AT89C2051


型號選擇: AT89C2051

選擇理由: AT89C2051是ATMEL公司生產(chǎn)的一款高性能、低功耗的CMOS 8位微控制器,兼容標(biāo)準(zhǔn)MCS-51指令集,具有以下特點(diǎn),非常適合作為本溫度顯示系統(tǒng)的核心控制器:

  • 小巧的封裝: 采用20引腳PDIP、SOIC等封裝,體積小巧,便于電路板布線和集成。這對于空間受限的應(yīng)用非常有利。

  • 低功耗: CMOS工藝保證了較低的功耗,符合我們對低功耗設(shè)計的要求,尤其是在電池供電場景下。

  • 內(nèi)置Flash存儲器: 2KB的Flash程序存儲器足以存儲本溫度顯示系統(tǒng)的固件程序,無需外部EEPROM或Flash,降低了成本和復(fù)雜性。

  • 豐富的外設(shè): 盡管引腳較少,但AT89C2051仍提供了兩個16位定時器/計數(shù)器、一個全雙工UART串行口(雖然本設(shè)計可能不直接使用,但為擴(kuò)展留有余地)、中斷控制器等,能夠滿足溫度數(shù)據(jù)采集、處理和顯示所需的功能。

  • 兼容MCS-51指令集: 廣泛的開發(fā)工具和豐富的開發(fā)資源,易于學(xué)習(xí)和編程。對于熟悉51系列單片機(jī)的工程師來說,可以快速上手。

  • 高性價比: 相對于功能更強(qiáng)大的單片機(jī),AT89C2051價格更低廉,有助于控制整體項目成本。

功能: AT89C2051是整個系統(tǒng)的“大腦”,負(fù)責(zé):

  • DS18B20通信控制: 發(fā)送命令給DS18B20,讀取其返回的溫度數(shù)據(jù)。這涉及到單總線協(xié)議的時序控制。

  • 數(shù)據(jù)處理: 對從DS18B20讀取的原始溫度數(shù)據(jù)進(jìn)行解析、轉(zhuǎn)換(例如,將補(bǔ)碼形式的溫度值轉(zhuǎn)換為直觀的十進(jìn)制溫度值),并根據(jù)需要進(jìn)行單位轉(zhuǎn)換(攝氏度/華氏度)。

  • 顯示控制: 驅(qū)動數(shù)碼管或其他顯示模塊,將處理后的溫度值以數(shù)字形式顯示出來。這通常涉及到數(shù)碼管的段碼轉(zhuǎn)換和位選控制。

  • 系統(tǒng)管理: 處理各種中斷(如定時器中斷用于定時刷新顯示或觸發(fā)溫度轉(zhuǎn)換),協(xié)調(diào)各個模塊的工作。

在電路中的作用: 作為核心控制器,負(fù)責(zé)管理和協(xié)調(diào)整個系統(tǒng)的數(shù)據(jù)流和功能執(zhí)行。它從DS18B20獲取數(shù)據(jù),處理數(shù)據(jù),并將處理結(jié)果發(fā)送到顯示單元。


2.3 CMOS非門集成電路:CD4069


型號選擇: CD4069UB(或CD4069BC等)

選擇理由: CD4069是一款CMOS六非門集成電路。雖然在許多簡單的DS18B20應(yīng)用中可能不需要額外的非門芯片,但在某些特定情況下,它能發(fā)揮關(guān)鍵作用,優(yōu)化電路性能:

  • 信號反相: 提供6個獨(dú)立的非門單元,可以用于信號反相。在某些電平轉(zhuǎn)換或邏輯控制場景下,可能需要將某個信號進(jìn)行反相處理以滿足后續(xù)器件的輸入要求。

  • 緩沖/驅(qū)動能力增強(qiáng): 盡管其驅(qū)動能力有限,但作為CMOS器件,它在一定程度上可以提供信號緩沖,改善信號的波形,或者在驅(qū)動能力不足時進(jìn)行輕微的電流放大。例如,如果單片機(jī)某個I/O口直接驅(qū)動DS18B20的信號線時,在高頻或長線傳輸下可能出現(xiàn)信號衰減或波形失真,CD4069可以用于整形或增強(qiáng)驅(qū)動能力。

  • 電平轉(zhuǎn)換(特定場景): 在DS18B20與AT89C2051的電平兼容性不是問題(兩者通常都工作在5V或3.3V)的情況下,CD4069可能不是必需的。但如果系統(tǒng)中有其他模塊需要不同電平的信號,或者需要將DS18B20的單總線信號進(jìn)行隔離或整形以提高抗干擾能力,CD4069可以提供額外的邏輯層。例如,在多傳感器或復(fù)雜總線環(huán)境中,可能會用非門構(gòu)建一些簡單的邏輯門,增強(qiáng)信號的可靠性。

  • 提高抗干擾能力: 通過對信號進(jìn)行整形或反相,有時可以提高系統(tǒng)對噪聲的抵抗能力。例如,如果單總線信號受到干擾,通過非門整形可以恢復(fù)其清晰的方波形狀。

功能: CD4069內(nèi)部包含六個獨(dú)立的CMOS非門電路。每個非門都有一個輸入和一個輸出,輸出狀態(tài)始終與輸入狀態(tài)相反。其主要功能是進(jìn)行邏輯反相。

在電路中的作用: 在本設(shè)計中,CD4069可能用于以下場景:

  • DS18B20單總線信號整形: 雖然DS18B20和AT89C2051可以直接通信,但在某些對信號完整性要求較高的場合,或者當(dāng)數(shù)據(jù)線較長時,一個非門可以用于對單總線信號進(jìn)行整形,提高信號質(zhì)量和抗干擾能力。例如,在單片機(jī)與DS18B20之間串聯(lián)一個非門,將單片機(jī)輸出信號反相后再送入DS18B20,或者對DS18B20回傳信號進(jìn)行反相整形。

  • LED數(shù)碼管驅(qū)動信號的邏輯反相: 如果選擇的是共陰極數(shù)碼管,且單片機(jī)的輸出是高電平點(diǎn)亮,某些驅(qū)動策略下可能需要將單片機(jī)的輸出信號反相。

  • 輔助邏輯控制: 在未來系統(tǒng)擴(kuò)展時,CD4069可以用于構(gòu)建一些簡單的組合邏輯電路,以滿足特定的控制需求。


2.4 顯示模塊:LED數(shù)碼管


型號選擇: 兩位或三位共陰極(或共陽極)LED數(shù)碼管(例如,F(xiàn)5621AH/BH或類似的)

選擇理由:

  • 直觀顯示: 數(shù)碼管是最常見且直觀的數(shù)字顯示方式,尤其適合顯示溫度值。

  • 高亮度: 在各種光照條件下都能清晰顯示。

  • 結(jié)構(gòu)簡單: 易于驅(qū)動和控制,成本低廉。

  • 功耗相對可控: 通過動態(tài)掃描方式可以有效降低整體功耗。

功能: 由7段(加小數(shù)點(diǎn)共8段)LED組成,通過控制不同LED段的點(diǎn)亮或熄滅來顯示0-9的數(shù)字。共陰極數(shù)碼管的公共端接低電平,通過高電平點(diǎn)亮對應(yīng)段;共陽極數(shù)碼管的公共端接高電平,通過低電平點(diǎn)亮對應(yīng)段。

在電路中的作用: 將AT89C2051處理后的溫度數(shù)值以可視化的形式呈現(xiàn)給用戶。


2.5 其他輔助元器件


  • 電源模塊: 5V穩(wěn)壓電源,如AMS1117-5.0穩(wěn)壓芯片配合電解電容和陶瓷電容。提供穩(wěn)定的工作電壓。

  • 晶振與復(fù)位電路: 11.0592MHz晶振和兩個22pF電容用于AT89C2051的時鐘振蕩;RC復(fù)位電路(10uF電容和10kΩ電阻)用于單片機(jī)上電復(fù)位。這些是單片機(jī)正常工作的必需品。

  • 上拉電阻: 4.7kΩ ~ 10kΩ上拉電阻用于DS18B20的DQ線,因為DS18B20的DQ線是開漏輸出。這是單總線通信的必要條件。

  • 限流電阻: 數(shù)碼管每個LED段的串聯(lián)限流電阻(通常為200Ω-1kΩ,具體值根據(jù)數(shù)碼管亮度需求和電源電壓決定),用于保護(hù)LED和控制亮度。

  • 排針/接線端子: 用于外部連接,方便調(diào)試和使用。

  • PCB板: 承載所有元器件,提供電氣連接。


三、 電路原理設(shè)計


3.1 總體架構(gòu)


整個數(shù)字溫度顯示系統(tǒng)由以下幾個主要模塊組成:

  1. 電源模塊: 提供穩(wěn)定的5V直流電源給單片機(jī)和DS18B20。

  2. 微控制器模塊: 以AT89C2051為核心,負(fù)責(zé)數(shù)據(jù)采集、處理和顯示控制。

  3. 溫度傳感器模塊: DS18B20負(fù)責(zé)溫度測量,并通過單總線與單片機(jī)通信。

  4. 顯示模塊: 數(shù)碼管負(fù)責(zé)顯示溫度值,由單片機(jī)驅(qū)動。

  5. 輔助邏輯模塊(可選): CD4069根據(jù)需要進(jìn)行信號整形或邏輯處理。

                        +-----------------+
                        |   Power Supply  |
                        |     (5V DC)     |
                        +--------+--------+
                                 |
                                 | VCC, GND
        +-----------------+------+-----------------+
        |                 |      |                 |
        |   DS18B20       |      |    AT89C2051    |
        | (Temperature    |      | (Microcontroller)|
        |   Sensor)       +-------> DQ (P3.7)     |
        |                 |      |                 |
        +-----------------+      +--------+--------+
                                          |
                                          |
        +-----------------+               | (P1.0-P1.7, P3.0-P3.2)
        |                 |               |
        |    CD4069       |               |
        |  (Optional      |               |
        |   Logic Gate)   +<-- (Optional) --+
        |                 |               |
        +-----------------+               |
                                          |
                                          |
        +-----------------+               |
        |                 |<--------------+
        |    LED Digital  |
        |    Display      |
        | (e.g., 2-digit) |
        +-----------------+


3.2 DS18B20與AT89C2051的連接


DS18B20采用單總線通信協(xié)議,其DQ引腳需要連接到AT89C2051的一個通用I/O口(例如P3.7),并外接一個4.7kΩ的上拉電阻到VCC。這是由于DS18B20的DQ引腳是開漏輸出,需要外部上拉電阻才能將線纜拉高。

  • DS18B20 VCC: 連接到5V電源。

  • DS18B20 GND: 連接到地。

  • DS18B20 DQ: 連接到AT89C2051的P3.7(或其他可用I/O口),并串聯(lián)一個4.7kΩ上拉電阻到VCC。

為什么選擇P3.7? AT89C2051的P3口引腳具有第二功能,P3.7通常是/RD(外部數(shù)據(jù)存儲器讀選通),但作為普通I/O口使用時完全沒有問題。選擇它僅是一個示例,任何可用的通用I/O口均可。


3.3 AT89C2051的最小系統(tǒng)


AT89C2051要正常工作,需要搭建一個最小系統(tǒng),包括:

  • 電源: VCC接5V,GND接地。

  • 晶振電路: XTAL1和XTAL2引腳外接一個11.0592MHz的石英晶體振蕩器,兩端各并聯(lián)一個22pF的瓷片電容到地。選擇11.0592MHz是為了方便進(jìn)行串口通信(如果需要),因為這個頻率可以精確地產(chǎn)生標(biāo)準(zhǔn)的波特率。

  • 復(fù)位電路: RST引腳通過一個10uF的電解電容和10kΩ的電阻連接到VCC和GND。當(dāng)電源上電時,電容充電過程會使RST引腳保持高電平一段時間,從而完成復(fù)位操作。


3.4 數(shù)碼管顯示電路


數(shù)碼管的驅(qū)動通常采用動態(tài)掃描方式,以節(jié)省單片機(jī)的I/O口資源并降低功耗。假設(shè)我們使用兩位或三位共陰極數(shù)碼管:

  • 段碼線: 數(shù)碼管的a, b, c, d, e, f, g, dp段碼引腳通過限流電阻(約330Ω)連接到AT89C2051的P1口(例如P1.0-P1.7,共8位)。這些引腳用于控制數(shù)碼管的顯示內(nèi)容。

  • 位選線: 數(shù)碼管的公共端(COM1, COM2, COM3)連接到NPN三極管的基極(通過一個限流電阻),三極管的集電極連接到數(shù)碼管的公共端,發(fā)射極接地。AT89C2051的P3口(例如P3.0, P3.1, P3.2)通過低電平信號控制三極管的導(dǎo)通,從而選擇點(diǎn)亮哪個數(shù)碼管。

為何使用三極管驅(qū)動? 單片機(jī)I/O口的驅(qū)動能力有限,無法直接驅(qū)動數(shù)碼管的所有LED段,尤其是動態(tài)掃描時,瞬時電流可能較大。三極管作為開關(guān),可以提供更大的電流驅(qū)動能力,確保數(shù)碼管段碼的亮度一致性和穩(wěn)定性。


3.5 CD4069在電路中的應(yīng)用(可選但推薦)


如果需要對DS18B20的單總線信號進(jìn)行整形,或者在某些特殊邏輯控制場景下:

  • 單總線信號整形: 將DS18B20的DQ線首先通過CD4069的一個非門輸入,非門的輸出再連接到AT89C2051的P3.7。這樣可以確保進(jìn)入單片機(jī)的信號波形更標(biāo)準(zhǔn)。注意,由于單總線是雙向的,這種接法需要謹(jǐn)慎,更常見的是在某些單向的邏輯控制上使用。對于DS18B20的單總線,通常直接連接單片機(jī)并加上拉電阻即可滿足要求。CD4069更多是在需要邏輯反轉(zhuǎn)或者對信號進(jìn)行一定程度的隔離時考慮。

  • 信號電平轉(zhuǎn)換(如果DS18B20或AT89C2051的工作電壓不同): 如果AT89C2051工作在3.3V,而DS18B20工作在5V,或者反之,CD4069可以用于簡單的電平轉(zhuǎn)換。但通常DS18B20和51系列單片機(jī)都是5V兼容的。

  • 數(shù)碼管位選反相: 如果選擇的是共陽極數(shù)碼管,且單片機(jī)需要高電平來關(guān)閉(即低電平有效)位選,而你希望用高電平信號來選擇數(shù)碼管,那么可以通過CD4069將單片機(jī)的位選信號反相。

注意: 對于DS18B20和AT89C2051的標(biāo)準(zhǔn)連接,CD4069并非必需。但在追求更高穩(wěn)定性和抗干擾能力的工業(yè)應(yīng)用中,或者當(dāng)系統(tǒng)中存在復(fù)雜信號鏈時,考慮使用CD4069進(jìn)行信號整形或邏輯處理是明智之舉。


四、 軟件設(shè)計


軟件是整個系統(tǒng)的靈魂,負(fù)責(zé)實現(xiàn)數(shù)據(jù)的采集、處理和顯示邏輯?;贏T89C2051的C語言編程是主流。


4.1 主程序流程


  1. 系統(tǒng)初始化:

    • 配置單片機(jī)I/O口方向。

    • 初始化定時器(用于延時或定時刷新)。

    • 初始化DS18B20(復(fù)位、跳過ROM、配置分辨率等)。

  2. 循環(huán)主程序:

    • 發(fā)送溫度轉(zhuǎn)換命令給DS18B20。

    • 等待溫度轉(zhuǎn)換完成(通過查詢或延時)。

    • 從DS18B20讀取溫度數(shù)據(jù)。

    • 對讀取的原始數(shù)據(jù)進(jìn)行處理(解析補(bǔ)碼、轉(zhuǎn)換單位等)。

    • 將處理后的溫度值轉(zhuǎn)換為數(shù)碼管顯示所需的段碼和位碼。

    • 通過動態(tài)掃描方式刷新數(shù)碼管顯示。

    • 延時一段時間,然后重復(fù)上述過程。


4.2 DS18B20通信協(xié)議實現(xiàn)


DS18B20的單總線通信包括:

  1. 初始化: 主機(jī)發(fā)送復(fù)位脈沖,DS18B20響應(yīng)存在脈沖。

  2. ROM操作命令: 跳過ROM(0xCC)、讀取ROM(0x33)、匹配ROM(0x55)等。通常使用跳過ROM來簡化單個傳感器的操作。

  3. 功能命令: 溫度轉(zhuǎn)換命令(0x44)、讀取暫存器(0xBE)、寫入暫存器(0x4E)等。

關(guān)鍵函數(shù):

  • Ds18b20_Init(): DS18B20初始化函數(shù),發(fā)送復(fù)位脈沖并檢測存在脈沖。

  • Ds18b20_WriteByte(unsigned char dat): 向DS18B20寫入一個字節(jié)。

  • Ds18b20_ReadByte(): 從DS18B20讀取一個字節(jié)。

  • Ds18b20_StartConvert(): 發(fā)送溫度轉(zhuǎn)換命令。

  • Ds18b20_ReadTemp(): 讀取溫度寄存器并返回溫度值。


4.3 溫度數(shù)據(jù)處理


DS18B20返回的溫度數(shù)據(jù)是16位的補(bǔ)碼形式。需要將其轉(zhuǎn)換為有符號的十進(jìn)制溫度值。例如,如果分辨率設(shè)置為12位,則每位代表$0.0625^circ C$。

  • 正溫度: 直接將16位數(shù)據(jù)乘以$0.0625^circ C$。

  • 負(fù)溫度: 先取反加1(即求補(bǔ)碼),然后轉(zhuǎn)換為正數(shù)再乘以$0.0625^circ C$,最后加上負(fù)號。

示例代碼片段(C語言):

#include <reg2051.h> // 根據(jù)實際單片機(jī)型號調(diào)整頭文件
#include <intrins.h> // 用于_nop_()函數(shù)

// DS18B20引腳定義
sbit DQ = P3^7; // DQ連接到P3.7

// 全局變量
int temperature_value; // 存儲溫度整數(shù)部分
unsigned char decimal_part; // 存儲溫度小數(shù)部分(例如,取一位或兩位小數(shù))

// --- DS18B20驅(qū)動函數(shù)(部分示例,需完善) ---
void DelayUs(unsigned int us) // 微秒級延時
{
   while(us--);
}

void Ds18b20_Rst() // 復(fù)位DS18B20
{
   DQ = 0; DelayUs(600); // 拉低480us以上
   DQ = 1; DelayUs(90);  // 拉高等待響應(yīng)90us
   // 檢測DS18B20的響應(yīng)脈沖(通常為低電平60-240us)
   while(DQ); // 等待DQ變?yōu)榈碗娖?br/>    while(!DQ); // 等待DQ變?yōu)楦唠娖?br/>}

void Ds18b20_WriteBit(unsigned char bit_val) // 寫一位數(shù)據(jù)
{
   if(bit_val)
   {
       DQ = 0; DelayUs(5); // 拉低1-15us
       DQ = 1; DelayUs(60); // 拉高60us以上
   }
   else
   {
       DQ = 0; DelayUs(60); // 拉低60us以上
       DQ = 1; DelayUs(5); // 拉高1-15us
   }
}

unsigned char Ds18b20_ReadBit() // 讀一位數(shù)據(jù)
{
   unsigned char bit_val;
   DQ = 0; DelayUs(5); // 拉低1-15us
   DQ = 1; DelayUs(10); // 拉高等待數(shù)據(jù)
   bit_val = DQ;
   DelayUs(50); // 恢復(fù)時間
   return bit_val;
}

void Ds18b20_WriteByte(unsigned char dat) // 寫一個字節(jié)
{
   unsigned char i;
   for(i=0; i<8; i++)
   {
       Ds18b20_WriteBit(dat & 0x01);
       dat >>= 1;
   }
}

unsigned char Ds18b20_ReadByte() // 讀一個字節(jié)
{
   unsigned char i;
   unsigned char dat = 0;
   for(i=0; i<8; i++)
   {
       dat >>= 1;
       if(Ds18b20_ReadBit())
       {
           dat |= 0x80;
       }
   }
   return dat;
}

int GetTemperature() // 獲取溫度值
{
   unsigned char TL, TH;
   int temp;

   Ds18b20_Rst();
   Ds18b20_WriteByte(0xCC); // Skip ROM
   Ds18b20_WriteByte(0x44); // Convert T

   Ds18b20_Rst();
   Ds18b20_WriteByte(0xCC); // Skip ROM
   Ds18b20_WriteByte(0xBE); // Read Scratchpad

   TL = Ds18b20_ReadByte(); // 讀取溫度低字節(jié)
   TH = Ds18b20_ReadByte(); // 讀取溫度高字節(jié)

   temp = (TH << 8) | TL; // 合并為16位數(shù)據(jù)

   // 假設(shè)12位分辨率,需要將temp乘以0.0625
   // 為了避免浮點(diǎn)運(yùn)算,可以先乘以1000或100,再進(jìn)行整數(shù)運(yùn)算
   // 例如,將溫度值放大10倍,顯示一位小數(shù)
   if (temp & 0xF800) // 負(fù)溫度判斷,最高5位為1表示負(fù)數(shù)
   {
       temp = ~temp + 1; // 取補(bǔ)碼
       temperature_value = - (temp * 625 / 10000); // 假設(shè)乘以10000再除以10000,取整數(shù)部分
       decimal_part = (temp * 625 / 1000) % 10; // 取小數(shù)第一位
   }
   else // 正溫度
   {
       temperature_value = temp * 625 / 10000;
       decimal_part = (temp * 625 / 1000) % 10;
   }
   return temperature_value; // 返回整數(shù)部分溫度,小數(shù)部分在decimal_part中
}

// --- 數(shù)碼管顯示函數(shù)(部分示例,需完善) ---
unsigned char code SegmentCode[] = { // 共陰極數(shù)碼管0-9和負(fù)號的段碼
   0x3F, // 0
   0x06, // 1
   0x5B, // 2
   0x4F, // 3
   0x66, // 4
   0x6D, // 5
   0x7D, // 6
   0x07, // 7
   0x7F, // 8
   0x6F, // 9
   0x40  // -
};

sbit SEG_A = P1^0; // 對應(yīng)a段
// ...其他段碼線連接P1口

sbit COM1 = P3^0; // 位選1
sbit COM2 = P3^1; // 位選2
// ...其他位選線連接P3口

void Display(int temp_int, unsigned char temp_dec)
{
   // 例如顯示XX.Y
   unsigned char hundreds, tens, units;
   unsigned char sign_display = 0; // 0 for positive, 1 for negative

   if (temp_int < 0) {
       sign_display = 1;
       temp_int = -temp_int; // 取絕對值
   }

   hundreds = temp_int / 100;
   tens = (temp_int / 10) % 10;
   units = temp_int % 10;

   // 動態(tài)掃描顯示
   // 顯示十位(或負(fù)號)
   COM1 = 1; COM2 = 0; // 選中十位
   if (sign_display) {
       P1 = SegmentCode[10]; // 顯示負(fù)號
   } else {
       P1 = SegmentCode[tens];
   }
   DelayUs(5000); // 延時一小段時間,保持顯示
   COM1 = 0; // 關(guān)閉十位

   // 顯示個位
   COM1 = 0; COM2 = 1; // 選中個位
   P1 = SegmentCode[units] | 0x80; // 顯示個位并點(diǎn)亮小數(shù)點(diǎn)
   DelayUs(5000);
   COM2 = 0; // 關(guān)閉個位

   // 如果是三位顯示,需要再增加一位顯示小數(shù)
   // Display decimal part if needed
   // ...
}

void main()
{
   // 初始化
   // ...
   // Timer0 init for refresh or other tasks
   // ...

   while(1)
   {
       GetTemperature(); // 獲取溫度值
       Display(temperature_value, decimal_part); // 顯示溫度值
       // 可以加入適當(dāng)?shù)难訒r來控制刷新頻率
       // _nop_(); // 或者使用定時器中斷來觸發(fā)顯示刷新和溫度采集
   }
}


4.4 顯示驅(qū)動邏輯


使用動態(tài)掃描方式驅(qū)動數(shù)碼管。通過定時器中斷或主循環(huán)延時,快速輪流點(diǎn)亮各個數(shù)碼管的位選,并同步送出對應(yīng)的段碼。由于人眼的視覺暫留效應(yīng),會感覺所有數(shù)碼管都在同時亮著。

  • 段碼生成: 將0-9以及負(fù)號的段碼預(yù)存在數(shù)組中,根據(jù)溫度值直接查表獲取。

  • 位選控制: 通過AT89C2051的I/O口控制三極管的通斷,從而選擇點(diǎn)亮哪個數(shù)碼管。


五、 PCB布局與布線建議


良好的PCB布局和布線對于系統(tǒng)穩(wěn)定性和抗干擾能力至關(guān)重要。

  1. 電源去耦: 在AT89C2051的VCC和GND引腳附近放置一個104(0.1uF)的陶瓷電容,以及一個10uF的電解電容,用于濾除高頻噪聲,提供穩(wěn)定的電源。DS18B20的電源引腳附近也應(yīng)放置小容量陶瓷電容。

  2. 晶振布局: 晶振和兩個22pF電容應(yīng)盡量靠近AT89C2051的XTAL1和XTAL2引腳,且布線盡量短而直,避免交叉走線,防止干擾。

  3. 單總線布線: DS18B20的DQ線應(yīng)盡量短且遠(yuǎn)離干擾源。如果線長,可以考慮屏蔽線。4.7kΩ上拉電阻應(yīng)靠近DQ線。

  4. 數(shù)碼管驅(qū)動: 數(shù)碼管的段碼線和位選線應(yīng)避免過長,并且盡可能等長,減少信號傳輸差異。限流電阻應(yīng)靠近數(shù)碼管。

  5. 地線設(shè)計: 采用星形接地或大面積鋪地,確保地線阻抗最小,減少地線噪聲。數(shù)字地和模擬地(如果存在)應(yīng)區(qū)分,并通過單點(diǎn)連接。

  6. 布局: 將功能相關(guān)的元器件放置在一起,例如電源模塊、單片機(jī)模塊、傳感器模塊和顯示模塊。遵循“由小到大、由近及遠(yuǎn)”的原則。

  7. 焊接: 確保焊接牢固,無虛焊、短路。


六、 調(diào)試與測試



6.1 硬件調(diào)試


  1. 電源測試: 檢查各芯片的供電電壓是否正常。

  2. 晶振測試: 檢查AT89C2051的XTAL1和XTAL2引腳是否有正常的時鐘波形。

  3. 復(fù)位測試: 檢查單片機(jī)上電時是否有復(fù)位脈沖。

  4. DS18B20通信測試: 使用示波器或邏輯分析儀監(jiān)測DS18B20的DQ線波形,確保單片機(jī)能夠正確地發(fā)送和接收數(shù)據(jù)。

  5. 數(shù)碼管驅(qū)動測試: 編寫簡單的程序,輪流點(diǎn)亮數(shù)碼管的各個段和位,檢查顯示是否正常。


6.2 軟件調(diào)試


  1. 分模塊調(diào)試: 先單獨(dú)調(diào)試DS18B20的通信程序,確保能正確讀取溫度值。

  2. 數(shù)據(jù)處理調(diào)試: 將讀取到的原始溫度值通過串口發(fā)送到PC端,進(jìn)行驗證,確保數(shù)據(jù)轉(zhuǎn)換正確。

  3. 顯示調(diào)試: 逐步調(diào)試數(shù)碼管的段碼和位選控制,確保溫度值能正確顯示。

  4. 系統(tǒng)集成調(diào)試: 將所有模塊的軟件集成,進(jìn)行整體測試。

  5. 溫度校準(zhǔn): 將系統(tǒng)置于已知溫度環(huán)境中(如冰水混合物$0^circ C$、沸水$100^circ C$),校準(zhǔn)測量誤差。DS18B20本身精度較高,但系統(tǒng)誤差可能來自電源波動、布線干擾等。



七、 功耗分析與優(yōu)化


  • DS18B20: 正常工作電流在1mA左右,休眠模式下僅幾十微安。可以通過編程使其在兩次測量之間進(jìn)入休眠狀態(tài)。

  • AT89C2051: 正常工作電流在幾毫安到十幾毫安??梢酝ㄟ^降低晶振頻率、使用空閑模式(Idle Mode)或掉電模式(Power-Down Mode)來降低功耗。在溫度刷新間隔較長時,讓單片機(jī)進(jìn)入低功耗模式,并通過定時器中斷喚醒進(jìn)行測量和顯示。

  • LED數(shù)碼管: 是主要的耗電部分。采用動態(tài)掃描可以大大降低平均電流,但仍需合理選擇限流電阻,避免過亮導(dǎo)致不必要的功耗。在環(huán)境光線較暗時,可以適當(dāng)降低亮度。


八、 總結(jié)與展望


本設(shè)計方案詳細(xì)闡述了基于DS18B20、AT89C2051和CD4069的數(shù)字溫度顯示系統(tǒng)的設(shè)計與實現(xiàn)。通過對各個元器件的精選和詳盡分析,結(jié)合周密的硬件電路設(shè)計和軟件編程策略,可以構(gòu)建一個性能穩(wěn)定、顯示直觀、功耗可控的溫度測量顯示系統(tǒng)。

未來可擴(kuò)展性:

  • 無線傳輸: 可以加入ESP8266或NRF24L01等無線模塊,實現(xiàn)溫度數(shù)據(jù)的遠(yuǎn)程監(jiān)控。

  • 數(shù)據(jù)記錄: 增加EEPROM或SD卡模塊,實現(xiàn)溫度數(shù)據(jù)的存儲和歷史查詢。

  • 報警功能: 設(shè)定溫度閾值,當(dāng)溫度超出范圍時觸發(fā)蜂鳴器或LED報警。

  • 用戶界面: 增加按鍵,允許用戶切換顯示模式(如攝氏度/華氏度)、設(shè)置報警閾值等。

  • 多傳感器網(wǎng)絡(luò): 利用DS18B20的唯一ID特性,擴(kuò)展為多點(diǎn)溫度測量系統(tǒng)。

本方案為讀者提供了從理論到實踐的詳細(xì)指導(dǎo),旨在幫助工程師和愛好者快速掌握數(shù)字溫度顯示系統(tǒng)的設(shè)計要點(diǎn)。通過理解各元器件的特性及其在系統(tǒng)中的作用,將能夠靈活應(yīng)對各種設(shè)計挑戰(zhàn),并在此基礎(chǔ)上進(jìn)行創(chuàng)新和功能擴(kuò)展。

責(zé)任編輯:David

【免責(zé)聲明】

1、本文內(nèi)容、數(shù)據(jù)、圖表等來源于網(wǎng)絡(luò)引用或其他公開資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對本文的引用持有異議,請聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時處理。

2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。

3、本文內(nèi)容僅代表作者觀點(diǎn),拍明芯城不對內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨(dú)立判斷做出的,請讀者明確相關(guān)結(jié)果。

4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。

拍明芯城擁有對此聲明的最終解釋權(quán)。

上一篇: 已是第一篇

相關(guān)資訊

拍明芯城微信圖標(biāo)

各大手機(jī)應(yīng)用商城搜索“拍明芯城”

下載客戶端,隨時隨地買賣元器件!

拍明芯城公眾號
拍明芯城抖音
拍明芯城b站
拍明芯城頭條
拍明芯城微博
拍明芯城視頻號
拍明
廣告
恒捷廣告
廣告
深亞廣告
廣告
原廠直供
廣告