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

下載本文檔

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

文檔簡介

1、<p><b>  綜合課程設(shè)計論文</b></p><p>  實訓(xùn)課題: 數(shù)字溫度測量系統(tǒng) 專業(yè)班級: 應(yīng)用電子技術(shù)(1)班</p><p><b>  摘要</b></p><p>  隨著社會的進步和工業(yè)技術(shù)的發(fā)展,人們越來越重視溫度因素,許多產(chǎn)品對溫度范圍要求嚴格,而目前市場上普遍存在

2、的溫度檢測儀器大都是單點測量,同時有溫度信息傳遞不及時、精度不夠的缺點,不利于工業(yè)控制者根據(jù)溫度變化及時做出決定。在這樣的形式下,開發(fā)一種能夠同時測量多點,并且實時性高、精度高,能夠綜合處理多點溫度信息的測量系統(tǒng)就很有必要。</p><p>  本課題以AT89C51單片機系統(tǒng)為核心,能對多點的溫度進行實時巡檢。DS18B20是一種可組網(wǎng)的高精度數(shù)字式溫度傳感器,由于其具有單總線的獨特優(yōu)點,可以使用戶輕松地組建起

3、傳感器網(wǎng)絡(luò),并可使多點溫度測量電路變得簡單、可靠。本文結(jié)合實際使用經(jīng)驗,介紹了DS18B20數(shù)字溫度傳感器在單片機下的硬件連接及軟件編程,并給出了軟件流程圖。</p><p>  關(guān)鍵詞:溫度測量;單總線;數(shù)字溫度傳感器;單片機</p><p><b>  目錄</b></p><p><b>  引言</b></p

4、><p>  數(shù)字溫度計的結(jié)構(gòu)及功能介紹</p><p>  單片機 STC80C52RC</p><p>  DS18B20數(shù)字溫度傳感器</p><p><b>  顯示器的選擇</b></p><p><b>  設(shè)計原理及原理圖</b></p><p&

5、gt;<b>  設(shè)計程序流程圖</b></p><p><b>  總結(jié)</b></p><p><b>  附錄</b></p><p><b>  程序代碼</b></p><p><b>  仿真</b></p>

6、<p><b>  一、引言</b></p><p>  本系統(tǒng)利用DS18B20進行測溫,基于單片機AT89S52進行溫度控制,具有硬件電路簡單,控溫精度高、功能強,體積小,簡單靈活等優(yōu)點,可以應(yīng)用于控制溫度在-55℃到+125℃之間的各種場合,可以實現(xiàn)溫度的實時采集、顯示功能 。</p><p>  溫度是一種最基本的環(huán)境參數(shù)之一,日常生活和工農(nóng)業(yè)生產(chǎn)

7、中經(jīng)常要檢測溫度。傳統(tǒng)的方式是采用熱電偶或熱電阻,但是由于模擬溫度傳感器輸出為模擬信號,必須經(jīng)過A/D轉(zhuǎn)換環(huán)節(jié)獲得數(shù)字信號后才能與單片機等微處理器接口,使得硬件電路結(jié)果復(fù)雜,制作成本較高。美國DALLAS公司生產(chǎn)的DS18B20為代表的新型單總線數(shù)字式溫度傳感器以其突出優(yōu)點廣泛使用于倉庫管理、工農(nóng)業(yè)生產(chǎn)制造、氣象觀測、科學(xué)研究以及日常生活中。</p><p>  本文提出用DALLAS公司生產(chǎn)的DS18B20數(shù)字

8、溫度傳感器和89S52單片機構(gòu)成的多路測溫系統(tǒng),采用單總線的方式(一根數(shù)據(jù)線,在一個I/O口上),可以在單總線上掛接多個18B20,在單片機控制下巡回檢測多點溫度,并可以設(shè)置高、低溫度超限報警等功能。</p><p><b>  二、結(jié)構(gòu)及功能介紹</b></p><p>  1、單片機 STC80C52RC</p><p>  a、該系統(tǒng)采用

9、MCS-51系列單片機AT89C51作為控制核心,該系統(tǒng)可以完成運算控制、信號識別以及顯示功能的實現(xiàn)。由于用了單片機,使其技術(shù)比較成熟,應(yīng)用起來方便、簡單并且單片機周圍的輔助電路也比較少,便于控制和實現(xiàn)。整個系統(tǒng)具有極其靈活的可編程性,能方便地對系統(tǒng)進行功能的擴張和更改。MCS-51單片機特點如下:</p><p>  b、單片機主機系統(tǒng)電路</p><p>  AT89C51單片機是屬于

10、51系列單片機里的。它的內(nèi)部自帶2K字節(jié)可編程FLASH存儲器的低電壓、高性能COMS 8位微處理器。AT89C51單片機還與Intel MCS-51系列單片機的輸出管腳和指令相互兼容。由于AT89C51將多功能8位CPU和閃速存儲器結(jié)合在單個的芯片里,所以,AT89C51構(gòu)成的單片機系統(tǒng)是所有系統(tǒng)里結(jié)構(gòu)最簡便,價格最便宜,使用效率最高的控制系統(tǒng),它還節(jié)省了外部的RAM與ROM和接口器件,削減了硬件方便的開銷。節(jié)省了制造成本,提高了系統(tǒng)

