基于單片機(jī)的四位數(shù)數(shù)字溫度計(jì)的設(shè)計(jì)與制作_第1頁
基于單片機(jī)的四位數(shù)數(shù)字溫度計(jì)的設(shè)計(jì)與制作_第2頁
基于單片機(jī)的四位數(shù)數(shù)字溫度計(jì)的設(shè)計(jì)與制作_第3頁
基于單片機(jī)的四位數(shù)數(shù)字溫度計(jì)的設(shè)計(jì)與制作_第4頁
基于單片機(jī)的四位數(shù)數(shù)字溫度計(jì)的設(shè)計(jì)與制作_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第13頁共43頁基于單片機(jī)的四位數(shù)數(shù)字溫度計(jì)的設(shè)計(jì)與制作摘要:隨著時代的進(jìn)步和發(fā)展,我們在科研領(lǐng)域中使用的很多儀器在逐步趨于數(shù)字化,智能化。我們知道傳統(tǒng)的溫度檢測以熱電偶和熱電阻為溫度敏感元件。然而熱電偶和熱電阻的成本低,但他們測出的一般都是電壓,再轉(zhuǎn)化成對應(yīng)的溫度,需要比較多的外部硬件支持,而且可靠性相對比較差,測溫準(zhǔn)確度低,檢測系統(tǒng)也有一定的誤差。所以我們的社會需要產(chǎn)生一種測溫更準(zhǔn)確,使用更便捷的溫度計(jì)。本文將介紹一種基于AT89C51單片機(jī)控制,以DS18B20為測溫傳感器的數(shù)字溫度計(jì),它將使用4位共陽極LED數(shù)碼管,以串口傳送數(shù)據(jù)來實(shí)現(xiàn)溫度顯示。本溫度計(jì)屬于多功能溫度計(jì),具有讀數(shù)方便,測溫范圍廣,測溫精確,數(shù)字顯示,適用范圍寬等特點(diǎn),可以手動設(shè)置上下報警溫度的零界值,當(dāng)測量溫度顯示不在設(shè)置范圍內(nèi)時,可以報警蜂鳴??傊?,如此操作簡單,使用方便,價格便宜的數(shù)字溫度計(jì)將被人們廣泛認(rèn)可,更好的被社會所用,發(fā)展前景無限光明。關(guān)鍵詞:單片機(jī);數(shù)字控制;溫度計(jì);DS18B20;AT89C51

