版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 溫度控制器課程設(shè)計書</p><p><b> 1 前言</b></p><p> 社會在發(fā)展,科技在進(jìn)步,測溫儀器在各個領(lǐng)域的應(yīng)用,各種溫度控制系統(tǒng)迅速發(fā)展。近年來,溫度控制系統(tǒng)已廣泛應(yīng)用各個方面,然而溫度控制一直是一個未開發(fā)的領(lǐng)域,卻又是與人們息息相關(guān)的一個實(shí)際問題。針對這種實(shí)際情況,設(shè)計一個溫度控制系統(tǒng),具有廣泛的應(yīng)用前景與實(shí)際意義。&
2、lt;/p><p> 溫度是一個重要的物理量,它反映了物體的冷熱程度,與自然界中的各種物理與化學(xué)過程相聯(lián)系,再生產(chǎn)過程中,各個環(huán)節(jié)都與溫度有緊密聯(lián)系,因此人們非常重視溫度的測量。溫度概念的產(chǎn)生及溫度的測量都是以熱平衡為基礎(chǔ),當(dāng)兩個冷熱程度不同的物體接觸后就會產(chǎn)生導(dǎo)熱,換熱,換熱結(jié)束后兩物體處于平衡狀態(tài),因此他們具有最本質(zhì)的性質(zhì)。</p><p> 溫度控制系統(tǒng)對溫度進(jìn)行檢測和控制,任何工廠
3、在生產(chǎn)過程中如果沒有合適的溫度環(huán)境,很多的器件甚至是電子設(shè)備都不能正常的工作,從而多生產(chǎn)的產(chǎn)品質(zhì)量有很大的影響,所以各行各業(yè)對溫度的要求的愈來愈高,所以,溫度控制系統(tǒng)的作用非常重要。</p><p> 溫度控制系統(tǒng)的控制系統(tǒng)是溫度,在我們?nèi)粘I钪校瑴囟瓤刂剖狗浅V匾?,在溫室、水池、電源等場所不能對溫度有效的控制,則會出現(xiàn)很多事故,所以為了避免此類事故的發(fā)生,溫度控制應(yīng)當(dāng)受到重視。</p>&l
4、t;p> 本設(shè)計不僅實(shí)現(xiàn)了對溫度的檢測,還實(shí)現(xiàn)了溫度控制、顯示功能,當(dāng)溫度大于設(shè)定的溫度時,報警器報警;當(dāng)溫度小于設(shè)定的值時,報警器不報警,從而實(shí)現(xiàn)對溫度的控制,并且還可以實(shí)現(xiàn)按鍵復(fù)位功能。</p><p><b> 2 總體方案</b></p><p><b> 方案一</b></p><p> 溫度測量的
5、設(shè)計,可以采用熱敏溫度傳感器等對溫度進(jìn)行測量,在將被測溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示液晶顯示屏上,就可以將被測溫度顯示出來,這種設(shè)計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。運(yùn)用這種方案時模擬信號在傳輸過程中存在損耗并且容易受到外界的干擾,導(dǎo)致測量溫度不準(zhǔn)確。</p><p> 圖2.1溫度檢測流程圖</p><p><b>
6、; 方案二</b></p><p> 使用溫度傳感器DS18B20直接對溫度進(jìn)行檢測和轉(zhuǎn)換,在結(jié)合89C52單片機(jī)與1602液晶顯示器就能對溫度進(jìn)行顯示。</p><p> 比較以上兩種方案,很容易看出,采用方案二,電路比較簡單,軟件設(shè)計容易實(shí)現(xiàn),故實(shí)際設(shè)計中擬采用方案二。</p><p> 本設(shè)計方框圖如圖1.1所示,它由四部分組成:①控制部分
7、主芯片采用單片機(jī)89C52;②顯示部分采用LCD1602液晶顯示器實(shí)現(xiàn)溫度顯示;③溫度采集部分采用DS18B20溫度傳感器。④報警裝置</p><p> 圖2.2 溫度控制電路總體設(shè)計方案</p><p> DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,完成對溫度信號的采集和轉(zhuǎn)換工作,數(shù)字溫度傳感器DS18B20把采集到的溫度通過P1.7引腳傳
8、到單片機(jī),單片機(jī)接受溫度并存儲并通過P0口連接LCD160數(shù)字液晶顯示器顯示。通過P1.0口接報警裝置,實(shí)現(xiàn)報警功能。</p><p><b> 3 單元模塊設(shè)計</b></p><p> 3.1 DS18B20溫度檢測電路</p><p> 圖3.1溫度檢測電路</p><p> 溫度檢測電路采用智能溫度傳感
9、器DS18B20,它與單片機(jī)相連只需要3線,減少了外部的硬件電路。DS18B20主要性能特點(diǎn)如下:</p><p> (1)測溫的范圍為-55~125℃,最大分辨率可以達(dá)到0.0625℃;</p><p> (2)電源電壓范圍為3.0~5.5V;</p><p> (3)供電模式:寄生供電和外部供電;</p><p> (4)封裝形式
10、有兩種:3腳的TO-92封裝和8腳的SOIC封裝;</p><p> (5)可編程的溫度轉(zhuǎn)換分辨率,分辨率為9~12位(包括1位符號位),由配置寄存器決定具體位數(shù),配置寄存器的格式如表3-1所示。 </p><p> 表3-1 配置寄存器格式</p><p> 其中R1 R0是用來設(shè)定分辨率的,分辨率的定義如表3-2所示。</p><p&g
11、t; 表3-2 DS18B20分辨率的定義</p><p> 由表3-2可以看出,分辨率設(shè)定得越高,溫度轉(zhuǎn)換所需要的時間就越長,因此應(yīng)根據(jù)實(shí)際應(yīng)用的需要來選擇合適的分辨率。本文中選取12位分辨率,每隔1秒檢測一次溫度。 </p><p><b> 3.2單片機(jī)電路</b></p><p> 單片機(jī)電路如圖3.2所示,</p>
12、<p><b> 圖3.2單片機(jī)電路</b></p><p> AT89C52是一款超強(qiáng)抗干擾/高速/低功耗的單片機(jī),AT89C52是一個低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置
13、通用8位中央處理器和Flash存儲單元,功能強(qiáng)大的AT89C52單片機(jī)可為您提供許多較復(fù)雜系統(tǒng)控制應(yīng)用場合。</p><p> AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,2個讀寫口線,AT89C52可以按照常規(guī)方法進(jìn)行編程,但不可以在線編程(S系列的才支持在線編程)。其將通用的微處理器和Flash存儲器結(jié)合在一起,
14、特別是可反復(fù)擦寫的Flash存儲器可有效地降低開發(fā)成本。</p><p><b> 3.3顯示電路</b></p><p> 顯示模塊采用的是LCD1602液晶顯示如圖3.3。單片機(jī)微控制器通過對當(dāng)前溫度傳感器進(jìn)行讀取獲得當(dāng)前溫度值,通過一定的運(yùn)算后經(jīng)LCD1602液晶顯示屏顯示出來。芯片的工作電壓是4.5—5.5V,能顯示兩行,每行顯示16個字符。除電壓、背光引
15、腳及8個I/O引腳外,主要的控制引腳還有數(shù)據(jù)/命令選擇RS引腳,該引腳為高電平時表示I/O引腳出現(xiàn)的是數(shù)據(jù),該引腳為低電平時表示I/O引腳出現(xiàn)的是命令;讀/寫選擇引腳及使能引腳E(該引腳為高電平時對LCD1602的操作才有效)。</p><p> 圖3.3 LCD1602液晶顯示</p><p><b> 3.4報警電路</b></p><p&
16、gt; 報警電路采用蜂鳴器作為發(fā)生裝置,當(dāng)溫度高于設(shè)定的上限值時,蜂鳴器發(fā)出報警聲作為提醒,蜂鳴器會一直發(fā)出聲音直到溫度低于設(shè)定上限值。</p><p> 3.5 DS18B20溫度傳感器簡介</p><p> 3.5.1 溫度的采集和轉(zhuǎn)換</p><p> DS18B20的測溫原理如圖3.4所示,圖中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定
17、頻率的脈沖信號送給減法計數(shù)器1,高溫度系數(shù)晶振隨溫度變化其震蕩頻率明顯改變,所產(chǎn)生的信號作為減法計數(shù)器2的脈沖輸入,圖中還隱含著計數(shù)門,當(dāng)計數(shù)門打開時,DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖后進(jìn)行計數(shù),進(jìn)而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55 ℃所對應(yīng)的基數(shù)分別置入減法計數(shù)器1和溫度寄存器中,減法計數(shù)器1和溫度寄存器被預(yù)置在-55 ℃所對應(yīng)的一個基數(shù)值。減法計數(shù)器1對低溫度系數(shù)晶振產(chǎn)
18、生的脈沖信號進(jìn)行減法計數(shù),當(dāng)減法計數(shù)器1的預(yù)置值減到0時溫度寄存器的值將加1,減法計數(shù)器1的預(yù)置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到減法計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。斜坡式累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正減法計數(shù)器的預(yù)置值,只要計數(shù)門仍未關(guān)閉就重復(fù)上述過程,直至溫度寄存器值達(dá)到被測溫度值。</p>&l
19、t;p> 圖3.4 溫度測量電路</p><p> DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機(jī)可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。</p><p> 當(dāng)符號位S=0時,表示測得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)
20、換為十進(jìn)制;當(dāng)符號位S=1時,表示測得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計算十進(jìn)制數(shù)值,表3-3是一部分溫度值對應(yīng)的二進(jìn)制溫度數(shù)據(jù)。</p><p> 表3-3 溫度與數(shù)據(jù)的關(guān)系</p><p> 3.5.2 DS18B20的工作原理</p><p> DS18B20的共做時序</p><p><b> (1)初始化時
21、序</b></p><p> 圖 3.5 初始化時序圖</p><p> 總線上的所有傳輸過程都是以初始化開始的,主機(jī)響應(yīng)應(yīng)答脈沖。應(yīng)答脈沖使主機(jī)知道,總線上有從機(jī)設(shè)備,且準(zhǔn)備就緒。主機(jī)輸出低電平,保持低電平時間至少480us,以產(chǎn)生復(fù)位脈沖。接著主機(jī)釋放總線,上拉電阻將總線拉高,延時15~60us,并進(jìn)入接受模式,以產(chǎn)生低電平應(yīng)答脈沖,若為低電平,再延時480us。<
22、;/p><p><b> ( 2 ) 寫時序</b></p><p><b> 圖3.6 寫時序圖</b></p><p> 當(dāng)主機(jī)把數(shù)據(jù)線從邏輯高電平拉到低電平的時候,寫時序開始。有兩種情況,寫1時間間隙和寫0時間間隙,所以寫時間間隙最少持續(xù)60us,包括兩個寫周期至少1us的恢復(fù)時間,I/O線電平變低后,DS18B2
23、0在一個5us到60us的窗口內(nèi)對I/O線采樣,如果線上時高電平,就是寫1,如果線上是低電平,就是寫0。</p><p><b> ?。?) 讀時序</b></p><p><b> 圖3.7 讀時序圖</b></p><p> 總線器件僅在主機(jī)發(fā)出讀時序是,才向主機(jī)傳輸數(shù)據(jù),所以,在主機(jī)發(fā)出讀數(shù)據(jù)命令后,必須馬上產(chǎn)生
24、讀時序,以便從機(jī)能夠傳輸數(shù)據(jù)。所有讀時序至少需要60us。當(dāng)主機(jī)把高電平拉到低電平時寫時間開始,在2次獨(dú)立的讀時序之間至少需要1us的恢復(fù)時間。每個時序都由主機(jī)發(fā)起,至少拉低總線1us。主機(jī)在讀時序期間必須釋放總線,并且在時序起始后的15us之內(nèi)采樣總線狀態(tài)。主機(jī)輸出低電平延時2us,然后主機(jī)轉(zhuǎn)入輸入模式延時12us,然后讀取總線當(dāng)前電平,然后延時50us。</p><p> DS18B20溫度流程</p
25、><p> 圖3.8 DS18B20溫度流程圖</p><p><b> ROM操作命令</b></p><p> 表3-4 ROM操作命令</p><p><b> 4 軟件設(shè)計</b></p><p> 高級語言是面向問題和計算過程的語言,它可通過于各種不同的計算
26、機(jī),用戶編程時不必仔細(xì)了解所用的計算機(jī)的具體性能與指令系統(tǒng),而且語句的功能強(qiáng),常常一個語句已相當(dāng)于很多條計算機(jī)指令,于是用高級語言編制程序的速度比較快,也便于學(xué)習(xí)和交流,而MCS—52指令系統(tǒng)的指令長度較短,它在存儲空間和執(zhí)行時間方面具有較高的效率,編成的程序占用內(nèi)存單元少,執(zhí)行也非常的快捷,與本系統(tǒng)的應(yīng)用要求很適合。而且MCS—52指令系統(tǒng)有豐富的位操作(或稱位處理)指令,可以形成一個相當(dāng)完整的位操作指令子集,這是MCS—52指令系統(tǒng)
27、主要的優(yōu)點(diǎn)之一。對于要求反應(yīng)靈敏與控制及時的工控、檢測等實(shí)時控制系統(tǒng)以及要求體積小、系統(tǒng)小的許多“電腦化”產(chǎn)品,可以充分體現(xiàn)出匯編語言簡明、整齊、執(zhí)行時間短和易于使用的特點(diǎn)。</p><p> 圖4.1系統(tǒng)總流程圖</p><p> 系統(tǒng)程序主要有主程序和LCD1602初始化子程序及讀寫時序程序、DS18B20復(fù)位及讀寫時序子程序溫度數(shù)字處理子程。</p><p&g
28、t; 4.1 系統(tǒng)調(diào)試讀出溫度子程序</p><p> 圖4.2讀出溫度子程序</p><p> 讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進(jìn)行CRC校驗,校驗有錯時不進(jìn)行溫度數(shù)據(jù)的改寫。 DS18B20的各個命令對時序的要求特別嚴(yán)格,所以必須按照所要求的時序才能達(dá)到預(yù)期的目的,同時,要注意讀進(jìn)來的是高位在后低位在前,共有12位數(shù),小數(shù)4位,整數(shù)7位,還有一位符號位。
29、</p><p> 4.2 系統(tǒng)調(diào)試寫入子程序</p><p> 圖4.3寫入子程序流程圖</p><p><b> 5 系統(tǒng)調(diào)試</b></p><p> 硬件調(diào)試是對溫度顯示器LCD1602進(jìn)行調(diào)試,溫度顯示器通電后不顯示溫度,使用示波器對LCD1602、單片機(jī)的每個管腳進(jìn)行測試,對其進(jìn)行分析是由于電阻值過大
30、,調(diào)節(jié)滑動變阻器減小其阻值,液晶顯示器顯示溫度為0。</p><p> 軟件調(diào)試是在溫度大于31℃,而報警器不報警,經(jīng)檢查,發(fā)現(xiàn)是溫度寫成31000。多寫了兩個0,改正過后又發(fā)現(xiàn)報警器在溫度大于31℃時,只響一次。把如下程序的=改為〉就排出了這個異常。</p><p> void main()</p><p><b> { </b><
31、;/p><p> init_play();//初始化顯示</p><p><b> while(1)</b></p><p><b> {</b></p><p> read_temp();//讀取溫度</p><p> ds1820disp();//顯示</p&
32、gt;<p> if(tvalue>310)</p><p><b> Beef=0;</b></p><p><b> else</b></p><p><b> Beef=1;</b></p><p><b> }</b>
33、</p><p><b> }</b></p><p><b> 6 總結(jié)與體會</b></p><p> 本設(shè)計使用的溫度控制器結(jié)構(gòu)簡單、測溫準(zhǔn)確,具有一定的實(shí)際應(yīng)用價值。該溫度控制器只是DS18B20在溫度控制領(lǐng)域的一個簡單實(shí)例,還有許多需要完善的地方,例如可以將測得的溫度通過單片機(jī)與通訊模塊相連接,以手機(jī)短消息
34、的方式發(fā)送給用戶,使用戶能夠隨時對溫度進(jìn)行監(jiān)控。此外,還能廣泛地應(yīng)用于其他一些工業(yè)生產(chǎn)領(lǐng)域,如建筑,倉儲等行業(yè)。本溫度控制系統(tǒng)可以應(yīng)用于多種場合,像育嬰房的溫度、水溫的控制。用戶可靈活選擇本設(shè)計的用途,有很強(qiáng)的實(shí)用價值。 </p><p> 通過這次課程設(shè)計,讓我對單片機(jī)有了進(jìn)一步的了解、鞏固和加深,并且對所學(xué)知識的得以實(shí)際應(yīng)用。與我所學(xué)芯片再一次零距離接觸,進(jìn)一步加深我對各個芯片的功能和特性的了解。</
35、p><p> 微機(jī)控制與接口技術(shù)課程設(shè)計是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn)、提出、分析和解決實(shí)際問題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過程.回顧起此次課程設(shè)計,至今我仍感慨頗多,的確,從選題到定稿,從理論到實(shí)踐,在短短的兩個星期的日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時不僅可以鞏固以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次微機(jī)控制與接口技術(shù)的
36、課程設(shè)計使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,從而提高自己的實(shí)際動手能力和獨(dú)立思考的能力。</p><p> 在此次溫度控制器的設(shè)計過程中,讓我了解到了現(xiàn)代電子產(chǎn)品的設(shè)計和工作原理。以前在實(shí)際生活中看到的電子產(chǎn)品例如彩燈、交通燈、電磁爐、電飯煲等,就只會用他們并不知道他們的工作原理,通過這次課程設(shè)計對這些產(chǎn)品的原理有了深入的了解。
37、</p><p> 同時這次課程設(shè)計大大提高了我的動手能力,為我以后的工作和學(xué)習(xí)奠定了基礎(chǔ),在以后的生活中我也可以用我所學(xué)的知識和對芯片功能的了解來設(shè)計一些日常生活所需的電子產(chǎn)品。</p><p> 實(shí)訓(xùn)時間很短,但是通過這次實(shí)訓(xùn)可以學(xué)到很多書本沒有的東西,有了這一次的實(shí)踐經(jīng)驗,我們的動手能力和思維能力也相應(yīng)的得到了的提高,這次實(shí)訓(xùn)進(jìn)一步鍛煉了自己的邏輯思維能力,并從中總結(jié)出寶貴的經(jīng)驗
38、。</p><p> 最后,在此感謝陳老師的細(xì)心指導(dǎo),也同樣謝謝其他各位同學(xué)的無私幫助!</p><p><b> 7參考文獻(xiàn)</b></p><p> [1].張毅剛主編.單片機(jī)原理及應(yīng)用.北京:高等教育出版社.2003;</p><p> [2].曹承志 等主編.微型計算機(jī)控制技術(shù).北京:化學(xué)工業(yè)出版社.20
39、08;</p><p> [3].康華光主編.電子技術(shù)基礎(chǔ)模擬部分(第五版).北京:高等教育出版社.2006;</p><p> [4].譚浩強(qiáng)著.C程序設(shè)計.北京:清華大學(xué)出版社.2005;</p><p> [5].王心水主編.一種基于單片機(jī)的多功能溫度控制器額設(shè)計. 曲阜師范大學(xué)信息技術(shù)與傳播學(xué)院;</p><p> [6].胡
40、學(xué)海主編.單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計[M].北京:京電子工業(yè)出版社.2005;</p><p> [7].李廣弟.單片機(jī)基礎(chǔ)[M].北京:北航出版社.2010。</p><p><b> 附錄:設(shè)計程序</b></p><p> /*********Main.c***********/</p><p> #incl
41、ude<reg52.h></p><p> #include"ds1820.h"</p><p> #include"1602.h"</p><p> sbit Beef=P1^1;</p><p> extern uchar disdata[5];</p><p
42、> extern uint tvalue;//溫度值</p><p> extern uchar tflag;//溫度正負(fù)標(biāo)志</p><p> /********************************************************</p><p> 功 能:將18B20采集的溫度數(shù)據(jù)在1602顯示出來 *&l
43、t;/p><p> 輸入?yún)?shù):無*</p><p> 返 回 值:無*</p><p> *********************************************************/</p><p> void ds1820disp()//溫度值顯示</p><
44、;p><b> { </b></p><p> uchar flagdat;</p><p> disdata[0]=tvalue/1000+0x30;//百位數(shù)</p><p> disdata[1]=tvalue%1000/100+0x30;//十位數(shù)</p><p> disdata[2]=tval
45、ue%100/10+0x30;//個位數(shù)</p><p> disdata[3]=tvalue%10+0x30;//小數(shù)位</p><p> if(tflag==0)</p><p> flagdat=0x20;//正溫度不顯示符號</p><p><b> else</b></p><p&g
46、t; flagdat=0x2d;//負(fù)溫度顯示負(fù)號:-</p><p> if(disdata[0]==0x30)</p><p><b> {</b></p><p> disdata[0]=0x20;//如果百位為0,不顯示</p><p> if(disdata[1]==0x30)</p>
47、<p><b> {</b></p><p> disdata[1]=0x20;//如果百位為0,十位為0也不顯示</p><p><b> }</b></p><p><b> }</b></p><p> wr_com(0xc0);</p>
48、<p> wr_dat(flagdat);//顯示符號位</p><p> wr_com(0xc1);</p><p> wr_dat(disdata[0]);//顯示百位</p><p> wr_com(0xc2);</p><p> wr_dat(disdata[1]);//顯示十位 </p><
49、;p> wr_com(0xc3);</p><p> wr_dat(disdata[2]);//顯示個位 </p><p> wr_com(0xc4);</p><p> wr_dat(0x2e);//顯示小數(shù)點(diǎn) </p><p> wr_com(0xc5);</p><p> wr_dat(di
50、sdata[3]);//顯示小數(shù)位</p><p><b> }</b></p><p> /********************主程序***********************************/</p><p> void main()</p><p><b> { </b>
51、;</p><p> init_play();//初始化顯示</p><p><b> while(1)</b></p><p><b> {</b></p><p> read_temp();//讀取溫度</p><p> ds1820disp();//顯示<
52、;/p><p> if(tvalue>310)</p><p><b> Beef=0;</b></p><p><b> else</b></p><p><b> Beef=1;</b></p><p><b> }</b
53、></p><p><b> }</b></p><p> /********** DS1820.C***********/</p><p> #include<reg52.h></p><p> #include"ds1820.h"</p><p>
54、 uchar disdata[5];</p><p> uint tvalue;//溫度值</p><p> uchar tflag;//溫度正負(fù)標(biāo)志</p><p> void delay_18B20(unsigned int i)//延時1微秒</p><p><b> {</b></p>&
55、lt;p> while(i--);</p><p><b> }</b></p><p> /********************************************************</p><p> 功 能:ds1820復(fù)位 *</p><p><b> 輸
56、入?yún)?shù):無</b></p><p> 返 回 值:無*</p><p> *********************************************************/</p><p> void ds1820rst()/*ds1820復(fù)位*/</p><p><b> { &
57、lt;/b></p><p> unsigned char x=0;</p><p> DQ = 1; //DQ復(fù)位</p><p> delay_18B20(4); //延時</p><p> DQ = 0; //DQ拉低</p><p> delay_18B20
58、(100); //精確延時大于480us</p><p> DQ = 1; //拉高</p><p> delay_18B20(40); </p><p><b> } </b></p><p> /**********************************************
59、**********</p><p> 功 能:ds1820讀數(shù)據(jù) *</p><p><b> 輸入?yún)?shù):無</b></p><p> 返 回 值:dat*</p><p> *******************************************************
60、**/</p><p> uchar ds1820rd()/*讀數(shù)據(jù)*/</p><p><b> { </b></p><p> unsigned char i=0;</p><p> unsigned char dat = 0;</p><p> for (i=8;i>0;i-
61、-)</p><p><b> { </b></p><p> DQ = 0; //給脈沖信號</p><p><b> dat>>=1;</b></p><p> DQ = 1; //給脈沖信號</p><p><b> if(DQ)<
62、/b></p><p> dat|=0x80;</p><p> delay_18B20(10);</p><p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p>
63、 /********************************************************</p><p> 功 能:ds1820寫數(shù)據(jù) *</p><p> 輸入?yún)?shù):wdata</p><p> 返 回 值:無*</p><p> ***********************
64、**********************************/</p><p> void ds1820wr(uchar wdata)/*寫數(shù)據(jù)*/</p><p><b> {</b></p><p> unsigned char i=0;</p><p> for (i=8; i>0; i--)
65、</p><p><b> { </b></p><p><b> DQ = 0;</b></p><p> DQ = wdata&0x01;</p><p> delay_18B20(10);</p><p><b> DQ = 1;</b
66、></p><p> wdata>>=1;</p><p><b> }</b></p><p><b> }</b></p><p> /********************************************************</p>
67、<p> 功 能:ds1820讀取溫度 *</p><p><b> 輸入?yún)?shù):無</b></p><p> 返 回 值:tvalue*</p><p> *********************************************************/</p>&l
68、t;p> uint read_temp()/*讀取溫度值并轉(zhuǎn)換*/</p><p><b> {</b></p><p> uchar a,b;</p><p> ds1820rst(); </p><p> ds1820wr(0xcc);//*跳過讀序列號*/</p><p&
69、gt; ds1820wr(0x44);//*啟動溫度轉(zhuǎn)換*/</p><p> ds1820rst(); </p><p> ds1820wr(0xcc);//*跳過讀序列號*/ </p><p> ds1820wr(0xbe);//*讀取溫度*/ </p><p> a=ds1820rd();</p><
70、p> b=ds1820rd();</p><p><b> tvalue=b;</b></p><p> tvalue<<=8;</p><p> tvalue=tvalue|a;</p><p> if(tvalue<0x0fff)</p><p><b&
71、gt; tflag=0;</b></p><p><b> else</b></p><p><b> {</b></p><p> tvalue=~tvalue+1;</p><p><b> tflag=1;</b></p><p&
72、gt;<b> }</b></p><p> tvalue=tvalue*(0.625);//溫度值擴(kuò)大10倍,精確到1位小數(shù)</p><p> return(tvalue);</p><p><b> }</b></p><p> /********1602.C*********/<
73、;/p><p> #include"1602.h"</p><p> unsigned char code str1[]={"temperature: "};</p><p> unsigned char code str2[]={" "}; </p><p
74、> /*************************lcd1602程序**************************/</p><p> void delay1ms(unsigned int ms)//延時1毫秒(不夠精確的)</p><p><b> {</b></p><p> unsigned int i,j;&l
75、t;/p><p> for(i=0;i<ms;i++)</p><p> for(j=0;j<100;j++);</p><p><b> }</b></p><p> /********************************************************</p>
76、<p> 功 能:寫指令 *</p><p> 輸入?yún)?shù):com:命令*</p><p> 返 回 值:無*</p><p> *********************************************************/</p><p> void
77、 wr_com(unsigned char com)//寫指令//</p><p><b> { </b></p><p> delay1ms(1);</p><p><b> RS=0;</b></p><p><b> RW=0;</b></p>&
78、lt;p><b> EN=0;</b></p><p><b> P0=com;</b></p><p> delay1ms(1);</p><p><b> EN=1;</b></p><p> delay1ms(1);</p><p>
79、;<b> EN=0;</b></p><p><b> }</b></p><p> /********************************************************</p><p> 功 能:寫數(shù)據(jù) *</p><p> 輸入?yún)?shù):dat
80、:數(shù)據(jù)</p><p> 返 回 值:無*</p><p> *********************************************************/</p><p> void wr_dat(unsigned char dat)//寫數(shù)據(jù)//</p><p><b> { <
81、;/b></p><p> delay1ms(1);;</p><p><b> RS=1;</b></p><p><b> RW=0;</b></p><p><b> EN=0;</b></p><p><b> P0=d
82、at;</b></p><p> delay1ms(1);</p><p><b> EN=1;</b></p><p> delay1ms(1);</p><p><b> EN=0;</b></p><p><b> }</b>
83、</p><p> /********************************************************</p><p> 功 能://初始化設(shè)置// *</p><p><b> 輸入?yún)?shù):無</b></p><p> 返 回 值:無*</p>
84、<p> *********************************************************/</p><p> void lcd_init()//初始化設(shè)置//</p><p><b> {</b></p><p> delay1ms(15);</p><p>
85、wr_com(0x38);delay1ms(5);</p><p> wr_com(0x08);delay1ms(5);</p><p> wr_com(0x01);delay1ms(5);</p><p> wr_com(0x06);delay1ms(5);</p><p> wr_com(0x0c);delay1ms(5);<
86、;/p><p><b> }</b></p><p> /********************************************************</p><p> 功 能:1602顯示 *</p><p> 輸入?yún)?shù):字符串的首地址</p><p> 返
87、 回 值:無*</p><p> *********************************************************/</p><p> void display(unsigned char *p)//顯示//</p><p><b> {</b></p><p>
88、while(*p!='\0')</p><p><b> {</b></p><p> wr_dat(*p);</p><p><b> p++;</b></p><p> delay1ms(1);</p><p><b> }</b
89、></p><p><b> }</b></p><p> /********************************************************</p><p> 功 能:1602初始化顯示 *</p><p><b> 輸入?yún)?shù):無</b>&
90、lt;/p><p> 返 回 值:無*</p><p> *********************************************************/</p><p> void init_play()//初始化顯示</p><p><b> { </b></p>
91、<p> lcd_init();</p><p> wr_com(0x80);</p><p> display(str1);</p><p> wr_com(0xc0);</p><p> display(str2);</p><p> }據(jù)了解,很多廠家在使用溫度控制器的過程中,往往碰到慣性溫
92、度誤差的問題,苦于無法解決,依靠手工調(diào)壓來控制溫度。創(chuàng)新,采用了PID模糊控制技術(shù),較好地解決了慣性溫度誤差的問題。 傳統(tǒng)的溫度控制器,是利用熱電偶線在溫度化變化的情況下,產(chǎn)生變化的電流作為控制信號,對電器元件作定點(diǎn)的開關(guān)控制器。電腦控制溫度控制器:采用PID模糊控制技術(shù) *用先進(jìn)的數(shù)碼技術(shù)通過Pvar、Ivar、Dvar(比例、積分、微分)三方面的結(jié)合調(diào)整形成一個模糊控制來解決慣性溫度誤差問題。 傳統(tǒng)的溫度控制器的電熱元件一般以電熱
93、棒、發(fā)熱圈為主,兩者里面都用發(fā)熱絲制成。發(fā)熱絲通過電流加熱時,通常達(dá)到1000℃以上,所以發(fā)熱棒、發(fā)熱圈內(nèi)部溫度都很高。一般進(jìn)行溫度控制的電器機(jī)械,其控制溫度多在0-400℃之間,所以,傳統(tǒng)的溫度控制器進(jìn)行溫度控制期間,當(dāng)被加熱器件溫度升高至設(shè)定溫度時,溫度控制器會發(fā)出信號停止加熱。但這時發(fā)熱棒或發(fā)熱圈的內(nèi)部溫度會高于400℃,發(fā)熱棒、發(fā)熱圈還將會對被加熱的器件進(jìn)行加熱,即使溫度控制器發(fā)出信號停止加熱,被加熱器件的溫度還往往繼續(xù)上升幾度
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 溫度控制器課程設(shè)計
- 智能溫控器課程設(shè)計--溫度控制器設(shè)計
- 單片機(jī)課程設(shè)計--溫度控制器的設(shè)計
- 電路課程設(shè)計--- 溫度測量域控制器的設(shè)計
- 溫度的測量與控制器的設(shè)計課程設(shè)計
- 課程設(shè)計---溫度的測量與控制器的設(shè)計
- 路燈控制器課程設(shè)計
- 彩燈控制器課程設(shè)計
- 電梯控制器課程設(shè)計
- 彩燈控制器課程設(shè)計
- 課程設(shè)計-- 彩燈控制器
- 基于單片機(jī)實(shí)現(xiàn)的溫度控制器課程設(shè)計
- 單片機(jī)數(shù)字傳感器課程設(shè)計-- 溫度控制器
- 路燈控制器課程設(shè)計
- 路燈控制器課程設(shè)計
- 彩燈控制器課程設(shè)計
- 彩燈控制器課程設(shè)計
- 彩燈控制器課程設(shè)計
- 課程設(shè)計--彩燈控制器
- 課程設(shè)計---順序控制器
評論
0/150
提交評論