11、的性價比。</p><p><b>  c.主要芯片的介紹</b></p><p>  本課題采用單片機AT89C51控制的數(shù)字溫度測量與顯示系統(tǒng),其功能的實現(xiàn)主要通過軟件編程來完成,采用單片機AT89C51,它是低功耗、高性能的CMOS型8位單片機。片內(nèi)帶有4KB的Flash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。且AT89C51的使用壽命很長,數(shù)據(jù)保留時間也較長

12、,可以達到十年的時間。就是因為這一些類的特性,與優(yōu)點。所以本次設(shè)計我才會選擇使用這一類的單片機來作為我實現(xiàn)此系統(tǒng)的工具。</p><p><b>  單片機主機系統(tǒng)圖</b></p><p>  根據(jù)設(shè)計的要求,要利用溫度傳感器實時溫度。當(dāng)溫度高于設(shè)定的溫度時(60℃),當(dāng)溫度高于設(shè)置報警的上限值時風(fēng)扇轉(zhuǎn)同時紅色led亮,當(dāng)?shù)陀跁r繼電器以留出接口。同時要求能設(shè)定溫度。

13、畢業(yè)設(shè)計的主要任務(wù)是能對溫度進行自動的檢測和控制。設(shè)計中采用單片機來控制溫度,因此要有溫度的顯示電路,溫控電路,報警電路等幾個部分。</p><p>  要實現(xiàn)系統(tǒng)的設(shè)計要用到的知識點有單片機的原理及其應(yīng)用,溫度傳感器的原理和應(yīng)用,及顯示電路的設(shè)計等。</p><p>  2、 DS18B20數(shù)字溫度傳感器</p><p>  2.1 DS18B20 簡介</

14、p><p>  新的“一線器件”DS18B20體積更小,適用電壓更寬、更經(jīng)濟,做為一線總線數(shù)字化溫度床感器,支持“一線總線”接口,測量溫度范圍為-55℃~+125℃,在-10℃~+85℃范圍內(nèi),精度為±0.5℃。獨特的電源和信號復(fù)合在一起,僅適用一條口線,每個芯片唯一編碼,支持聯(lián)網(wǎng)尋址,簡單的網(wǎng)絡(luò)化的溫度感知,零功能等待。</p><p>  2.2 DS18B20特性</p

15、><p>  DS18B20可以由程序設(shè)定9~12位的分辨率,精度為±0.5℃。</p><p> ?、侏毺氐膯尉€接口僅需一個端口引腳進行通訊</p><p> ?、诤唵蔚亩帱c分布應(yīng)用</p><p><b>  ③無需外部器件</b></p><p><b>  ④可通過數(shù)據(jù)線供

16、電</b></p><p><b>  ⑤零待機功耗</b></p><p> ?、逌y溫范圍-55~+125℃,以0.5℃遞增華氏器件-67~+257℉,以0.9℉遞增</p><p> ?、邷囟纫?位數(shù)字量讀出</p><p> ?、鄿囟葦?shù)字量轉(zhuǎn)換時間200ms(典型值)</p><p&

17、gt;  ⑨用戶可定義的非易失性溫度報警設(shè)置</p><p> ?、鈭缶阉髅钭R別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件</p><p>  應(yīng)用包括溫度控制、工業(yè)系統(tǒng)、消費品、溫度計或任何感測系統(tǒng)。</p><p><b>  2.3 說明:</b></p><p>  DS18B20有三個主要數(shù)字部件:&

18、lt;/p><p>  1)64位激光ROM</p><p><b>  2)溫度傳感器</b></p><p>  3)非易失性溫度報警觸發(fā)器TH和TL</p><p>  4)器件用如下方式從單線通訊線上汲取能量,在信號線處于高電平期間把能量存儲在內(nèi)部電容里,在信號線處于低電平期間消耗電容上的電能工作,知道高電平到來再給

19、寄生電源(電容)充電。DS18B20也可用外部5V電源供電。</p><p>  DS18B20依靠一個單線端口通訊。在單線端口條件下,必須先建立ROM操作協(xié)議,才能進行存儲器和控制操作。因此,控制器必須首先提供下面5個ROM操作命令之一:1)讀ROM,2)匹配ROM,3)搜索ROM,4)跳過ROM,5)報警搜索。這些命令對每個器件的激光ROM部分進行操作,在單總線上掛有多個器件時,可以區(qū)分出單個器件,同時可以向

20、總線控制器指明有多少器件或是什么型號的器件。成功執(zhí)行完一條ROM操作序列后,即可進行存儲器可控制操作,控制器可以提供6條存儲器和控制操作指令中的任一條。一條控制操作命令指示DS18B20完成一次溫度測量,測量結(jié)果放在內(nèi)部暫存器中暫存,用一條讀暫存器內(nèi)容的存儲器操作命令可以把暫存器中數(shù)據(jù)讀出。</p><p>  2.4 DS18B20測溫原理:</p><p>  用一個高溫度系數(shù)的振蕩

