2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論