版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 計(jì)算機(jī)系統(tǒng)與接口課程設(shè)計(jì)</p><p> 設(shè)計(jì)名稱: 溫度控制器</p><p><b> 姓 名: </b></p><p><b> 班 級(jí): </b></p><p><b> 學(xué) 號(hào): </b></p&g
2、t;<p><b> 指導(dǎo)教師: </b></p><p> 2010年 01 月 08 日</p><p> 一、溫度控制器的原理及功能</p><p> 如圖1-1所示此多點(diǎn)溫度測(cè)量電路主要由以下幾部分組成:兩個(gè)溫度傳感器DS18B20及其選擇開關(guān)電路,控制器單片機(jī)AT89S52、掃描驅(qū)動(dòng)電路、數(shù)碼管LED顯示器、報(bào)
3、警電路、報(bào)警溫度控制電路及電源電路等。</p><p> 圖1-1 多點(diǎn)溫度計(jì)組成方框圖</p><p> 溫度傳感器從測(cè)試點(diǎn)采集溫度,然后把溫度轉(zhuǎn)換成電壓(或電流),溫度傳感器輸出電壓的大小隨溫度的高低變化而變化,電壓值的變化范圍從幾個(gè)微伏到幾個(gè)毫伏,不同的溫度傳感器,輸出電壓的范圍也差別很大。單片機(jī)AT89S52是多點(diǎn)溫度測(cè)量電路的控制核心,它將采集到的數(shù)字溫度電壓值,經(jīng)過計(jì)算處理
4、,得到相應(yīng)的溫度值,經(jīng)掃描驅(qū)動(dòng)送到LED顯示器以數(shù)字形式顯示測(cè)量的溫度。LED顯示器用于顯示測(cè)量溫度的結(jié)果。報(bào)警溫度控制電路用于在不同應(yīng)用中靈活設(shè)定報(bào)警溫度,在超過設(shè)定范圍時(shí),報(bào)警電路進(jìn)行報(bào)警。</p><p> 二、系統(tǒng)硬件電路的設(shè)計(jì)</p><p> 2.1 多點(diǎn)溫度測(cè)量電路</p><p> 多點(diǎn)溫度測(cè)量電路如圖2-1所示由主控器單片機(jī)AT89S52作為
5、多點(diǎn)溫度測(cè)量電路的核心,溫度傳感器DS18B20負(fù)責(zé)從測(cè)量點(diǎn)采集溫度,四位共陽(yáng)LED數(shù)碼管以動(dòng)態(tài)掃描法實(shí)現(xiàn)溫度顯示。</p><p> 2.1.1 DS18B20單線智能溫度傳感器的工作原理</p><p> (1) DS18B20單線智能溫度傳感器的性能特點(diǎn)</p><p> DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最近推出的一種改進(jìn)型智能溫度傳
6、感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過簡(jiǎn)單的編程實(shí)現(xiàn)9-12位的數(shù)字值讀數(shù)方式。</p><p> DS18B20的性能特點(diǎn)如下:</p><p> 獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;</p><p> 多個(gè)DS18B20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;</p><p>&l
7、t;b> 無(wú)須外接部件;</b></p><p> 可通過數(shù)據(jù)供電,電壓范圍為3.0—5.5V;</p><p><b> 零待機(jī)功耗;</b></p><p> 溫度以9或12位數(shù)字量讀出;</p><p> 用戶可定義的非易失性溫度報(bào)警設(shè)置;</p><p> 報(bào)
8、警搜索命令識(shí)別并標(biāo)志超過程序限定溫度(溫度報(bào)警條件)的器件;</p><p> 負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒壞,但不能正常工作.</p><p> (2) DS18B20的內(nèi)部結(jié)構(gòu)框圖如圖2—4 所示,它采用3腳PR—35封裝或8腳SOIC封裝其管腳封裝如圖2-5所示。</p><p> (3) DS18B20單線智能溫度傳感器的工作原理&
9、lt;/p><p> 64位ROM的位結(jié)構(gòu)如圖2—6 所示。開始8位是產(chǎn)品類型的編號(hào),接著是每個(gè)器件的惟一的序號(hào),共有48位,最后8位是前面56位的CRC檢驗(yàn)碼,這也是多個(gè) DS18B20可以采用一線進(jìn)行通信的原因。非易失性溫度報(bào)警觸發(fā)器TH和TL,可通過軟件寫入戶報(bào)警上下限。</p><p> DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器還包括一個(gè)高速暫存RAM和一個(gè)非易失性的可</p&g
10、t;<p> 電擦除的EEPRAM。高速暫存RAM的結(jié)構(gòu)為8字節(jié)的存儲(chǔ)器,結(jié)構(gòu)如圖3—7 所示。</p><p> 圖2-4 DS18B20內(nèi)部結(jié)構(gòu)</p><p> 圖2-5 DS18B20的引腳排列</p><p> 頭2個(gè)字節(jié)包含測(cè)得的溫度信息,第3和第4字節(jié)是TH和TL的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié)為配置寄存器,它的
11、內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時(shí)按此寄存器中的分辨率將溫度轉(zhuǎn)換為相應(yīng)精度的數(shù)值。該字節(jié)各位的定義如圖3-8所示。低5位一直為1,TM是測(cè)試模式位,用于設(shè)置DS18B20在工作模式還是在測(cè)試模式。在DS18B20 出廠時(shí)該位被設(shè)置為0,用戶不要改動(dòng),R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),即用來設(shè)置分辨率,方法見表3—3 。</p><p> MSB LSB M
12、SB LSB MSB LSB</p><p> 圖2—6 位64位ROM結(jié)構(gòu)圖</p><p> 由表3—3可見,DS18B20溫度轉(zhuǎn)換時(shí)間比較長(zhǎng),而且設(shè)定的分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間就越長(zhǎng)。因此,在實(shí)際應(yīng)用中要將分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮。</p><p> 高速暫存RAM的第6、7、8字節(jié)保留
13、未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來檢驗(yàn)數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。</p><p> 表2—3 DS18B20分辨率的定義規(guī)定</p><p><b> 1字節(jié)</b></p><p><b> 2字節(jié)</b></p><p><b> 3
14、字節(jié)</b></p><p><b> 4字節(jié) </b></p><p><b> 5字節(jié)</b></p><p><b> 6字節(jié)</b></p><p> 7字節(jié) EEPROM</p><p>&l
15、t;b> 8字節(jié)</b></p><p><b> 9字節(jié)</b></p><p> 圖3—7 高速暫存RAM結(jié)構(gòu)圖</p><p> 圖2-8 配置寄存器</p><p> 當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動(dòng)轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲(chǔ)在高
16、速暫存存儲(chǔ)器的第1、2字節(jié)。單片機(jī)可以通過單總線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時(shí)低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。溫度值格式如圖2—9 所示。</p><p> 當(dāng)符號(hào)位S=0時(shí),表示測(cè)得的溫度值為正值,可以直接將二進(jìn)制轉(zhuǎn)換為十進(jìn)制;當(dāng)符號(hào)位S=1時(shí),表示測(cè)得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計(jì)算十進(jìn)制值。表2—4 是一部分溫度值對(duì)應(yīng)的二進(jìn)制溫度數(shù)據(jù)。</p><p&
17、gt; DS18B20完成溫度轉(zhuǎn)換后,就把測(cè)得的溫度值與RAM中的TH、TL字節(jié)內(nèi)容做比較。若T>TH或T<TL,則將該器件內(nèi)的報(bào)警標(biāo)志位置位,并對(duì)主機(jī)發(fā)出的報(bào)警搜索命令做出響應(yīng)。因此,可用多只 DS18B20同時(shí)測(cè)量溫度并進(jìn)行報(bào)警搜索。</p><p><b> LS字節(jié)</b></p><p><b> MS字節(jié)</b>&l
18、t;/p><p> 圖2—9 溫度數(shù)據(jù)值格式</p><p> 在64位ROM的最高有效字節(jié)中存儲(chǔ)器循環(huán)冗余檢驗(yàn)碼(CRC)。主機(jī)根據(jù)ROM的前56位來計(jì)算CRC值,并和存入DS18B20的CRC值做比較,以判斷主機(jī)收到的ROM數(shù)據(jù)是否正確。</p><p> DS18B20的測(cè)溫原理如圖2—10所示.圖中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用它產(chǎn)生的信
19、號(hào)作為減法計(jì)數(shù)器1的脈沖輸入;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯變化,所以產(chǎn)生的信號(hào)作為減法計(jì)數(shù)器2的脈沖輸入。圖中還隱含著計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖進(jìn)行計(jì)數(shù),進(jìn)而完成溫度測(cè)量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器決定,每次測(cè)量前,首先將—55℃所對(duì)應(yīng)的一個(gè)基數(shù)分別置入減法計(jì)數(shù)器1和溫度寄存器中,減法計(jì)數(shù)器1和溫度寄存器被預(yù)置在—55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。</p><p&
20、gt; 減法計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置值將重新被裝入,減法計(jì)數(shù)器1重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值就是所測(cè)溫度值。圖2—10 中的斜率累加器用于溫度補(bǔ)償和修正測(cè)溫過程中的非線形性,其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)門仍未關(guān)閉就重復(fù)上述
21、過程,直到溫度寄存器值達(dá)到被測(cè)溫度值。</p><p> 另外,由于DS18B20單線通信功能是分時(shí)完成的,它有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)很重要。系統(tǒng)對(duì)DS18B20的各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖) 發(fā)ROM功能命令 發(fā)存儲(chǔ)器操作命令 處理數(shù)據(jù)。</p><p> (4) DS18B20與單片機(jī)的接口電路</p&g
22、t;<p> DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號(hào)線,3腳接電源。另一種是寄生電源方式,如圖2—11 所示。單片機(jī)端口接單總線,為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)MOSFET管來完成對(duì)總線的上拉。</p><p> 當(dāng)DS18B20處于寫存儲(chǔ)器操作和溫度A/D轉(zhuǎn)換操作時(shí),總線上必須有強(qiáng)的上拉,</
23、p><p> 表2—4 DS18B20溫度與測(cè)得值對(duì)應(yīng)表</p><p> 圖2—10 DS18B20測(cè)溫原理圖</p><p> 上拉開始時(shí)間最大為10μs。采用寄生電源供電方式時(shí)VDD和GND端均接地。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。</p><p> 圖2—11 DS18B20采用寄生電源的電路圖</p&g
24、t;<p><b> 2.2 顯示電路</b></p><p><b> 1602原理圖</b></p><p> LCD技術(shù)是把液晶灌入兩個(gè)列有細(xì)槽的平面之間。這兩個(gè)平面上的槽互相垂直(相交成90度)。也就是說,若一個(gè)平面上的分子南北向排列,則另一平面上的分子?xùn)|西向排列,而位于兩個(gè)平面之間的分子被強(qiáng)迫進(jìn)入一種90度扭轉(zhuǎn)的狀態(tài)
25、。由于光線順著分子的排列方向傳播,所以光線經(jīng)過液晶時(shí)也被扭轉(zhuǎn)90度。但當(dāng)液晶上加一個(gè)電壓時(shí),分子便會(huì)重新垂直排列,使光線能直射出去,而不發(fā)生任何扭轉(zhuǎn)。 LCD是依賴極化濾光器(片)和光線本身。自然光線是朝四面八方隨機(jī)發(fā)散的。極化濾光器實(shí)際是一系列越來越細(xì)的平行線。這些線形成一張網(wǎng),阻斷不與這些線平行的所有光線。極化濾光器的線正好與第一個(gè)垂直,所以能完全阻斷那些已經(jīng)極化的光線。只有兩個(gè)濾光器的線完全平行,或者光線本身已扭轉(zhuǎn)到與第二個(gè)極化
26、濾光器相匹配,光線才得以穿透。 LCD正是由這樣兩個(gè)相互垂直的極化濾光器構(gòu)成,所以在正常情況下應(yīng)該阻斷所有試圖穿透的光線。但是,由于兩個(gè)濾光器之間充滿了扭曲液晶,所以在光線穿出第一個(gè)濾光器后,會(huì)被液晶分子扭轉(zhuǎn)90度,最后從第二個(gè)濾光器中穿出。另一方面,若為液晶加一個(gè)電壓,分子又會(huì)重新排列并完全平行,使光線不再扭轉(zhuǎn),所以正好被第二個(gè)濾光器擋住。總</p><p><b> 2.3 報(bào)警電路</b
27、></p><p> 溫度報(bào)警電路采用NPN三極管、電阻和蜂鳴器組成。在設(shè)定報(bào)警溫度后,超出溫度范圍時(shí),由報(bào)警電路實(shí)現(xiàn)報(bào)警功能。</p><p> 圖 3—14 報(bào)警部分電路圖</p><p> 以上我們對(duì)多點(diǎn)溫度測(cè)量電路的硬件各部分電路溫度測(cè)量電路、報(bào)警電路等進(jìn)行了介紹,在下一章我們將對(duì)軟件部分進(jìn)行分析。</p><p> 三
28、、 系統(tǒng)軟件的設(shè)計(jì)</p><p> 系統(tǒng)程序主要包括主程序、讀出溫度子程序、溫度轉(zhuǎn)換命令子程序、計(jì)算溫度子程序、顯示數(shù)據(jù)刷新子程序等等。</p><p><b> 3.1 主程序</b></p><p> 主程序的主要功能是負(fù)責(zé)溫度的實(shí)際顯示、讀數(shù)并處理DS18B20的測(cè)量溫度值,溫度測(cè)量每1s進(jìn)行一次。其程序流程圖見圖3—1 。<
29、;/p><p> 3.2 讀出溫度子程序</p><p> 讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時(shí)需進(jìn)行CRC檢驗(yàn),校驗(yàn)有錯(cuò)時(shí)不進(jìn)行溫度數(shù)據(jù)的改寫。寫程序流程圖如圖3—2 所示。</p><p> 3.3 溫度轉(zhuǎn)換命令子程序</p><p> 溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,當(dāng)采用12位分辨率知轉(zhuǎn)換時(shí)間約75
30、0ms,在本程序設(shè)計(jì)中采用1s顯示程序延時(shí)法等待轉(zhuǎn)換的完成。溫度轉(zhuǎn)換命令子程序流程圖如圖3—3 所示。</p><p> 3.4 計(jì)算溫度子程序</p><p> 計(jì)算溫度子程序?qū)AM中讀取值進(jìn)行BCD碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖如圖3—4 所示。</p><p> 3.5 顯示數(shù)據(jù)刷新子程序</p><p>
31、 顯示數(shù)據(jù)刷新子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高顯示位為0將符號(hào)顯示位移入下一位。程序流程圖如圖4-5所示。</p><p> 圖 3-1 溫度計(jì)主程序流程圖 圖3-2 讀出溫度子程序流程圖</p><p> 圖3—3 溫度轉(zhuǎn)換命令子程序流程圖</p><p> 圖3—4 計(jì)算溫度子程序流程圖 圖3—5 顯示
32、數(shù)據(jù)刷新子程序流程圖</p><p> 3.6 溫度數(shù)據(jù)的計(jì)算處理方法</p><p> 從DS18B20讀取出的二進(jìn)制值必須先轉(zhuǎn)換成十進(jìn)制值,才能用于字符顯示。因?yàn)镈S18B20的轉(zhuǎn)換精度為9到12位可選的,為了提高精度選取12位。在采用12位轉(zhuǎn)換精度時(shí),溫度寄存器里的值是以0.0625為步進(jìn)的,即溫度值為溫度寄存器里的二進(jìn)制值乘以0.0625,就是實(shí)際的十進(jìn)制溫度值。</p&
33、gt;<p> 通過觀察表3—1可以發(fā)現(xiàn)一個(gè)十進(jìn)制值和二進(jìn)制值之間有很明顯的關(guān)系,就是把二進(jìn)制的高字節(jié)的低半字節(jié)和低字節(jié)的高半字節(jié)組成一個(gè)字節(jié),這個(gè)字節(jié)的二進(jìn)制值化為十進(jìn)制值后,就是溫度值的百、十、個(gè)位值,而剩下的低字節(jié)的低半字節(jié)化成十進(jìn)制后,就是溫度值的小數(shù)部分。</p><p> 小數(shù)部分因?yàn)槭前雮€(gè)字節(jié),所以二進(jìn)制值范圍是0至F,轉(zhuǎn)換成十進(jìn)制小數(shù)值就是0.0625的倍數(shù)(0至15)。這樣需要
34、4位的數(shù)碼管來顯示小數(shù)部分,實(shí)際應(yīng)用不必有這么高的精度,采用1位數(shù)碼管來顯示小數(shù),可以精確到0.10C。表3-1就是二進(jìn)制和十進(jìn)制的近似對(duì)應(yīng)關(guān)系表。</p><p><b> 附錄一</b></p><p> #include<reg51.h></p><p> #define uchar unsigned char</
35、p><p> #define uint unsigned int</p><p> sbit DQ=P1^7;//ds18b20與單片機(jī)連接口</p><p> sbit RS=P2^4;</p><p> sbit RW=P2^5;</p><p> sbit EN=P2^6;</p><p
36、> sbit BEEP = P2^7; //蜂鳴器驅(qū)動(dòng)線</p><p> sbit BEEP1 = P1^6;//小燈報(bào)警驅(qū)動(dòng)線</p><p> sbit BEEP2 = P3^4;</p><p> sbit key0=P3^0;</p><p> sbit key1=P3^1;</p&
37、gt;<p> sbit key2=P3^6;</p><p> sbit key3=P3^7; //加熱驅(qū)動(dòng)線</p><p> unsigned char code str1[]={"TH: TL:" } ;</p><p> unsigned char code str2[]={"temp:
38、 "}; </p><p> unsigned char code str3[]={"design:wj "} ;</p><p> unsigned char code str4[]={" error "} ;</p><p> uchar data d
39、isdata[5];</p><p> uint tvalue,x=6,y=4,h,m=0x00,n=0x00;//溫度值</p><p> uchar tflag,z;//溫度正負(fù)標(biāo)志</p><p> unsigned char val ;</p><p> void delay(uint n) //延時(shí)1us</
40、p><p><b> { </b></p><p> while (--n);</p><p><b> }</b></p><p> void speak() // 蜂鳴器響一聲 </p><p><b> {</b></p&g
41、t;<p> unsigned char i;</p><p> for (i=0;i<200;i++) //喇叭發(fā)聲的時(shí)間循環(huán),改變大小可以改變發(fā)聲時(shí)間長(zhǎng)短</p><p><b> { </b></p><p> delay(100); //數(shù)決定發(fā)聲的頻率,估算值</p>
42、<p> BEEP=!BEEP; //BEEP取反</p><p> //if(temp<30&temp>20) break;</p><p><b> } </b></p><p> BEEP=1; //喇叭停止工作,間歇的時(shí)間,可更改</p><p> de
43、lay(10) ;</p><p> //if(temp<30&temp>20) break; </p><p><b> }</b></p><p> /*************************lcd1602程序**************************/</p><p&
44、gt; void delay1ms(unsigned int ms)//延時(shí)1毫秒(不夠精確的)</p><p> {unsigned int i,j;</p><p> for(i=0;i<ms;i++)</p><p> for(j=0;j<100;j++);</p><p><b> }</b>
45、;</p><p> void wr_com(unsigned char com)//寫指令//</p><p> { delay1ms(1);</p><p><b> RS=0;</b></p><p><b> RW=0;</b></p><p><b&
46、gt; 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><b> EN
47、=0;</b></p><p><b> } </b></p><p> void wr_dat(unsigned char dat)//寫數(shù)據(jù)//</p><p> { delay1ms(1);;</p><p><b> RS=1;</b></p>&l
48、t;p><b> RW=0;</b></p><p><b> EN=0;</b></p><p><b> P0=dat;</b></p><p> delay1ms(1);</p><p><b> EN=1;</b></p>
49、;<p> delay1ms(1);</p><p><b> EN=0;</b></p><p><b> }</b></p><p> void lcd_init()//初始化設(shè)置//</p><p> {delay1ms(15);</p><p>
50、; 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);
51、</p><p><b> }</b></p><p> void display(unsigned char *p)//顯示//</p><p><b> {</b></p><p> while(*p!='\0')</p><p><b>
52、; {</b></p><p> wr_dat(*p);</p><p><b> p++;</b></p><p> delay1ms(1);</p><p><b> }</b></p><p><b> }</b></
53、p><p> init_play()//初始化顯示</p><p> { lcd_init(); wr_com(0x80);</p><p> display(str2);</p><p> wr_com(0xc0); </p><p> display(str1);</p><p&g
54、t;<b> }</b></p><p> /******************************ds1820程序***************************************/</p><p> void delay_18B20(unsigned int i)//延時(shí)1微秒</p><p><b>
55、{</b></p><p> while(i--);</p><p><b> }</b></p><p> void ds1820rst()/*ds1820復(fù)位*/</p><p> { unsigned char x=0;</p><p> DQ = 1;
56、 //DQ復(fù)位</p><p> delay_18B20(4); //延時(shí)</p><p> DQ = 0; //DQ拉低</p><p> delay_18B20(100); //精確延時(shí)大于480us</p><p> DQ = 1; //拉高</p><p>
57、delay_18B20(40); </p><p><b> } </b></p><p> uchar ds1820rd()/*讀數(shù)據(jù)*/</p><p> { unsigned char i=0;</p><p> unsigned char dat =0;</p><p> f
58、or (i=8;i>0;i--)</p><p> { DQ = 0; //給脈沖信號(hào)</p><p><b> dat>>=1;</b></p><p> DQ = 1; //給脈沖信號(hào)</p><p><b> if(DQ)</b></p><p
59、> dat|=0x80;</p><p> delay_18B20(10);</p><p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p> void ds1820wr(uchar w
60、data)/*寫數(shù)據(jù)*/</p><p> {unsigned char i=0;</p><p> for (i=8; i>0; i--)</p><p><b> { DQ = 0;</b></p><p> DQ = wdata&0x01;</p><p> dela
61、y_18B20(10);</p><p><b> DQ = 1;</b></p><p> wdata>>=1;</p><p><b> }</b></p><p><b> }</b></p><p> read_temp()
62、/*讀取溫度值并轉(zhuǎn)換*/</p><p> {uchar a,b;</p><p> ds1820rst(); </p><p> ds1820wr(0xcc);//*跳過讀序列號(hào)*/</p><p> ds1820wr(0x44);//*啟動(dòng)溫度轉(zhuǎn)換*/</p><p> ds1820rst();
63、 </p><p> ds1820wr(0xcc);//*跳過讀序列號(hào)*/ </p><p> ds1820wr(0xbe);//*讀取溫度*/ </p><p> a=ds1820rd();</p><p> b=ds1820rd();</p><p><b> tvalue=b;</b&
64、gt;</p><p> tvalue<<=8;</p><p> tvalue=tvalue|a;</p><p> if(tvalue<0x0fff)</p><p><b> tflag=0;</b></p><p><b> else</b>
65、;</p><p> {tvalue=~tvalue+1; </p><p><b> tflag=1;</b></p><p><b> }</b></p><p> tvalue=tvalue*(0.625)+0.5;//溫度值擴(kuò)大10倍,精確到1位小數(shù)</p>&l
66、t;p> return(tvalue);</p><p><b> }</b></p><p> /*******************************************************************/</p><p> void ds1820disp()//溫度值顯示</p>&l
67、t;p> { uchar flagdat;</p><p> uchar a,b,c;</p><p> disdata[0]=tvalue/1000+0x30;//百位數(shù)</p><p> disdata[1]=tvalue%1000/100+0x30;//十位數(shù)</p><p> disdata[2]=tvalue%1
68、00/10+0x30;//個(gè)位數(shù)</p><p> disdata[3]=tvalue%10+0x30;//小數(shù)位</p><p> disdata[4]=x+0x30;</p><p> disdata[5]=y+0x30;</p><p> if(tflag==0)</p><p> flagdat=0x
69、20;//正溫度不顯示符號(hào)</p><p><b> else</b></p><p> flagdat=0x2d;//負(fù)溫度顯示負(fù)號(hào):-</p><p> if(disdata[0]==0x30)</p><p> {disdata[0]=0x20;//如果百位為0,不顯示</p><p&g
70、t; if(disdata[1]==0x30)</p><p> {disdata[1]=0x20;}//如果百位為0,十位為0也不顯示</p><p><b> } </b></p><p> a=tvalue/1000;b=tvalue%1000/100;c=tvalue%100/10;</p><p>
71、; z=a*100+b*10+c;</p><p><b> if(z>x) </b></p><p><b> {speak();</b></p><p><b> BEEP1=0;</b></p><p><b> BEEP2=1;</b&g
72、t;</p><p><b> }</b></p><p> else if(z<y)</p><p> { speak();</p><p><b> BEEP1=0;</b></p><p> BEEP2=0; </p><p&g
73、t;<b> } </b></p><p><b> else</b></p><p> BEEP1=1; </p><p> wr_com(0x85);</p><p> wr_dat(flagdat);//顯示符號(hào)位</p><p> wr_com(0x86
74、);</p><p> wr_dat(disdata[0]);//顯示百位</p><p> wr_com(0x87);</p><p> wr_dat(disdata[1]);//顯示十位 </p><p> wr_com(0x88);</p><p> wr_dat(disdata[2]);//顯示個(gè)位
75、 </p><p> wr_com(0x89);</p><p> wr_dat(0x2e);//顯示小數(shù)點(diǎn) </p><p> wr_com(0x8A);</p><p> wr_dat(disdata[3]);//顯示小數(shù)位 </p><p> wr_com(0xc4);</p>&
76、lt;p> wr_dat(disdata[4]);</p><p> wr_com(0xcb);</p><p> wr_dat(disdata[5]);</p><p><b> }</b></p><p> /********************主程序***********************
77、************/</p><p> void main()</p><p> { //uchar a,b,c,temp,th=30,tl=20;</p><p> init_play();//初始化顯示</p><p><b> while(1)</b></p><p> {
78、 if(key0==0)</p><p><b> { </b></p><p> while(key0==0);</p><p> x+=1; m=m+1;</p><p><b> }</b></p><p> if(key1==0)</p>
79、<p> { delay(200);</p><p> while(key1==0);</p><p> x=x-1;m=m-1; </p><p><b> }</b></p><p> if(key2==0)</p><p> { delay(200);<
80、/p><p> while(key2==0);</p><p> y+=1; n=n+1;</p><p><b> }</b></p><p> if(key3==0)</p><p><b> { </b></p><p> whi
81、le(key3==0);</p><p> y=y-1; n=n-1;</p><p><b> } </b></p><p> if(x<=y) {</p><p><b> speak();</b></p><p> wr_com(0xc0);&l
82、t;/p><p> display(str4);</p><p> delay(100);</p><p> wr_com(0xc0);</p><p> display(str1);</p><p><b> } </b></p><p> read_te
83、mp();//讀取溫度</p><p> ds1820disp();//顯示</p><p><b> } } </b></p><p><b> 附錄二</b></p><p><b> 6 結(jié)論</b></p><p> 由于本設(shè)計(jì)
84、采用了集成溫度傳感器,這樣不僅減少了硬件電路的設(shè)計(jì)與調(diào)試,并且此溫度傳感元件的集成性能比傳統(tǒng)的元件要優(yōu)越得多,這樣簡(jiǎn)化了電路的設(shè)計(jì)難度還降低了產(chǎn)品的價(jià)格。如果我們采用傳統(tǒng)的元件則在設(shè)計(jì)中還要加入A/D轉(zhuǎn)換器和模擬開關(guān),這樣就增加了電路的設(shè)計(jì)難度并且感溫元件的精度和轉(zhuǎn)換性能也是遠(yuǎn)不及集成的感溫元件DS18B20的。所以在以后的設(shè)計(jì)過程中應(yīng)該盡量的采用集成元件。另外,本設(shè)計(jì)還可以實(shí)現(xiàn)高低溫報(bào)警功能和多點(diǎn)溫度測(cè)量功能,因此,能夠適用于多種場(chǎng)合
85、。</p><p> 計(jì)算機(jī)系統(tǒng)與接口課程設(shè)計(jì)</p><p><b> 任務(wù)書</b></p><p> 學(xué) 院: 信 電 學(xué) 院 </p><p> 專 業(yè): 電子信息工程技術(shù) </p><p> 設(shè)計(jì)題目: 溫度控制器</p><p&
86、gt; 1、課程設(shè)計(jì)的內(nèi)容和要求</p><p><b> 內(nèi)容:</b></p><p> 1. 熟悉AT89C51/52單片機(jī)的硬件資源</p><p> 2. 掌握Keil μVision 單片機(jī)集成開發(fā)環(huán)境的使用,掌握 C/ASM程序的編輯、編譯、調(diào)試、仿真的方法。</p><p> 3. 掌握單片
87、機(jī)常用溫度傳感器,液晶顯示器的使用。</p><p> 4. 了解實(shí)際工業(yè)溫度采集儀表的功能、工作方式和設(shè)計(jì)流程。</p><p><b> 要求:</b></p><p> 1. 在Keil μVision 單片機(jī)集成開發(fā)環(huán)境下實(shí)現(xiàn)溫度的采集、和溫度上下限的設(shè)定。</p><p> 2. 編寫完整單片機(jī)C51程
88、序,生成HEX文件。</p><p> 3. 繪制PROTEUS單片機(jī)仿真軟件,實(shí)現(xiàn)Keil μVision和PROTEUS單片機(jī)聯(lián)合調(diào)試和仿真。</p><p> 4. 根據(jù)實(shí)際工業(yè)儀表、儀器的工作功能和流程,在完成基本要求的情況下適當(dāng)增加軟件、硬件功能。(提高要求)</p><p><b> 2、主要參考文獻(xiàn)</b></p>
89、;<p> 1. 《單片機(jī)典型模塊設(shè)計(jì)實(shí)例導(dǎo)航》 </p><p> 2. 《 單片機(jī)原理與應(yīng)用及C51程序設(shè)計(jì) 》 </p><p> 3. 《51單片機(jī)C語(yǔ)言常用模塊與綜合系統(tǒng)設(shè)計(jì)》
90、 </p><p> 3、課程設(shè)計(jì)進(jìn)度計(jì)劃</p><p><b> 4、考核方式</b></p><p> 課程設(shè)計(jì)的考核采取論文評(píng)閱、結(jié)果演示和答辯相結(jié)合的原則。嚴(yán)禁抄襲。</p><p> 指導(dǎo)老師簽字:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)溫度傳感器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--溫度控制器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)--基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)--溫度傳感器實(shí)驗(yàn)的實(shí)現(xiàn)
- 基于單片機(jī)實(shí)現(xiàn)的溫度控制器課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-時(shí)間控制器
- 51單片機(jī)溫度傳感器課程設(shè)計(jì)報(bào)告書
- 單片機(jī)課程設(shè)計(jì)----空調(diào)溫度控制器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)節(jié)日彩燈控制器
- 單片機(jī)課程設(shè)計(jì):彩燈控制器設(shè)計(jì)
- 單片機(jī)溫度控制器
- 單片機(jī)課程設(shè)計(jì)--步進(jìn)電機(jī)控制器
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)控制的時(shí)鐘控制器
- 時(shí)鐘控制器單片機(jī)課程設(shè)計(jì)報(bào)告
- 超聲波傳感器單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--步進(jìn)電機(jī)控制器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-- 彩燈控制器的設(shè)計(jì)
- 數(shù)字溫度傳感器課程設(shè)計(jì)論文
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的定時(shí)控制器設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論