21、器確定一個門周期,內(nèi)部計數(shù)器在這個門周期內(nèi)對一個低溫度系數(shù)的振蕩器的脈沖進行計數(shù)來的到溫度值。計數(shù)器被預(yù)置到對應(yīng)于-55的一個值。如果計數(shù)器在門周期結(jié)束前到達0,則溫度寄存器(同樣被預(yù)置到-55℃)的值增加,表明所測溫度大于-55℃。同時,計數(shù)器被復(fù)位到一個值,這個值由斜坡式累加器電路確定,斜坡式累加器電路用來補償感溫振蕩器的拋物線特性。然后計數(shù)器又開始計數(shù)知道0,如果門周期仍未結(jié)束,將重復(fù)這一過程。斜坡式累加器用來補償感溫振蕩器的非線

22、性,以期測溫時獲得比較高的分辨力,這是通過改變計數(shù)器對溫度每增加一度所需計數(shù)的值來實現(xiàn)的。因此,要想獲得所需的分辨力,必須同時知道在給定溫度下計數(shù)器的值和每一度的計數(shù)值。DS18B20內(nèi)部對此計算的結(jié)果可提供0.5℃的分辨力。溫度以16bit帶符號位擴展的二進制補碼形式讀出,表一給出了溫度值和輸出數(shù)據(jù)的關(guān)系。數(shù)據(jù)通過單線接口以串行方式傳輸。DS18B20測溫范圍-55℃~+125℃,以0.5℃遞增。如用于華氏溫度,必須要用一個轉(zhuǎn)換因子查

23、找表。</p><p><b>  表一</b></p><p>  注意DS18B20內(nèi)溫度表示值為1/2℃LSB,如下所示9bit格式:</p><p><b>  表二</b></p><p>  最高有效(符號)位被復(fù)制充滿存儲器中兩字節(jié)溫度存儲器的高MSB位,由這種“符號位擴展”產(chǎn)生出了表

24、一的16bit溫度讀數(shù)。</p><p>  2.5 DS18B20測溫原理圖:</p><p>  圖二 DS18B20 測溫原理框圖</p><p>  可用下述方法獲得更高的分辨力。首先,讀取溫度值,將0.5℃位(LSB)從讀取的值中截去,這個值叫做TEMP_READ。然后讀取計數(shù)器中剩余的值,這個值是門周期結(jié)束后保留下來的值(COUNT_REMAIN)。最

25、后,我們用到在這個溫度下每度的計數(shù)值(COUNT_PER_C)。用戶可以用下面的公式計算實際溫度值:</p><p>  2.6 64位激光刻ROM</p><p>  每只18B20都有一個唯一的長達64位的編碼。最前面8位是單線系列編碼。后面48為是一個唯一的序列號。最后8為是以上56位的CRC碼。</p><p><b>  表三</b>

26、;</p><p>  2.7 CRC發(fā)生器</p><p>  DS18B20中有8位CRC存儲在64位ROM的最高有效字節(jié)中??偩€控制器可以用64位ROM中的前56位計算出一個CRC值,再用這個和存儲在DS18B20中的值進行比較,以確定ROM數(shù)據(jù)是否被總線控制器接受無誤。CRC計算等式如下:8+5+4+。單總線CRC可以有一個由移位寄存器和XOR門構(gòu)成的多項式發(fā)生器來產(chǎn)生,如下圖

27、所示:</p><p>  圖三 單總線CRC的結(jié)構(gòu)原理圖</p><p>  2.8 單總線系統(tǒng)</p><p>  單總線系統(tǒng)包括一個總線控制器和一個或多個從機。DS18B20充當(dāng)從機,當(dāng)只有一只從機掛接在總線上時,系統(tǒng)被稱為“單點”系統(tǒng);如果由多只從機掛接在總線上,系統(tǒng)被稱為“多點”。所有的數(shù)據(jù)和指令的傳遞都是從最低有效位開始通過單總線進行傳送的。</

28、p><p>  2.9 DS18B20指令控制</p><p>  執(zhí)行序列通過單線總線端口訪問DS18B20的協(xié)議如下:</p><p><b>  步驟一:初始化;</b></p><p>  步驟二:ROM操作指令;</p><p>  步驟三:DS18B20功能指令。</p>&

29、lt;p>  每一次DS18B20的操作都必須滿足以上步驟,若是缺少步驟或是順序混亂,器件將不會返回值。例如這樣的順序:發(fā)起ROM搜索指令[F0H]和報警搜索指令[ECH]之后,總線控制器必須返回步驟一。</p><p>  2.10 ROM時序指令控制</p><p>  通過單總線的所有執(zhí)行操作處理都從一個初始化序列開始。初始化序列包括一個由總線控制器發(fā)出的復(fù)位脈沖和其后由從機