目錄1緒論 11.1數(shù)字溫度計(jì)的發(fā)展歷史 11.2 選題研究背景和意義 21.3 國內(nèi)外研究現(xiàn)狀及數(shù)字溫度計(jì)發(fā)展綜述 32.硬件設(shè)計(jì)部分 72.1電路總框圖設(shè)計(jì) 72.2電路總原理圖 83.系統(tǒng)各部分硬件電路 93.1顯示電路 93.2DS18B20溫度傳感器與單片機(jī)的接口電路 103.3振蕩電路 203.4復(fù)位電路 213.5報警電路 223.6電源電路 223.7工作原理 233.8數(shù)字溫度計(jì)PCB圖 234軟件部分設(shè)計(jì) 244.1主程序流程圖 244.2各子程序流程圖 25結(jié)論 29匯編語言程序 30參考文獻(xiàn) 39致謝 401緒論數(shù)字溫度計(jì)的發(fā)展歷史溫度是科學(xué)技術(shù)中最基本的物理量之一,物理、化學(xué)、生物等學(xué)科都離不開溫度。在工業(yè)生產(chǎn)中和實(shí)驗(yàn)研究中,像電力、化工、石油、冶金、航空航天、糧食儲存、酒類生產(chǎn)等領(lǐng)域內(nèi),溫度常常是表征對象和過程狀態(tài)的最重要的參數(shù)之一。在1593年由意大利科學(xué)家伽利略發(fā)明了世界上最早的溫度計(jì)。第一只溫度計(jì)的一根一端敞口的玻璃管,另一端帶有核桃般大的玻璃泡。開始使用時先給玻璃泡加熱,然后再把玻璃管插入水中。玻璃管中的水面就會隨著溫度的變化而上下移動,根據(jù)移動的多少就可以判定溫度的變化或溫度的高低。然而這種原始的溫度計(jì),非常容易受外界大氣壓強(qiáng)等環(huán)境因素,所以往往這樣的溫度計(jì)測量出來的數(shù)據(jù)跟實(shí)際數(shù)據(jù)的誤差較大。所以荷蘭人華倫海特在此基礎(chǔ)上進(jìn)行了改進(jìn),在1709年他利用酒精,又在1714年利用水銀作為測量物質(zhì),制造了稍微精確的溫度計(jì)。我們用℉代表華氏溫度,把0℉定義為一定濃度的鹽水凝固時的溫度,把32℉定義為純水凝固時的溫度定,把標(biāo)準(zhǔn)大氣壓下水沸騰的溫度定為212℉,這就是華氏溫度計(jì)。隨著人們生活水平的不斷提高,單片機(jī)控制無疑是人們追求的目標(biāo)之一,它所給人帶來的方便也是不可否定的,其中數(shù)字溫度計(jì)就是一個典型的例子,但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從數(shù)單片機(jī)技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。然而這種傳統(tǒng)的水銀或酒精溫度計(jì)來測量溫度,不僅測量時間長、讀數(shù)不準(zhǔn)確、而且功能單一,已經(jīng)不能滿足人們在數(shù)字化時代的基本要求。而數(shù)字溫度計(jì)是一種新型的溫度計(jì),它具有讀數(shù)方便,測溫范圍廣,測溫準(zhǔn)確,其輸出溫度采用數(shù)字顯示,是一種精度高、穩(wěn)定性好、適用性極強(qiáng)的新型現(xiàn)場溫度顯示儀。數(shù)字溫度計(jì)一般采用溫度敏感元件也就是溫度傳感器,將溫度的變化轉(zhuǎn)換成電信號的變化,如電壓和電流的變化,溫度變化和電信號的變化有一定的關(guān)系,如線性關(guān)系,一定的曲線關(guān)系等,這個電信號可以使用模數(shù)轉(zhuǎn)換的電路即A/D轉(zhuǎn)換電路將模擬信號轉(zhuǎn)換為數(shù)字信號,數(shù)字信號再送給處理單元,如單片機(jī)或者PC機(jī)等,處理單元經(jīng)過內(nèi)部的軟件計(jì)算將這個數(shù)字信號和溫度聯(lián)系起來,成為可以顯示出來的溫度數(shù)值。選題研究背景和意義溫度測量涉及各行各業(yè),而傳統(tǒng)的溫度測量儀器一般需人工手動測量,準(zhǔn)確性不高,測量過程復(fù)雜而不簡便,例如有水銀溫度計(jì)、酒精溫度計(jì)、煤油溫度計(jì)等。在很多棘手的,有毒的,或者一些無人區(qū)是無法正常通過手動完成溫度的測量,所以傳統(tǒng)溫度測量儀器的劣勢之處就輕而易舉的顯現(xiàn)出來了。隨著單片機(jī)技術(shù)的不斷發(fā)展,電子技術(shù)的日新月異,使溫度計(jì)的自動化、數(shù)字化、便捷化就變得非常容易實(shí)現(xiàn)。如今單片機(jī)在日用電子產(chǎn)品中運(yùn)用越來越廣泛,而數(shù)字溫度計(jì)與傳統(tǒng)的溫度計(jì)相比,具有讀數(shù)方便、測溫范圍廣、測溫準(zhǔn)確、靈敏度高、抗干擾性強(qiáng)、性能穩(wěn)定等優(yōu)點(diǎn),其輸出溫度采用數(shù)字顯示,主要用于對測溫準(zhǔn)確度要求比較高的場所或科研實(shí)驗(yàn)室使用。它的結(jié)構(gòu)非常簡單,不需外接元件,只需要采用一根既可供電又可傳輸數(shù)據(jù)I/0數(shù)據(jù)線,并可由用戶設(shè)置溫度報警的界限,可廣泛用于食品庫、冷庫、糧庫等需要精確控制溫度的地方。數(shù)字溫度計(jì)中傳感器是它的重要組成部分,它的精度、靈敏度基本決定了溫度計(jì)的精度、測量范圍、控制范圍和用途等。傳感器應(yīng)用極其廣泛,目前已經(jīng)研制出多種新型傳感器。但是,作為應(yīng)用系統(tǒng)設(shè)計(jì)人員需要根據(jù)系統(tǒng)要求選用適宜的傳感器,并與自己設(shè)計(jì)的系統(tǒng)連接起來,從而構(gòu)成性能優(yōu)良的監(jiān)控系統(tǒng)?,F(xiàn)代信息技術(shù)的不斷完善與改進(jìn),溫度傳感器的改進(jìn)也與時俱進(jìn),總線更加標(biāo)準(zhǔn)化、可靠性和安全性讓人民更加的放心,它的精度不斷增高、功能不斷增多,并且開發(fā)出了網(wǎng)絡(luò)傳感器和虛擬傳感器,為研制更加高科技單片測溫系統(tǒng)打下堅(jiān)實(shí)的基礎(chǔ)。所以研究基于單片機(jī)的數(shù)字溫度計(jì)是非常的有意義。我們相信在不久的將來,會有越來越先進(jìn)的數(shù)字溫度計(jì)被生產(chǎn)制造出來。國內(nèi)外研究現(xiàn)狀及數(shù)字溫度計(jì)發(fā)展綜述溫度控制系統(tǒng)在國內(nèi)各行各業(yè)的應(yīng)用雖然已經(jīng)十分廣泛,但從國內(nèi)生產(chǎn)的溫度控制器來講,國內(nèi)總體發(fā)展技術(shù)水平仍然不高,同美國、日本、德國、韓國等技術(shù)先進(jìn)國家相比,我們?nèi)匀挥兄鄬^大的差距。隨著我國經(jīng)濟(jì)的快速發(fā)展,科研水平的不斷提高,我們對溫度控制系統(tǒng)的要求也越來越高,我們需要大量可用于較高控制場合的智能化、自適應(yīng)控制儀表的成熟溫控產(chǎn)品。鑒于目前國內(nèi)技術(shù)還不十分成熟,形成商品化并廣泛應(yīng)用的控制儀表較少。我國政府及企業(yè)對此都已十分重視,并相繼建立了一些國家級、省級的科研研發(fā)中心,相對填補(bǔ)了我國科研基地空缺的不利局面,積極開展創(chuàng)新性研究,這使我國儀表工業(yè)得到了空前快速穩(wěn)定的發(fā)展。目前,國際上的新型溫度傳感器正是一個智能化、網(wǎng)絡(luò)化取代集成化,數(shù)字式取代模擬式的過程。所以高精度、多功能、總線標(biāo)準(zhǔn)化、高可靠性及安全性、開發(fā)虛擬傳感器和網(wǎng)絡(luò)傳感器、研制單片測溫系統(tǒng)等都是進(jìn)入21世紀(jì)后數(shù)字溫度傳感器迅速發(fā)展的高科技方向。技術(shù)的更新是日新月異的,數(shù)字溫度計(jì)的核心——溫度傳感器,功能也在不斷增強(qiáng),目前,多種高速度、測溫精度、高分辨力,采用9~12位A/D轉(zhuǎn)換器,分辨力一般可達(dá)0.5~0.0625℃,并且具有單次轉(zhuǎn)換模式、連續(xù)轉(zhuǎn)換模式、待機(jī)模式,低溫極限擴(kuò)展模式等多種工作模式可供選擇的智能溫度傳感器已在國外相繼推出,如今,這種新型的智能溫度傳感器可單獨(dú)作為從機(jī)通過專用總線接口與主機(jī)進(jìn)行通信,實(shí)現(xiàn)了采用spI總線、I2C總線、SMBus總線和單線(1-Wire)總線的規(guī)范化、標(biāo)準(zhǔn)化總線技術(shù)。還有它能以很低的采樣分辨力和很高的采樣速率將模擬信號轉(zhuǎn)換成數(shù)字信號,再利用采樣、噪聲整形和數(shù)字濾波技術(shù),來提高有效分辨力,具有低成本、良好線性度、高分辨力、強(qiáng)抑制串模干擾能力等優(yōu)點(diǎn)。隨著我們研發(fā)技術(shù)的不斷成熟與積累,相信我們可以研發(fā)與制造出更加多功能的,多效率的,低成本的數(shù)字溫度計(jì)來。經(jīng)翻閱,目前主要有以下兩種方案是大家設(shè)計(jì)與制作溫度計(jì)常用的。方案一:半導(dǎo)體熱敏電阻的阻值具有很高的溫度靈敏度,用一定的電路把熱敏電阻阻值的變化轉(zhuǎn)換成電流或電壓的變化,由電表顯出來以反映溫度的變化。雖然熱敏電阻對溫度非常靈敏,但通常每個元件可適用的范圍都不太寬,所以應(yīng)根據(jù)所要測量的溫度的上、下限和溫度范圍的高低選用具有合適阻值和B值的元件以及相應(yīng)的測溫電路。元件的B值越高,其電阻溫度系數(shù)越大,可測量的范圍越窄。表1.1給出了不同熱敏電阻的適用范圍和對應(yīng)的B值。表1.1不同熱敏電阻的適用范圍和對應(yīng)的B值由上表可知,測量低溫采用B小的元件,測量高溫采用B大的元件。通常選用電阻值,因?yàn)殡娮柚堤§`敏度低,電阻值太大則會引起電絕緣和測量線路匹配困難。這種設(shè)計(jì)需要用到A/D轉(zhuǎn)換電路,而A/D轉(zhuǎn)換電路工作速度較低,感溫電路比較復(fù)雜。半導(dǎo)體溫度計(jì)就是利用半導(dǎo)體的電阻值隨溫度急劇變化的特性而制作的,以半導(dǎo)體熱敏電阻為傳感器,通過測量其電阻值來確定溫度的儀器。這種測量方法為非電量的電測法,它可以將各種非電量,如長度、位移、應(yīng)力、應(yīng)變、溫度、光強(qiáng)等轉(zhuǎn)變成電學(xué)量,如電阻、電壓、電流、電感和電容等,然后用電學(xué)儀器來進(jìn)行測量。由于金屬氧化物半導(dǎo)體的電阻值對溫度的反應(yīng)很靈敏,因此可以作為溫敏傳感器。為實(shí)現(xiàn)非電量的電測法,采用電學(xué)儀器來測量熱敏電阻的阻值,還需要了解熱敏電阻的伏安特性。由圖1.2可知,在V-I曲線的起始部分,曲線接近線性,這是因?yàn)殡娏餍r在熱敏電阻上消耗的功率不足以顯著地改變熱敏電阻的溫度,因而符合歐姆定律。此時,熱敏電阻的阻值主要與外界溫度有關(guān),電流的影響可以忽略不計(jì)。圖1.2熱敏電阻的伏安特性曲線圖1.3半導(dǎo)體溫度計(jì)測溫電路的原理圖半導(dǎo)體溫度計(jì)測溫電路的原理圖如圖1.3所示(僅供參考),圖中G是微安計(jì),RT為熱敏電阻,當(dāng)電橋平衡時,表的指示必為零,此時應(yīng)滿足條件,若取R1=R2,則R3的數(shù)值即為RT的數(shù)值。平衡后,若電橋某一臂的電阻又發(fā)生改變(如RT),則平衡將受到破壞,微安計(jì)中將有電流流過,若電橋電壓,微安計(jì)內(nèi)阻RG,電橋各臂電阻R1、R2、R3已定,就可以根據(jù)微安計(jì)的讀數(shù)IG的大小計(jì)算出RT的大小來。也就是說,微安計(jì)中的電流的大小直接反映了熱敏電阻的阻值的大小,因此就可以利用這種“非平衡電橋”的電路原理來實(shí)現(xiàn)對溫度的測量。主要缺點(diǎn)是熱敏電阻阻值的穩(wěn)定性還不夠理想(一般年變化量在0.1%左右),影響準(zhǔn)確度的提高。另一個問題是溫度與電阻值之間為非線性關(guān)系,制作儀器時需要進(jìn)行線性化處理,工藝比較復(fù)雜。探索新材料新工藝,用硅、硼等單晶材料代替氧化物,以提高其穩(wěn)定性能,或直接制造出線性型的熱敏電阻器,能大大改善半導(dǎo)體溫度表的性能。方案一:熱電偶溫度計(jì)屬于接觸式溫度測量儀表。是根據(jù)熱電效應(yīng)即塞貝克效應(yīng)原理來測量溫度的,是溫度測量儀表中常用的測溫元件。熱電偶溫度計(jì)由三部分組成1.熱電偶(感溫元件);2.測量儀表;3.連接熱電偶和測量儀表的導(dǎo)線(補(bǔ)償導(dǎo)線及銅線)。如圖1.4最簡單的熱電偶測溫系統(tǒng)。圖1.4最簡單的熱電偶測溫系統(tǒng)熱電偶的工作原理是:兩種不同成分的導(dǎo)體兩端經(jīng)焊接形成回路,測量端是直接測溫端,參比端是接線端子端。當(dāng)溫差存在于測量端和參比端之間時,就會有熱電流在回路上產(chǎn)生,這時候接上顯示儀表,由同熱電偶所產(chǎn)生的熱電動勢的溫度值就會顯示在儀表上。如圖1.5熱電偶溫度計(jì)系統(tǒng)原理圖。圖1.5熱電偶溫度計(jì)系統(tǒng)原理圖隨著測量端溫度不斷升高,熱電偶的熱電動勢也逐步增長。熱電偶導(dǎo)體材質(zhì)以及兩端溫差有關(guān)決定了熱電動勢的大小,熱電動勢的大小與熱電極的長度、直徑都是無關(guān)。但是熱電動勢與金屬熱電偶相比較輕時變化較大,在還原性氣體環(huán)境較脆弱(特別是氫、金屬蒸氣),它的補(bǔ)償導(dǎo)線誤差大,價格參差不齊,受短范圍排序等影響都會產(chǎn)生一定的誤差。2.硬件設(shè)計(jì)部分2.1電路總框圖設(shè)計(jì)用熱敏電阻-半導(dǎo)體為傳感器的溫度計(jì),需要用到A/D轉(zhuǎn)換電路,而A/D轉(zhuǎn)換電路工作速度較低,感溫電路比較復(fù)雜。它可測量到小范圍內(nèi)的溫度,變化率較大,固有電阻大,無需延長導(dǎo)線時的誤差補(bǔ)償,但是熱敏電阻阻值的穩(wěn)定性還不夠理想(一般年變化量在0.1%左右),影響準(zhǔn)確度的提高。另一個是溫度與電阻值之間為非線性關(guān)系,變化率非線性,是不適合測量高溫區(qū)的,而且制作儀器時需要進(jìn)行線性化處理,工藝比較復(fù)雜。熱電偶溫度計(jì)可測量到小范圍內(nèi)的溫度,熱響應(yīng)快,耐振動和耐沖擊,可以測量高溫區(qū),測量精度高,因熱電偶直接與被測對象接觸,不受中間介質(zhì)的影響,測量范圍廣,構(gòu)造簡單,使用方便。但是它變化率小,需修正冷接點(diǎn)溫度。在單片機(jī)電路設(shè)計(jì)中,大多都是使用傳感器,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計(jì)要求。從以上三種方案,采用方案3,電路相對會簡單些,軟件設(shè)計(jì)也相對會簡單些,故采用了方案3。溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖如圖2.1所示,以單片機(jī)AT89S51為控制器,以DS18B20為溫度傳感器,使用4位LED數(shù)碼管以串口傳送數(shù)據(jù)的方式來實(shí)現(xiàn)測量溫度的顯示。而系統(tǒng)的整體硬件電路主要有LED顯示電路,DB18B20溫度傳感器與單片機(jī)的接口電路,振蕩電路,復(fù)位電路,電源電路,報警電路等電路組成。單片機(jī)單片機(jī)AT89S51測溫接口電路復(fù)位電路振蕩電路LED數(shù)字顯示顯示驅(qū)動按鍵報警電路圖2.1溫度計(jì)電路設(shè)計(jì)總體設(shè)計(jì)方框圖2.2電路總原理圖圖2.2電路總原理圖圖2.2中有三個獨(dú)立式按鍵可以分別調(diào)整溫度計(jì)的上下限報警設(shè)置,圖中蜂鳴器可以在被測溫度不在上下限范圍內(nèi)時,發(fā)出報警鳴叫聲音,同時LED數(shù)碼管將沒有被測溫度值顯示,這時可以調(diào)整報警上下限,從而測出被測的溫度值。圖2.2中的按健復(fù)位電路是上電復(fù)位加手動復(fù)位,使用比較方便,在程序跑飛時,可以手動復(fù)位,這樣就不用在重起單片機(jī)電源,就可以實(shí)現(xiàn)復(fù)位。3.系統(tǒng)各部分硬件電路3.1顯示電路顯示電路采用4位共陽LED數(shù)碼管,利用動態(tài)掃描方式,從P0口輸出段碼,P2口的P2.1、P2.3、P2.5、P2.7輸出位碼。圖3.1顯示電路LED數(shù)碼管有共陽和共陰兩種,我們把這些LED發(fā)光二極管的正極接到一塊(一般是拼成一個8字加一個小數(shù)點(diǎn))而作為一個引腳,為共陽管。如下圖3.2所示:圖3.2共陽管3.2DS18B20溫度傳感器與單片機(jī)的接口電路DS18B20溫度傳感器與單片機(jī)的接口電路可以說是本系統(tǒng)中最重要的電路。此溫度傳感器DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源。另一種是寄生電源供電方式,如圖3.3所示單片機(jī)端口接單線總線,為保證在有效的DS18B20時鐘周期內(nèi)提供足夠的電流,可用一個MOSFET管來完成對總線的上拉。當(dāng)DS18B20處于寫存儲器操作和溫度A/D轉(zhuǎn)換操作時,總線上必須有強(qiáng)的上拉,上拉開啟時間最大為10us。采用寄生電源供電方式時VDD端接地。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。圖3.3DS18B20與單片機(jī)的接口電路DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實(shí)際要求通過簡單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。DS18B20技術(shù)性能描述:·獨(dú)特的單線接口方式,DS1820在與微處理器連接時僅需要一條口線即可實(shí)現(xiàn)微處理器與DS1820的雙向通訊,在使用中不需要任何外圍元件?!y溫范圍-55℃~+125℃,固有測溫分辨率0.5℃?!ぶС侄帱c(diǎn)組網(wǎng)功能,多個DS1820可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)多點(diǎn)測溫?!すぷ麟娫?

3~5V/DC·測量結(jié)果以9位數(shù)字量方式串行傳送?!げ讳P鋼保護(hù)管直徑Φ6

。·適用于1/2”,3/4”,1”,DN40~DN250各種介質(zhì)工業(yè)管道和狹小空間設(shè)備測溫。DS18B20的性能特點(diǎn)如下:·獨(dú)特的單線接口僅需要一個端口引腳進(jìn)行通信;·多個DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;·無須外部器件;·可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;·零待機(jī)功耗;·溫度以9或12位數(shù)字;·用戶可定義報警設(shè)置;·報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件;·負(fù)電壓特性,電源極性接反時,溫度計(jì)不會因發(fā)熱而燒毀,但不能正常工作;DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列如圖3.4所示:圖3.4DS18B20的管腳排列C64位ROM和單線接口高速緩存C64位ROM和單線接口高速緩存存儲器與控制邏輯溫度傳感器高溫觸發(fā)器TH低溫觸發(fā)器TL配置寄存器8位CRC發(fā)生器VddI/OI/O圖3.5DS18B20內(nèi)部結(jié)構(gòu)從上圖知64位ROM的結(jié)構(gòu)開始8位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個DS18B20可以采用一線進(jìn)行通信的原因。溫度報警觸發(fā)器TH和TL,可通過軟件寫入戶報警上下限。DS18B20溫度傳感器的內(nèi)部存儲器還包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲器,結(jié)構(gòu)如表3.6所示。頭2個字節(jié)包含測得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時被刷新。第5個字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值。該字節(jié)各位的定義如表3.7所示。低5位一直為1,TM是工作模式位,用于設(shè)置DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設(shè)置為0,用戶要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。表3.6DS18B20字節(jié)定義由表3.7可見,DS18B20溫度轉(zhuǎn)換的時間比較長,而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時間越長。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時間權(quán)衡考慮。表3.7DS18B20溫度轉(zhuǎn)換時間高速暫存RAM的第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來檢驗(yàn)數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機(jī)可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時低位在先,高位在后,數(shù)據(jù)格式以0.0625℃當(dāng)符號位S=0時,表示測得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)符號位S=1時,表示測得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制數(shù)值。表3.8是一部分溫度值對應(yīng)的二進(jìn)制溫度數(shù)據(jù)。表3.8一部分溫度對應(yīng)值表DS18B20完成溫度轉(zhuǎn)換后,就把測得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容作比較。若T>TH或T<TL,則將該器件內(nèi)的報警標(biāo)志位置位,并對主機(jī)發(fā)出的報警搜索命令作出響應(yīng)。在64位ROM的最高有效字節(jié)中存儲有循環(huán)冗余檢驗(yàn)碼(CRC)。主機(jī)ROM的前56位來計(jì)算CRC值,并和存入DS18B20的CRC值作比較,以判斷主機(jī)收到的ROM數(shù)據(jù)是否正確。DS18B20的測溫原理是這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計(jì)數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計(jì)數(shù)器2的脈沖輸入。器件中還有一個計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時,DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖進(jìn)行計(jì)數(shù)進(jìn)而完成溫度測量。計(jì)數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55℃所對應(yīng)的一個基數(shù)分別置入減法計(jì)數(shù)器1、溫度寄存器中,計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55減法計(jì)數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時,溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器計(jì)數(shù)到0時,停止溫度寄存器的累加,此時溫度寄存器中的數(shù)值就是所測溫度值。其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)器門仍未關(guān)閉就重復(fù)上述過程,直到溫度寄存器值大致被測溫度值。另外,由于DS18B20單線通信功能是分時完成的,它有嚴(yán)格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。分別說明如下:(1)初始化單總線的所有處理均從初始化開始。初始化過程是主機(jī)通過向作為從機(jī)的DS18B20芯片發(fā)一個有時間寬度要求的初始化脈沖實(shí)現(xiàn)的。初始化后,才可進(jìn)行讀寫操作。(2)ROM操作命令總線主機(jī)檢測到DS18B20的存在便可以發(fā)出ROM操作命令之一。這些命令見表3.9:表3.9ROM操作命令(3)存儲器操作命令如表3.10:表3.10存儲器操作命令(4)時序主機(jī)使用時間隙(timeslots)來讀寫DS18B20的數(shù)據(jù)位和寫命令字的位:①初始化圖3.11初始化時序時序見圖3.11,主機(jī)總線to時刻發(fā)送一復(fù)位脈沖(最短為480us的低電平信號),接著在tl時刻釋放總線并進(jìn)入接收狀態(tài)。DS18B20在檢測到總線的上升沿之后等待15-60us,接著DS18B20在t2時刻發(fā)出存在脈沖(低電平持續(xù)60-240us)。如圖中虛線所示:②寫時間隙圖3.12寫0時序圖3.13寫1時序當(dāng)主機(jī)總線to時刻從高拉至低電平時,就產(chǎn)生寫時間隙見圖3.12和圖3.13。從to時刻開始15us之內(nèi)應(yīng)將所需寫的位送到總線上,DSl8B20在to后15-60us間對總線采樣。③讀時間隙見圖3.14,主機(jī)總線to時刻從高拉至低電平時,總線只須保持低電平lus。之后在t1時刻將總線拉高,產(chǎn)生讀時間隙,讀時間隙在t1時刻后t2時刻前有效,t2距to為15us。也就是說t2時刻前主機(jī)必須完成讀位,并在to后的60us一120us內(nèi)釋放總線,讀位子程序(讀得的位到C中)。圖3.14讀時序DSl8B20多路測量簡介:初始化初始化跳過ROM變換溫度等待1S初始化設(shè)置1820個數(shù)匹配ROM讀存儲器存放在緩沖區(qū)指針增1初始化b-1=0?否是圖3.15DSl8B20原理框圖每一片DSl8B20在其ROM中都存有其唯一的48位序列號,出廠前已寫入片內(nèi)ROM中,主機(jī)在進(jìn)入操作程序前必須逐一接入DS18B20用讀ROM(33H)命令將該DS18B20的序列號讀出并登錄。當(dāng)主機(jī)需要對眾多在線DS18B20的某一個進(jìn)行操作時,首先要發(fā)出匹配ROM命令(55H),緊接著主機(jī)提供64位序列(包括該DS18B20的48位序列號)。之后的操作就是針對該DS18B20的。而所謂跳過ROM命令即:MOVA,#0CCH。圖3.15中先有跳過ROM,即是啟動所有DS18B20進(jìn)行溫度變換,之后通過匹配ROM再逐一地讀回每個DS18B20的溫度數(shù)據(jù)。在DS18B20組成的測溫系統(tǒng)中,主機(jī)在發(fā)出跳過ROM命令之后,再發(fā)出統(tǒng)一的溫度轉(zhuǎn)換啟動碼44H,就可以實(shí)現(xiàn)所有DS18B20的統(tǒng)一轉(zhuǎn)換,再經(jīng)過1s后,就可以用很少的時間去逐一讀取。這種方式使其T值往往小于傳統(tǒng)方式。(由于采取公用的放大電路和A/D轉(zhuǎn)換器只能逐一轉(zhuǎn)換)。顯然通道數(shù)越多,這種省時效應(yīng)就越明顯了。在DB18B20溫度傳感器與單片機(jī)的接口電路中另一個有重要作用的就是主控制器——單片機(jī)AT89C51。單片機(jī)AT89S51具有低電壓供電和體積小等特點(diǎn),四個端口只需要兩個口就能滿足電路系統(tǒng)的設(shè)計(jì)需要,很適合便攜手持式產(chǎn)品的設(shè)計(jì)使用系統(tǒng)可用二節(jié)電池供電。如圖3.16所示。圖3.16單片機(jī)AT89S51(1)單片機(jī)AT89C51的主要特性:·與MCS-51兼容?!?K字節(jié)可編程閃爍存儲器,壽命:1000寫/擦循環(huán),數(shù)據(jù)保留時間:10年?!とo態(tài)工作:0Hz-24Hz?!と壋绦虼鎯ζ麈i定?!?28*8位內(nèi)部RAM?!?2可編程I/O線?!蓚€16位定時器/計(jì)數(shù)器?!?個中斷源?!た删幊檀型ǖ??!さ凸牡拈e置和掉電模式?!て瑑?nèi)振蕩器和時鐘電路。(2)單片機(jī)AT89C51的管腳說明:VCC:供電電壓。GND:接地P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時,P0輸出原碼,此時P0外部必須被拉高。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時,P1口作為第八位地址接收。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。

P3口也可作為AT89C口管腳備選功能P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(記時器0外部輸入)P3.5T1(記時器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲器寫選通)P3.7/RD(外部數(shù)據(jù)存儲器讀選通)P3口同時為閃爍編程和編程校驗(yàn)接收一些控制信號。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機(jī)器周期的高電平時間。ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。3.3振蕩電路AT89C51單片機(jī)內(nèi)部的振蕩電路是一個高增益反向放大器,引線XTAL1和XTAL2分別是放大器的輸入端和輸出端。單片機(jī)內(nèi)部雖然有振蕩電路,但要形成時鐘,外部還需附加電路。AT89C51的時鐘產(chǎn)生方式有兩種:內(nèi)部時鐘電方式和外部時鐘方式。由于外部時鐘方式用于多片單片機(jī)組成的系統(tǒng)中,所以此處選用內(nèi)部時鐘方式。即利用其內(nèi)部的振蕩電路在XTAL1和XTAL2引線上外接定時元件,內(nèi)部振蕩電路產(chǎn)生自激振蕩。最常用的是在XTAL1和XTAL2之間接晶體振蕩器與電路構(gòu)成穩(wěn)定的自激振蕩器,如圖3.17電路所示為單片機(jī)最常用的時鐘振蕩電路的接法,其中晶振可選用振蕩頻率為12MHz的石英晶體,電容器一般選擇30PF左右。圖3.17振蕩電路3.4復(fù)位電路本設(shè)計(jì)中AT89C51是采用上電自動復(fù)位和按鍵復(fù)位兩種方式。最簡單的復(fù)位電路如圖所示。上電瞬間,RC電路充電,RST引線端出現(xiàn)正脈沖,只要RST端保持10ms以上的高電平,就能使單片機(jī)有效地復(fù)位。其中R14選擇10KΩ的電阻,電容器選擇10μF。圖3.18復(fù)位電路3.5報警電路報警是由單片機(jī)產(chǎn)生一定頻率的脈沖,由P2.7引腳輸出,P2.7外接一只PNP的三極管來驅(qū)動揚(yáng)聲器發(fā)出聲音,以便操作員來維護(hù),從而達(dá)到報警的目的。圖3.19報警電路3.6電源電路主要提供整個數(shù)字溫度計(jì)的電源電力,如圖3.20電源電路圖圖3.20電源電路圖3.7工作原理DS18B20工作時需要接收特定的指令來完成相應(yīng)功能(指令,可以簡單的理解為可以被識別并有相應(yīng)意義的一系列高低電平信號),它的指令可分為ROM指令和RAM指令;DS18B20本身就是一種數(shù)字溫度傳感器,它會把溫度轉(zhuǎn)換成數(shù)字量以后存貯在自身內(nèi)部,和單片機(jī)只需要連接一個I/0口,是一種單總線串行接口,然后通過單片機(jī)來根據(jù)傳感器特性計(jì)算出溫度,并且顯示出來。3.8數(shù)字溫度計(jì)PCB圖圖3.21數(shù)字溫度計(jì)PCB圖4軟件部分設(shè)計(jì)系統(tǒng)程序主要包括主程序、讀取溫度子程序、數(shù)據(jù)轉(zhuǎn)換子程序、顯示數(shù)據(jù)子程序等。4.1主程序流程圖主程序的主要功能是負(fù)責(zé)溫度的實(shí)時顯示、讀出并處理DS18B20的測量的當(dāng)前溫度值,溫度測量每1s進(jìn)行一次。這樣可以在一秒之內(nèi)測量一次被測溫度,其程序流程見圖4.1所示。圖4.1主程序流程圖4.2各子程序流程圖1、初始化程序所有操作都必須由初始化脈沖開始,波形如圖,單片機(jī)先輸出一個480~960us低電平到DQ引腳,再將DQ引腳置高電平,過15~60us后檢測DQ引腳狀態(tài),若為低電平則DS18B20工作正常,否則初始化失敗,不能正常測量溫度。如圖4.2初始化程序:圖4.2初始化程序2、讀取溫度子程序讀取溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進(jìn)行CRC校驗(yàn),校驗(yàn)有錯時不進(jìn)行溫度數(shù)據(jù)的改寫。主要包括以下三個命令:(1)寫暫存器命令【4EH】這個命令為由TH寄存器開始向DS18B20暫存器寫入數(shù)據(jù),4EH命令后的3字節(jié)數(shù)據(jù)將被保存到暫存器的地址2、3、4(TH、TL、CONFIG)三個字節(jié)。所有數(shù)據(jù)必須在復(fù)位脈沖前寫完。即如果只想寫一個字節(jié)的數(shù)據(jù)到地址2,可按如下流程:初始化;寫0CCH,跳過ROM檢測;寫4EH;寫1字節(jié)數(shù)據(jù);復(fù)位,即向DQ輸出480~960us低電平(2)讀暫存命令【BEH】這個命令由字節(jié)0讀取9個暫存器內(nèi)容,如果不需要讀取所有暫存內(nèi)容,可隨時輸出復(fù)位脈沖終止讀取過程(3)轉(zhuǎn)換溫度命令【44H】這個命令啟動溫度轉(zhuǎn)換過程。轉(zhuǎn)換溫度時DS18B20保持空閑狀態(tài),此時如果單片機(jī)發(fā)出讀命令,DS18B20將輸出0直到轉(zhuǎn)換完成,轉(zhuǎn)換完成后將輸出1。圖4.3讀取溫度子程序3、寫流程圖寫時隙:寫時隙由DQ引腳的下降沿引起。18B20有寫1和寫0兩種寫時隙。所有寫時隙必須持續(xù)至少60μs,兩個時隙之間至少有1μs的恢復(fù)時間。DS18B20在DQ下降沿后15μs~60μs間采樣DQ引腳,若此時DQ為高電平,則寫入一位1,若此時DQ為低電平,則寫入一位0,如圖4.4所示。所以,若想寫入1,則單片機(jī)應(yīng)先將DQ置低電平,15us后再將DQ置高電平,持續(xù)45μs;若要寫入0,則將DQ置低電平,持續(xù)60μs。圖4.4寫流程圖4、讀流程圖讀時隙:讀時隙由DQ下降沿引起,持續(xù)至少1μs的低電平后釋放總線(DQ置1)DS18B20的輸出數(shù)據(jù)將在下降沿15μs后輸出,此時單片機(jī)可讀取1位數(shù)據(jù)。讀時隙結(jié)束時要將DQ置1。所有讀時隙必須持續(xù)至少60μs,兩個時隙之間至少有1μs的恢復(fù)時間。圖4.5讀流程圖結(jié)論時代的進(jìn)步和快速發(fā)展,使我們在科研等領(lǐng)域中,對數(shù)據(jù)準(zhǔn)確性的要求越來越高,而傳統(tǒng)的溫度計(jì),和早期數(shù)字溫度計(jì),已經(jīng)越來越不能滿足人們對準(zhǔn)確性,便捷性的需求。經(jīng)過設(shè)計(jì)方案的論證、系統(tǒng)的硬件和軟件的設(shè)計(jì)、系統(tǒng)的調(diào)試等。我查閱了大量的關(guān)于傳感器DS18B20、單片機(jī)基礎(chǔ)及其接口電路、以及控制方面的理論知識。通過本文分析表明:本設(shè)計(jì)是一個性價比比較好的數(shù)字溫度計(jì)的設(shè)計(jì)。本設(shè)計(jì)能夠很準(zhǔn)確,快捷的測量溫度,并且能在設(shè)定測量值的溫度以外數(shù)值有一個蜂鳴器報警功能,很好的起到報警提醒的作用。這次設(shè)計(jì)基本完成了任務(wù)書的要求,實(shí)現(xiàn)了準(zhǔn)確,方便,快速測量溫度的功能。然而畢業(yè)設(shè)計(jì)的整個過程使我對自己也有了一個全新的認(rèn)識,也看到了自己的不足之處。通過這次設(shè)計(jì),不僅鍛煉了自己發(fā)現(xiàn)問題,并且分析問題、處理問題的能力,還提高了自己的動手方面的能力。最重要的是這特殊的鍛煉不僅豐富我們的人生經(jīng)歷,更是我們以后生活工作中的寶貴財富。在本次設(shè)計(jì)中我加深了課本上學(xué)到的知識,也學(xué)到了課本以外的知識。讓我懂得了,不管做什么,都應(yīng)該腳踏實(shí)地,勤勤懇懇,積極進(jìn)取,樂觀執(zhí)著,敢于面對困難與挑戰(zhàn),一絲不茍,擺正態(tài)度,對待學(xué)習(xí)應(yīng)保持嚴(yán)謹(jǐn)?shù)?,謙虛的態(tài)度,努力提升自己分析問題,解決問題的能力,為今后更好的學(xué)習(xí)添磚加瓦。跟隨著信息技術(shù)發(fā)展的腳步,相信在不久的將來,我們還會有更加準(zhǔn)確的測溫控制器被人們研發(fā)并大量生產(chǎn)出來。匯編語言程序#include<AT89X52.h>#defineuintunsignedint#defineucharunsignedchar //宏定義#defineSETP3_1 //定義調(diào)整鍵#defineDECP3_2 //定義減少鍵#defineADDP3_3 //定義增加鍵#defineBEEPP3_7 //定義蜂鳴器#defineALAMP1_0 //報警#defineDQP3_5 //定義DS18B20總線I/O bitshanshuo_st; //閃爍間隔標(biāo)志bitbeep_st; //蜂鳴器間隔標(biāo)志sbitDIAN=P0^5; //小數(shù)點(diǎn)ucharx=0; //計(jì)數(shù)器signedcharm; //溫度值全局變量ucharn; //溫度值全局變量ucharset_st=0; //狀態(tài)標(biāo)志signedcharshangxian=38; //上限報警溫度,默認(rèn)值為38signedcharxiaxian=5; //下限報警溫度,默認(rèn)值為5//ucharcodeLEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};ucharcodeLEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};//============================================================================================//====================================DS18B20=================================================//============================================================================================/*****延時子程序*****/voidDelay_DS18B20(intnum){while(num--);}/*****初始化DS18B20*****/voidInit_DS18B20(void){unsignedcharx=0;DQ=1;//DQ復(fù)位Delay_DS18B20(8);//稍做延時DQ=0;//單片機(jī)將DQ拉低Delay_DS18B20(80);//精確延時,大于480usDQ=1;//拉高總線Delay_DS18B20(14);x=DQ;//稍做延時后,如果x=0則初始化成功,x=1則初始化失敗Delay_DS18B20(20);}/*****讀一個字節(jié)*****/unsignedcharReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//給脈沖信號dat>>=1;DQ=1;//給脈沖信號if(DQ)dat|=0x80;Delay_DS18B20(4);}return(dat);}/*****寫一個字節(jié)*****/voidWriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;Delay_DS18B20(5);DQ=1;dat>>=1;}}/*****讀取溫度*****/unsignedintReadTemperature(void){unsignedchara=0;unsignedcharb=0;unsignedintt=0;floattt=0;Init_DS18B20();WriteOneChar(0xCC);//跳過讀序號列號的操作WriteOneChar(0x44);//啟動溫度轉(zhuǎn)換Init_DS18B20();WriteOneChar(0xCC);//跳過讀序號列號的操作WriteOneChar(0xBE);//讀取溫度寄存器a=ReadOneChar();//讀低8位b=ReadOneChar();//讀高8位t=b;t<<=8;t=t|a;tt=t*0.0625;t=tt*10+0.5;//放大10倍輸出并四舍五入return(t);}//=====================================================================================//=====================================================================================//=====================================================================================/*****延時子程序*****/voidDelay(uintnum){while(--num);}/*****初始化定時器0*****/voidInitTimer(void){TMOD=0x1;TH0=0x3c;TL0=0xb0;//50ms(晶振12M)}/*****讀取溫度*****/voidcheck_wendu(void){uinta,b,c;c=ReadTemperature()-5; //獲取溫度值并減去DS18B20的溫漂誤差a=c/100; //計(jì)算得到十位數(shù)字b=c/10-a*10; //計(jì)算得到個位數(shù)字m=c/10; //計(jì)算得到整數(shù)位n=c-a*100-b*10; //計(jì)算得到小數(shù)位if(m<0){m=0;n=0;} //設(shè)置溫度顯示上限if(m>99){m=99;n=9;} //設(shè)置溫度顯示上限}/*****顯示開機(jī)初始化等待畫面*****/voidDisp_init(void){P0=0x80;//顯示P2=0x7F;Delay(200);P2=0xBF;Delay(200);P2=0xDF;Delay(200);P2=0xEF;Delay(200);P2=0xFF;//關(guān)閉顯示}/*****顯示溫度子程序*****/voidDisp_Temperature(void)//顯示溫度{P0=0x98;//顯示CP2=0x7F;Delay(400);P0=LEDData[n];//顯示個位P2=0xBF;Delay(400);P0=LEDData[m%10];//顯示十位DIAN=1;//顯示小數(shù)點(diǎn)P2=0xDF;Delay(400);P0=LEDData[m/10];//顯示百位P2=0xEF;Delay(400);P2=0xff;//關(guān)閉顯示}/*****顯示報警溫度子程序*****/voidDisp_alarm(ucharbaojing){P0=0x98;//顯示CP2=0x7F;Delay(200);P0=LEDData[baojing%10];//顯示十位P2=0xBF;Delay(200);P0=LEDData[baojing/10];//顯示百位P2=0xDF;Delay(200);if(set_st==1)P0=0xCE;elseif(set_st==2)P0=0x1A;//上限H、下限L標(biāo)示P2=0xEF;Delay(200);P2=0xff;//關(guān)閉顯示}/*****報警子程序*****/voidAlarm(){if(x>=10){beep_st=~beep_st;x=0;}if((m>=shangxian&&beep_st==1)||(m<xiaxian&&beep_st==1)){ BEEP=0; ALAM=0;}else{ BEEP=1; ALAM=1;}}/*****主函數(shù)*****/voidmain(void){uintz;InitTimer();//初始化定時器EA=1;//全局中斷開關(guān)TR0=1;ET0=1;//開啟定時器0IT0=1;IT1=1;check_wendu();check_wendu();for(z=0;z<300;z++){Disp_init();}while(1){if(SET==0){Delay(2000);do{}while(SET==0);set_st++;x=0;shanshuo_st=1;if(set_st>2)set_st=0;}if(set_st==0){

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論