30、發(fā)出的存在脈沖。存在脈沖讓總線控制器知道DS18B20在總線上且已準備好操作。</p><p>  一旦總線控制器探測到一個存在脈沖,它就發(fā)出一條ROM指令。如果總線上掛有多只DS18B20,這些指令將基于器件獨有的64位ROM片序列碼使得總線控制器選出特定要進行操作的器件。這些指令同樣也可以使總線控制器識別有多少只,什么型號的器件掛在總線上,同樣,它們也可以識別哪些器件已經(jīng)符合報警條件。</p>

31、<p> ?、臩earch ROM[F0H](搜索ROM指令)</p><p>  當(dāng)系統(tǒng)上電初始化的時候,總線控制器必須通過識別總線上所有ROM片序列碼去得到從機的數(shù)目和型號??偩€控制器通過搜索ROM指令多次循環(huán)搜索ROM編碼,以確認所有從機器件。如果總線上只有一只從機,那么可以用較為簡單的讀取ROM 代替搜索ROM指令。在每次搜索ROM指令之后,總線控制器必須返回步驟一。</p>&

32、lt;p>  ⑵READ ROM[33H](讀取ROM指令)</p><p>  只有在總線上存在單只DS18B20的時候才能使用這條命令。該命令允許總線控制器在不使用搜索ROM的情況下讀取從機的64位片序列碼。如果總線上有不止一只從機,當(dāng)所有從機試圖同時傳送信號時就會發(fā)生數(shù)據(jù)沖突。</p><p> ?、荕ATHCH ROM[55H](匹配ROM指令)</p><

33、;p>  匹配ROM指令,后跟64位ROM編碼序列,讓總線控制器在多點總線上定位一只特定的DS18B20。只有和64為ROM片序列碼完全匹配的DS18B20才能響應(yīng)隨后的存儲操作指令;所有和64位ROM片序列碼不匹配的從機都將等待復(fù)位脈沖。</p><p> ?、萐KIP ROM[CCH](跳過ROM指令)</p><p>  這條指令允許總線控制器不用提供64位ROM編碼就使用功能

34、指令。例如,總線控制器可以先發(fā)出一條跳過ROM指令,然后發(fā)出溫度轉(zhuǎn)換指令[44H],從而完成溫度轉(zhuǎn)換操作。注意,當(dāng)只有一只從機在總線上時,無論如何,跳過ROM指令之后只能跟著發(fā)出一條讀取暫存器指令[BEH]。在單點總線情況下使用該命令,器件無需發(fā)回64位ROM編碼,從而節(jié)省了時間。如果總線上有不止一只從機,若發(fā)出跳過ROM指令,由于多只從機同時傳送信號,總線上就會發(fā)生數(shù)據(jù)沖突。</p><p>  2.11DS

35、18B20功能指令控制</p><p>  在總線空盒子錢發(fā)給欲連接的DS18B20一條ROM命令后,跟著可以發(fā)送一條DS18B20功能指令。這些命令允許總線控制器讀寫DS18B20的暫存器,發(fā)起溫度轉(zhuǎn)換和識別電源模式。DS18B20的功能指令如下所示:</p><p> ?、臗ONVERT T [44H](溫度轉(zhuǎn)換指令)</p><p>  這條命令用以啟動一次溫

36、度轉(zhuǎn)換。溫度轉(zhuǎn)換指令被執(zhí)行,產(chǎn)生的溫度轉(zhuǎn)換結(jié)果數(shù)據(jù)以2個字節(jié)的形式被存儲在高速暫存器中,而后DS18B20保持等待狀態(tài)。如果寄生電源模式下發(fā)出該命令后,在溫度轉(zhuǎn)換期間,必須在10US(最多)內(nèi)給單總線上一個強上拉。如果DS18B20以外部電源供電,總線控制器在發(fā)出該命令后跟著發(fā)出讀時序,DS18B20如處于轉(zhuǎn)換中,將在總線上返回0,若溫度轉(zhuǎn)換完成,則返回1。寄生電源模式下,總線被強上拉拉高前這樣的通訊技術(shù)不會被使用。</p>

37、<p> ?、芖RITE SCRATCHPAD [4EH](寫暫存器指令)</p><p>  這條命令向DS18B20的暫存器寫入數(shù)據(jù),開始位置在TH寄存器(暫存器的第二個字節(jié)),接下來寫入TL寄存器(暫存器的第三個字節(jié)),最后寫入配置寄存器(暫存器的第四個字節(jié))。數(shù)據(jù)以最低有效位開始傳送。上述三個字節(jié)的寫入必須發(fā)生在總線控制器發(fā)出復(fù)位命令前,否則會終止寫入。</p><p&g

38、t; ?、荝EAD SCRATCHPAD [BEH] (讀暫存器指令)</p><p>  這條命令讀取暫存器的內(nèi)容。讀取將從字節(jié)0開始,一直進行下去,直到第九個字節(jié)(字節(jié)8,CRC)讀完,如果不想讀完所有字節(jié),控制器可以在任何時間發(fā)出復(fù)位命令來中止讀取。</p><p><b>  備注:</b></p><p>  ①對于寄生電源模式下的D

39、S18B20,在溫度轉(zhuǎn)換和拷貝數(shù)據(jù)到EEPROM其間,必須給但總線一個強上拉,總線上載這段時間內(nèi)不能有其他活動。</p><p> ?、诳偩€控制器在任何時刻都可以通過發(fā)出復(fù)位信號中止數(shù)據(jù)傳輸。</p><p> ?、跿H、TL和配置寄存器這三個字節(jié)的寫入必須在復(fù)位信號發(fā)起之前。</p><p>  2.12 18B20時序詳解</p><p>

40、;<b>  初始化時序</b></p><p>  圖四 初始化時序示意圖</p><p><b>  讀/寫時序</b></p><p>  DS18B20的數(shù)據(jù)讀寫是通過時序處理來確認信息交換的。</p><p> ?、艑憰r序:有兩種寫時序:寫1時序和寫0時序??偩€控制器通過寫1時序?qū)戇壿?到

41、DS18B20,寫0時序?qū)戇壿?到DS18B20。所有寫時序必須最少持續(xù)60us,包括兩個寫中期之間至少1us的回復(fù)時間。當(dāng)總線控制器把數(shù)據(jù)線從邏輯高電平拉到低電平的時候,寫時序開始。(見圖五)</p><p><b>  圖五 讀/寫時序圖</b></p><p>  總線控制器要產(chǎn)生一個寫時序,必須把數(shù)據(jù)線拉到低電平后釋放,在寫時序開始后的15us釋放中線。當(dāng)總線

42、被釋放的時候,5K的上拉電阻將拉高總線??偪刂破饕梢粋€寫0時序,必須把數(shù)據(jù)線拉到低電平并持續(xù)保持(至少60us)。</p><p>  總線控制器初始化寫時序后,DS18B20在一個15us到60us的窗口內(nèi)對I/O線采樣。如果線上是高電平,就是寫1。如果線上是低電平,就是寫0。</p><p><b>  ⑵讀時序</b></p><p>

43、;  總線控制器發(fā)起讀時序時,DS18B20僅被用來傳輸數(shù)據(jù)給控制器。因此,總線控制器在發(fā)出讀暫存器指令[BEH]后必須立刻開始讀時序,DS18B20可以提供請求信息。除此之外,總線控制器在發(fā)出發(fā)送溫度轉(zhuǎn)換指令[44H]或召回EEPROM指令[B8H]之后讀時序。</p><p>  所有讀時序必須最少60us,包括兩個度周期間至少1us的恢復(fù)時間。當(dāng)總線控制器把數(shù)據(jù)線從高電平拉到低電平時,讀時序開始,數(shù)據(jù)線必須

44、至少保持1us,然后總線被釋放。在總線控制器發(fā)出讀時序后,DS18B20通過拉高或拉低總線來傳輸1或0。當(dāng)傳輸邏輯0結(jié)束后,總線將被釋放,通過上拉電阻回到上升沿狀態(tài)。從DS18B20輸出的數(shù)據(jù)在讀時序的下降沿出現(xiàn)后15us內(nèi)有效。因此,總線控制器在讀時序開始后必須停止把I/O腳驅(qū)動為低電平15us,以讀取I/O腳狀態(tài)。</p><p><b> ?、菢O限使用條件</b></p>

45、<p>  各引腳對地電壓:-0.5V到+0.6V</p><p>  工作溫度: -55℃到+125℃</p><p>  存儲溫度: -55℃到+125℃</p><p>  焊接溫度: 260℃ 10 秒</p><p><b>  ⑷直流電特性</b></p>

46、;<p><b>  表四</b></p><p><b>  備注:</b></p><p> ?、偎械碾妷簠⒖键c都是接地點。</p><p> ?、谏侠妷海杭僭O(shè)上拉器件是理想的,因此上拉的高電平應(yīng)該與VPU相等。為了達到DS18B20的VIH規(guī)格,實際晶體管上拉供電必須包括電壓跌落極限;因此,VPU_

47、ACTUAL=VPU_IDEAL+VTRANSISTOR.</p><p>  ③邏輯0電壓在吸收電流為1mA時得到。</p><p> ?、茉诩纳娫茨J降蛪籂顟B(tài)選,為保證出線一個脈沖,VLMAX在VCC低至0.5V時得到。</p><p> ?、葸壿?電壓在源電流為1mA時得到</p><p> ?、薮龣C電流最大定義為到70℃,125℃時

48、典型待機電流為3uA。</p><p>  ⑦為了將IDDS減到最少,DQ的范圍如下:GND≤DQ≤GND+0.3V or VDD-0.3V≤DQ≤VDD.</p><p> ?、鄤討B(tài)電流涉及溫度轉(zhuǎn)換和寫EEPROM存儲器。</p><p> ?、酓Q數(shù)據(jù)線為高狀態(tài)。</p><p>  誤差數(shù)據(jù)在125℃,VDD=5.5V條件下測試1000

49、小時得到。</p><p><b>  3、顯示器的選擇</b></p><p>  (一) LCD1602顯示器</p><p>  工業(yè)字符型液晶,能夠同時顯示16x02即32個字符。雖然LCD顯示器的價格比數(shù)碼管要貴。但是它有一個非常本質(zhì)的優(yōu)點就是它的顯示效果好,所以采用LCD 作為顯示器。</p><p><

50、;b>  (二)LCD引腳圖</b></p><p>  1602有16個引腳:</p><p>  1602顯示質(zhì)量高,功耗小。</p><p>  三、 設(shè)計硬件原理及原理圖</p><p>  圖十 設(shè)計硬件原理圖</p><p>  本系統(tǒng)中通過溫度傳感器DS18B20的數(shù)據(jù)線DQ與主控芯片5

51、1單片機的P3.3相連接,DS18B20將采集到的數(shù)據(jù)送給單片機,經(jīng)過單片機出來后,顯示在8位數(shù)據(jù)線與單片機P0口的液晶LCD上。蜂鳴器經(jīng)過三極管的驅(qū)動后接到單片機的P3.7,來實現(xiàn)當(dāng)實時溫度大于下限或高于上限的報警。4個按鍵K1~K4接到單片機的P1.0~P1.3,來實現(xiàn)對上限值和下限值的查看與設(shè)定。液晶LCD的RS、RW、E分別接到單片機的P2.0~P2.2來實現(xiàn)單片機控制液晶的讀寫命令和數(shù)據(jù)的控制。</p><

52、p><b>  四、設(shè)計程序流程圖</b></p><p>  LCD顯示子程序開始先讓LCD初始化,接著光標(biāo)定位,顯示字符,最后放回。</p><p><b>  LCD流程圖</b></p><p>  主程序首先設(shè)置堆棧為5FH,設(shè)置定時器工作方式T1為方式2。接著開始啟動定時器,調(diào)用LCD初始化子程序,調(diào)用D

53、S18B20復(fù)位子程序。接著調(diào)用上下限寫入暫存器子程序,把溫度報警值拷貝回暫存器,調(diào)用讀取溫度子程序,調(diào)用處理顯示子程序,調(diào)用實際溫度值與上下限溫度值比較子程序,調(diào)用按鍵掃描子程序后返回到調(diào)用讀取溫度子程序。</p><p><b>  主程序框圖</b></p><p>  按鍵掃描子程序首先判斷按鍵K1是否按下,如果按下就調(diào)用蜂鳴子程序,接著判斷K1是否放開,直到

54、K1放開,調(diào)用顯示數(shù)據(jù)子程序,然后去判斷K3是否按下,直到K3按下,調(diào)用蜂鳴子程序,最后放回;如果K1沒有按下去判斷K2是否按下,如果沒按下就跳到返回,如果有按下就調(diào)用鳴響子程序,然后去判斷K3是否放開,若放開接著調(diào)用顯示字符子程序,調(diào)用設(shè)定報警TH、TL子程序,調(diào)用報警上下限寫入暫存器子程序,調(diào)用報警值拷貝EEROM子程序。</p><p><b>  按鍵掃描子程序框圖</b></

55、p><p><b>  五、總結(jié)</b></p><p>  該系統(tǒng)利用DS18B20進行測溫,基于單片機AT89S52進行溫度控制,具有硬件電路簡單,控溫精度高、功能強、體積小,簡單靈活等優(yōu)點,可以應(yīng)用于控制溫度在-55℃到+125℃之間的各種場合,可以實現(xiàn)溫度的實時采集、顯示功能與控制功能,是一種比較理想的只能化控制系統(tǒng)。由此構(gòu)成的單片機控制的但總線溫度多路采集系統(tǒng)比

56、傳統(tǒng)的測溫系統(tǒng)可靠性高,易于構(gòu)成網(wǎng)絡(luò)控制,使用與各種溫度檢測與控制系統(tǒng)。該單總線技術(shù)可以為其他過程參數(shù)測控系統(tǒng)提供技術(shù)支持,具有實用價值。</p><p>  AT89C51的時鐘為12M,I/O口可達32個,較高的時鐘頻率和豐富的I/O,都為實現(xiàn)電路功能提供了非常有利的條件。同時也AT89S51內(nèi)含4KB FLASH ROM,開發(fā)環(huán)境友好,易用,方便,加上Proteus仿真大大加快本系統(tǒng)設(shè)計開發(fā)。在此次設(shè)計中學(xué)

57、會了對Proteus的基本使用,對里面一些基本元件的英文,如電阻RES、電容CAP、晶振CRYSTAL等,學(xué)會了連線和運行。</p><p>  在設(shè)計過程中也遇到一些問題,由于LCD是現(xiàn)實的字符型數(shù)據(jù),數(shù)字不能直接送去顯示,所有對于數(shù)字的顯示首先要轉(zhuǎn)換為字符格式,方法為:數(shù)字+‘0’;對于溫度傳感器的小數(shù)處理也遇到一些問題,兩個選的是12位,精度為0.0625,DS18B20的溫度寄存器里低八位的低四位為小數(shù)部

58、分,小數(shù)的值為0.0625*低八位的低四位,但是由于單片機的數(shù)據(jù)處理能力較差,不能處理小數(shù)的乘法運算,用上方法就顯示錯誤,后來想到可以把小數(shù)先變成整數(shù)處理,令低八位的低四位為t,小數(shù)后的第一位=625*t/1000,然后將這個數(shù)字在小數(shù)點后顯示即可。</p><p>  其實該本設(shè)計還有很多的不足,本實驗是用單片機的多個I/O口來驅(qū)動多路,DS18B20是一總線結(jié)構(gòu),每一個DS18B20 在其ROM 中都存有一個

59、其唯一的48位序列號,在出廠前已寫入片內(nèi)RMO中,主機在進行操作程序前必須逐一接入18B20 用讀ROM(33H)命令將該18B20 的序列號讀出并登錄.當(dāng)主機需要對眾多在線的DS18B20 的某一個進行操作,首先要發(fā)出匹配ROM 命令(55H),緊接著主機提供64位序列(包括該DS8B20的48位序列號),之后操作就是針對該DS18B20的.而所謂跳過ROM 命令.即為:之后的操作是對所有DS18B20 的,所以可以在一根總線上掛多個

60、DS18B20。</p><p><b>  六、 附錄</b></p><p><b>  1、程序代碼</b></p><p>  #include<reg52.h></p><p>  #include<intrins.h></p><p> 

61、 #define KEY P1</p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  sbit lcden=P2^2;//1602使能</p><p>  sbit lcdrd=P2^0;//數(shù)據(jù)、命令選擇端</p&

62、gt;<p>  sbit lcdrw=P2^1;//讀,寫選擇端</p><p>  sbit dq=P3^3;//18B20數(shù)據(jù)線</p><p>  sbit key1 = P1^0;</p><p>  sbit key2 = P1^1;</p><p>  sbit key3 = P1^2;</p>

63、<p>  sbit key4 = P1^3;</p><p>  sbit beeee = P3^7;</p><p>  uint set_t = 23;</p><p>  uchar code str1[]="temperature:";</p><p>  uchar code str2[]=&qu

64、ot; ";</p><p>  uchar data disdata[5];</p><p>  uint tvalue;</p><p>  uchar tflag;</p><p>  void delayms(uint ms)//延時毫秒</p><p>  { uint

65、 i,j;</p><p>  for(i=ms;i>0;i--)</p><p>  for(j=100;j>0;j--);</p><p><b>  }</b></p><p>  void key_cut(void)</p><p><b>  {</b>

66、</p><p>  unsigned int ii;</p><p>  if (KEY != 0xff)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key1 == 0)</p><p><b&g

67、t;  {</b></p><p><b>  set_t ++;</b></p><p><b>  }</b></p><p>  else if(key2 == 0)</p><p><b>  {</b></p><p><b&

68、gt;  set_t --;</b></p><p><b>  }</b></p><p>  else if(key3 == 0)</p><p><b>  {</b></p><p><b>  }</b></p><p>  els

69、e if(key4 == 0)</p><p><b>  {</b></p><p><b>  }</b></p><p>  while(KEY != 0xff);</p><p><b>  }</b></p><p><b>  }&

70、lt;/b></p><p>  void write_com(uchar com)//向1602中寫入命令碼</p><p>  { lcden=0;</p><p><b>  lcdrd=0;</b></p><p><b>  lcdrw=0;</b></p><p

71、><b>  P0=com;</b></p><p>  delayms(1);</p><p><b>  lcden=1;</b></p><p>  delayms(1);</p><p><b>  lcden=0;</b></p><p>

72、;<b>  }</b></p><p>  void write_date(uchar date)//向1602中寫入數(shù)據(jù)</p><p>  { lcden=0;</p><p><b>  lcdrd=1;</b></p><p><b>  lcdrw=0;</b>&l

73、t;/p><p><b>  P0=date;</b></p><p>  delayms(1);</p><p><b>  lcden=1;</b></p><p>  delayms(1);</p><p><b>  lcden=0;</b><

74、/p><p><b>  }</b></p><p>  void display(uchar *p)//1602顯示</p><p>  { while(*p!='\0')</p><p>  { write_date(*p);</p><p><b>  p++;<

75、/b></p><p>  delayms(1);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void lcd_init()//1602初始化</p><p>  { write_com(0x38);</p

76、><p>  delayms(5);</p><p>  write_com(0x01);</p><p>  delayms(5);</p><p>  write_com(0x0c);</p><p>  delayms(5);</p><p>  write_com(0x06);</p&

77、gt;<p>  delayms(5);</p><p><b>  }</b></p><p>  void lcd_display()//1602顯示初始化</p><p>  {lcd_init();</p><p>  write_com(0x80);</p><p>  d

78、isplay(str1);</p><p>  write_com(0xc0);</p><p>  display(str2);</p><p><b>  }</b></p><p>  void delayus(uint i)//延時微妙</p><p>  {while(i--);<

79、/p><p><b>  }</b></p><p>  void ds_init()//18B20初始化</p><p><b>  {dq=1;</b></p><p>  delayus(4);</p><p><b>  dq=0;</b></

80、p><p>  delayus(480);</p><p><b>  dq=1;</b></p><p>  delayus(60);</p><p><b>  if(dq==0)</b></p><p>  delayus(240);</p><p>

81、;<b>  }</b></p><p>  void ds_write(uchar date1)//向18B20中寫入數(shù)據(jù)</p><p>  { uchar i;</p><p>  for(i=0;i<8;i++)</p><p><b>  { dq=0;</b></p>

82、<p>  if((date1&0x01)==1)</p><p><b>  dq=1;</b></p><p><b>  else</b></p><p><b>  dq=0;</b></p><p>  delayus(21);</p>

83、<p><b>  dq=1;</b></p><p>  date1>>=1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  uchar ds_read()//由18B20讀取數(shù)據(jù)</p&g

84、t;<p>  { uchar i,temp;</p><p>  for(i=0;i<8;i++)</p><p><b>  { dq=0;</b></p><p><b>  dq=1;</b></p><p><b>  temp>>=1;</

85、b></p><p><b>  if(dq==1)</b></p><p>  temp|=0x80;</p><p>  delayus(30);</p><p><b>  }</b></p><p>  return(temp);</p><

86、p><b>  dq=1;</b></p><p><b>  }</b></p><p>  uint ds_temp()//從18B20中讀取溫度值</p><p>  { uchar a,b;</p><p>  ds_init();</p><p>  ds_w

87、rite(0xcc);</p><p>  ds_write(0x44);</p><p>  ds_init();</p><p>  ds_write(0xcc);</p><p>  ds_write(0xbe);</p><p>  a=ds_read();</p><p>  b=ds

88、_read();</p><p><b>  tvalue=b;</b></p><p>  tvalue<<=8;</p><p>  tvalue=tvalue|a;</p><p>  if(tvalue<0x0fff)</p><p><b>  tflag=0

89、;</b></p><p><b>  else</b></p><p>  {tvalue=~tvalue+1;</p><p><b>  tflag=1;</b></p><p><b>  }</b></p><p>  tvalue

90、=tvalue*(0.625);</p><p>  return(tvalue);</p><p><b>  }</b></p><p>  void ds_dis()//把溫度值送入1602中顯示</p><p><b>  {</b></p><p>  uchar

91、flagdat;</p><p>  disdata[0]=tvalue/1000+0x30;</p><p>  disdata[1]=tvalue%1000/100+0x30;</p><p>  disdata[2]=tvalue%100/10+0x30;</p><p>  disdata[3]=tvalue%10+0x30;<

92、/p><p>  if(tflag==0)</p><p>  flagdat=0x20;</p><p>  if(tflag==1)</p><p>  flagdat=0x2d;</p><p>  if(disdata[0]==0x30)</p><p>  {disdata[0]=0x20

93、;</p><p>  if(disdata[1]==0x30)</p><p>  {disdata[1]=0x20;</p><p><b>  }</b></p><p><b>  }</b></p><p>  write_com(0xc0);</p>

94、<p>  write_date(flagdat);</p><p>  write_com(0xc1);</p><p>  write_date(disdata[0]);</p><p>  write_com(0xc2);</p><p>  write_date(disdata[1]);</p><p&

95、gt;  write_com(0xc3);</p><p>  write_date(disdata[2]);</p><p>  write_com(0xc4);</p><p>  write_date(0x2e);</p><p>  write_com(0xc5);</p><p>  write_date(d

96、isdata[3]);</p><p><b>  }</b></p><p>  void T_baojing(void)</p><p><b>  {</b></p><p>  unsigned char ii = 0xc8;</p><p>  write_com(

97、ii);</p><p>  write_date((set_t/100)+0x30);</p><p>  write_com(ii+1);</p><p>  write_date((set_t%100/10)+0x30);</p><p>  write_com(ii+2);</p><p>  write_da

98、te((set_t%100%10)+0x30);</p><p>  if((tvalue/10) >= set_t)</p><p><b>  {</b></p><p>  beeee = 0;</p><p><b>  }</b></p><p><b&

99、gt;  else</b></p><p><b>  {</b></p><p>  beeee = 1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()//主程序

100、</p><p><b>  {</b></p><p>  beeee = 1;</p><p>  lcd_display();//1602顯示初始化</p><p><b>  while(1)</b></p><p><b>  {</b><

101、;/p><p>  ds_temp();//從18B20中讀取溫度</p><p>  ds_dis();//1602顯示溫度</p><p>  T_baojing();</p><p>  key_cut();</p><p><b>  }</b></p><p><

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論