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

下載本文檔

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

文檔簡介

1、<p><b>  數(shù)字溫度計</b></p><p><b>  摘 要</b></p><p>  本設(shè)計是一款簡單實用的小型數(shù)字溫度計,本文提出了基于MCS-51系列單片機的數(shù)字溫度計的制作電路和編程思想。該數(shù)字溫度計以宏晶公司的STC89C52 單片機為主控,配以DALLAS公司的DS18B20數(shù)字溫度傳感器,采用LCD1602

2、雙行英文字符液晶作顯示。實現(xiàn)了對溫度的測量,顯示和報警等功能。</p><p>  本次數(shù)字溫度計的設(shè)計共分為六部分:主控制器,復(fù)位電路,時鐘電路,傳感器部分,顯示部分,報警部分。主控制器、復(fù)位電路和時鐘電路組成單片機最小系統(tǒng),用于存儲程序和控制電路;傳感器即溫度傳感器,用來采集溫度,進行溫度轉(zhuǎn)換;顯示部分用來顯示采集到的溫度;當溫度不在預(yù)設(shè)溫度范圍時,報警電路工作。</p><p>  

3、測溫的總過程是傳感器采集到外部環(huán)境溫度,并進行轉(zhuǎn)換后傳到單片機,經(jīng)單片機處理判斷后將溫度傳遞到顯示器顯示。</p><p>  關(guān)鍵詞:51單片機,DS18B20溫度傳感器,LCD1602顯示器</p><p>  Digital Thermometer</p><p><b>  ABSTRACT</b></p><p&g

4、t;  The design is a simple and practical small digital thermometer, make circuits based on MCS-51 series single-chip digital thermometer and programming ideas. The Digital Thermometer macrocrystalline STC89C52 microcontr

5、oller as master, together with the Dallas DS18B20 digital temperature sensor, LCD1602 two-line English character LCD display. Temperature measurement, display and alarm functions.</p><p>  The design of the

6、Digital Thermometer is divided into six parts: the main controller, reset circuit, clock circuit, sensor part, the display section, part of the alarm. Main controller, reset circuit and clock circuit composed of the smal

7、lest single-chip system, used to store programs and control circuit; sensor temperature sensor, used to collect temperature, temperature conversion; show used to display the collected temperature.</p><p>  T

8、he total process of the temperature measurement of the sensor to the external ambient temperature, and the converted to the microcontroller, judged by the microcontroller processing temperature will be passed to the moni

9、tor display. When the temperature is outside the preset temperature range, the alarm circuit.</p><p>  KEY WORDS: 51 MCU DS18B20 temperature sensor, LCD1602 display</p><p><b>  目錄</b>

10、;</p><p><b>  前 言5</b></p><p>  第1章 系統(tǒng)總體設(shè)計6</p><p>  1.1 設(shè)計方案論證與選擇6</p><p>  1.1.1 顯示電路方案6</p><p>  1.1.2 測溫電路方案6</p><p>  1.

11、2 基本設(shè)計方案7</p><p>  第2章 硬件設(shè)計9</p><p>  2.1 DS18B20溫度傳感器9</p><p>  2.1.1 DS18B20內(nèi)部結(jié)構(gòu)及測溫原理9</p><p>  2.1.2 DS18B20的封裝及引腳功能11</p><p>  2.1.3 DS18B20的存儲器1

12、2</p><p>  2.1.4 DS18B20的操作命令13</p><p>  2.2 模塊電路設(shè)計15</p><p>  2.2.1 時鐘電路15</p><p>  2.2.2 復(fù)位電路15</p><p>  2.2.3 溫度采集電路16</p><p>  2.2.4

13、顯示電路17</p><p>  2.2.5 報警電路17</p><p>  第3章 軟件設(shè)計18</p><p>  3.1 DS18B20的讀操作18</p><p>  3.2 DS18B20的溫度數(shù)據(jù)處理20</p><p>  3.3 1602顯示部分21</p><p>

14、;  3.4 主程序23</p><p><b>  結(jié)論24</b></p><p><b>  謝辭25</b></p><p><b>  參考文獻26</b></p><p><b>  附錄27</b></p><p

15、><b>  前 言</b></p><p>  在人類的生活環(huán)境中,溫度扮演著極其重要的角色。無論你生活在哪里,從事什么工作,無時無刻不在與溫度打著交道。自18世紀工業(yè)革命以來,工業(yè)發(fā)展對是否能掌握溫度有著絕對的聯(lián)系。在冶金、鋼鐵、石化、水泥、玻璃、醫(yī)藥等等行業(yè),可以說幾乎80%的工業(yè)部門都不得不考慮著溫度的因素。溫度對于工業(yè)如此重要,由此推進了溫度傳感器的發(fā)展。</p>

16、<p>  隨著現(xiàn)代信息技術(shù)的飛速發(fā)展和傳統(tǒng)工業(yè)改造的逐步實現(xiàn),能夠獨立工作的溫度檢測和顯示系統(tǒng)應(yīng)用于諸多領(lǐng)域。傳統(tǒng)的溫度檢測以熱敏電阻為溫度敏感元件。熱敏電阻的成本低,但需后續(xù)信號處理電路,而且可靠性相對較差,測溫準確度低,檢測系統(tǒng)也有一定的誤差。與傳統(tǒng)的溫度計相比,本設(shè)計的數(shù)字溫度計具有讀數(shù)方便,測溫范圍廣,測溫精確,數(shù)字顯示,適用范圍寬等特點。選用STC89C52單片機作為主控制器件,DSl8B20作為測溫傳感器通過

17、LCD1602并行傳送數(shù)據(jù),實現(xiàn)溫度顯示。通過DSl8B20直接讀取被測溫度值,進行數(shù)據(jù)轉(zhuǎn)換,該器件的物理化學(xué)性能穩(wěn)定,線性度較好,在-55℃~125℃最大線性偏差小于0.1℃。該器件可直接向單片機傳輸數(shù)字信號,便于單片機處理及控制。另外,該溫度計還能直接采用測溫器件測量溫度,從而簡化數(shù)據(jù)傳輸與處理過程。</p><p>  第1章 系統(tǒng)總體設(shè)計</p><p>  1.1 設(shè)計方案論證與

18、選擇</p><p>  1.1.1 顯示電路方案</p><p>  方案一:采用數(shù)碼管動態(tài)顯示</p><p>  使用七段LED數(shù)碼管,采用動態(tài)顯示的方法來顯示各項指標,此方法雖然價格成本低,但是顯示單一,且功耗較大。</p><p>  方案二:采用LCD液晶顯示</p><p>  采用1602 LCD液晶顯

19、示,此方案顯示內(nèi)容相對豐富,且價格不高。</p><p>  綜合上述原因,采用方案二,使用LCD1602液晶作顯示電路。</p><p>  1.1.2 測溫電路方案</p><p>  方案一:采用模擬溫度傳感器測溫</p><p>  由于本設(shè)計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測溫度變化的電壓或電流采集過來

20、,進行A/D轉(zhuǎn)換后,就可以用單片機進行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示出來,這種設(shè)計需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。</p><p>  方案二:采用數(shù)字溫度傳感器</p><p>  進而考慮到用溫度傳感器,在單片機電路設(shè)計中,大多都是使用傳感器,所以這是非常容易想到的,所以可以采用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進行轉(zhuǎn)換,就

21、可以滿足設(shè)計要求。</p><p>  綜合考慮,很容易看出,采用方案二,電路比較簡單,軟件設(shè)計也比較簡單,故采用了方案二。</p><p>  1.2 基本設(shè)計方案</p><p>  本次的設(shè)計主要是利用了數(shù)字溫度傳感器DS18B20測量溫度信號,計算后可以在LCD數(shù)碼管上顯示相應(yīng)的溫度值。其溫度測量范圍為-55~125℃,精確到0.5℃。</p>

22、<p>  數(shù)字溫度計所測量的溫度采用數(shù)字顯示,控制器使用單片機STC89C51,測溫傳感器使用DS18B20,用LCD1602實現(xiàn)溫度顯示。從溫度傳感器DS18B20可以很容易直接讀取被測溫度值,進行轉(zhuǎn)換即滿足設(shè)計要求。</p><p>  根據(jù)DS18B20的通訊協(xié)議,單片機控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:每一次讀寫之前都要對DS18B20進行復(fù)位操作,復(fù)位成功后發(fā)送一條ROM指令

23、,最后發(fā)送RAM指令,這樣才能對DS18B20進行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,當DS18B20收到信號后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號表示復(fù)位成功。由于DS18B20單線通信功能是分時完成的,它有嚴格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命

24、令→處理數(shù)據(jù)。</p><p>  于是,給DS18B20不同的時序,可以讀取溫度傳感器的值,根據(jù)溫度算法算出當時的溫度值,在給顯示部分,通過LCD1602顯示出來。</p><p>  這個課題主要實現(xiàn)溫度的檢測以及通過LCD顯示這兩個大功能,以及讀取這個相對容易的功能。因此在溫度檢測這一模塊上,利用DS18B20這一目前比較先進的溫度傳感器,可以很精確地感測實時溫度,對于DS18B20

25、的通訊協(xié)議的控制,讀取測量的溫度值,經(jīng)過一定的算法,可以把溫度轉(zhuǎn)化為十進制,分別為高位和低位,先暫存起來。經(jīng)顯示模塊調(diào)用,最終在LCD1602上顯示。</p><p>  圖1-1所示為系統(tǒng)總體設(shè)計框圖。</p><p>  圖1-1 給出了系統(tǒng)總體設(shè)計框圖</p><p><b>  第2章 硬件設(shè)計</b></p><p

26、>  2.1 DS18B20溫度傳感器</p><p>  DS18B20溫度傳感器是DALLAS公司生產(chǎn)的1-Wire總線技術(shù)的典型產(chǎn)品。它可以將被測溫度直接轉(zhuǎn)換成數(shù)字量,因此單片機可以方便的通過串行總線實現(xiàn)讀取。另外,由于1-Wire具有成本低、節(jié)省I/O口、抗干擾能力強、便于總線擴展和維護等特點。</p><p>  DS18B20通過編程后,可以實現(xiàn)9~12位的溫度度數(shù)。由于

27、DS18B20可以由數(shù)據(jù)線本身提供電源,所以一條單總線上可以掛接多片DS18B20,特別適合構(gòu)成多點溫度測控系統(tǒng)。</p><p>  DS18B20的工作性能如下:</p><p> ?。?)1-Wire數(shù)據(jù)通信;</p><p> ?。?)可用數(shù)據(jù)線供電,電業(yè)范圍3~5.5V;</p><p> ?。?)最高12位分辨率;</p&g

28、t;<p> ?。?)12位分辨率時的最大工作周期為750ms;</p><p>  (5)可選擇寄生工作方式;</p><p> ?。?)檢測溫度范圍為-55℃~+125℃;</p><p>  (7) 被測溫度在-10℃~+85℃時,精度為±0.5℃; </p><p>  (8) 內(nèi)置E²PROM,限溫

29、報警功能;</p><p>  (9) 64位光刻ROM,內(nèi)置產(chǎn)品序列號,方便多機掛接;</p><p>  (10)封裝形式多樣;</p><p>  (11)負壓特性。電源極性接反時,芯片不會燒毀。</p><p>  2.1.1 DS18B20內(nèi)部結(jié)構(gòu)及測溫原理</p><p>  圖2-1所示為DS18B20的

30、內(nèi)部框圖,它主要包括寄生電源、溫度傳感器、64位激光ROM單線接口、存放中間數(shù)據(jù)的高速暫存器、用于存儲用戶設(shè)定的溫度上下限值的TH和TL觸發(fā)器存儲與控制邏輯、8位循環(huán)冗余校驗碼(CRC)發(fā)生器等七部分。</p><p>  圖2-1 DS18B20內(nèi)部結(jié)構(gòu)</p><p>  通過寄生電源電路,DS18B20可以從1-Wire上去的其工作電源。在信號線為高電平的時間周期內(nèi),會把能量貯存在內(nèi)

31、部的電容器中;在但信號線為低電平的時間期內(nèi),斷開此電源,直到信號線變?yōu)楦唠娖街匦陆由霞纳娙荩╇娫礊橹?。當然,DS18B20也可以直接通過將+5V電源接至VDD引腳為其供電。</p><p>  DS18B20通過一種片上溫度測量技術(shù)來測量溫度。圖2-2給出了DS18B20內(nèi)部溫度測量電路的方框圖。</p><p>  圖2-2 DS18B20內(nèi)部溫度測量電路的方框圖</p>

32、<p>  高、低溫度系數(shù)振蕩器分別是向計數(shù)器1和計數(shù)器2提供計數(shù)脈沖的振蕩器。這兩個振蕩器的區(qū)別是,低溫度系數(shù)振蕩器的振蕩頻率隨溫度變化很小,而高溫度系數(shù)振蕩器的振蕩頻率隨溫度變化很敏感。</p><p>  測溫電路初始工作時,溫度寄存器被預(yù)置為-55℃,同時計數(shù)器1也預(yù)置為與-55℃相對應(yīng)的預(yù)置數(shù)。然后,計數(shù)器1從預(yù)置數(shù)開始尖技術(shù),當寄存器中的數(shù)值減至0時,溫度寄存器中的溫度值就會增加1℃,這

33、是計數(shù)器1的預(yù)置數(shù)也改為由斜率累加器來提供。以后,溫度寄存器以同樣的方式進行工作,其中的數(shù)值是隨計數(shù)器1的工作不斷修改的,只有當計數(shù)器2中的預(yù)置數(shù)減到0時,溫度寄存器的數(shù)值才會停止變化。斜率累加器所提供的預(yù)置數(shù)也是隨溫度變化的,可以對補償感溫振蕩器的拋物線特性進行補償。</p><p>  圖2-2中比較器是用來確定溫度寄存器的最低有效位。例如在DS18B20設(shè)置為9為分辨率,當計數(shù)器2停止技術(shù)時,它會將計數(shù)器1

34、中的計數(shù)值轉(zhuǎn)換為溫度值與0.25℃相比較;若高于0.75℃,將最低進位后位置0。</p><p>  2.1.2 DS18B20的封裝及引腳功能</p><p>  DS18B20有8引腳SO封裝、8引腳μSOP封裝以及3引腳T0-92封裝三種形式。圖2-3給出了DS18B20芯片SO/μSOP封裝以及引腳。</p><p>  圖2-3 DS18B20封裝及引腳分

35、布</p><p>  DS18B20的引腳和引腳功能如表2-1所示。</p><p>  表2-1 DS18B20對ROM的操作指令</p><p>  2.1.3 DS18B20的存儲器</p><p>  DS18B20的存儲器由暫存器和E²PROM組成。暫存器用于1-Wire通信時確保數(shù)據(jù)傳輸?shù)恼_性。進行數(shù)據(jù)通信時,數(shù)據(jù)首

36、先會被寫入暫存器中,接著完成校驗后才可以被送入E²PROM中。</p><p>  DS18B20內(nèi)部暫存器的順序如圖2-4所示。</p><p>  圖2-4 內(nèi)部暫存器結(jié)構(gòu)</p><p>  字節(jié)0和字節(jié)1:溫度值。其中,字節(jié)0是溫度值低字節(jié),字節(jié)1為高字節(jié)。溫度高位、低位寄存器格式如下:</p><p><b> 

37、 溫度低位寄存器:</b></p><p><b>  溫度高位寄存器:</b></p><p>  溫度高位寄存器中的s表示符號位。當s=0時,表示溫度是正值,可以直接將二進制位轉(zhuǎn)換為十進制數(shù);當s=1時,表示溫度是負值,需要先將補碼轉(zhuǎn)換為源碼后,再轉(zhuǎn)換為十進制數(shù)。</p><p>  字節(jié)2和字節(jié)3:非易失性報警溫度上限和下限,

38、可以通過軟件進行修改。上電后,會自動從E²PROM中拷貝到暫存器。</p><p>  字節(jié)4:配置寄存器。用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率,上電時也會自動從E²PROM中拷貝到暫存器。該寄存器格式如下:</p><p>  通過寫命令來配置寄存器中的R0和R1,能夠設(shè)置DS18B20的分辨率。R0和R1的取值與分辨率的關(guān)系以及不同分辨率下的轉(zhuǎn)換時間表如表2-2所示。&l

39、t;/p><p>  表2-2 DS18B20存儲器操作命令</p><p>  字節(jié)5~字節(jié)7:未定義,字節(jié)中各位全部為邏輯1.</p><p>  字節(jié)9:前面8個字節(jié)的循環(huán)冗余校驗字節(jié)。</p><p>  2.1.4 DS18B20的操作命令</p><p>  根據(jù)DS18B20的通信協(xié)議,微處理器與DS18B2

40、0通訊需要有初始化DS18B20、ROM操作命令和DS18B20存儲器操作命令三個步驟。每一步操作必須符合1-Wire總線的協(xié)議要求,否則將無法讀取測量結(jié)果。</p><p>  對ROM的操作命令可以分為讀ROM、匹配ROM、跳過ROM、搜索ROM、報警搜索等,表2-3中列出了這些操作的命令代碼及其功能。</p><p>  表2-3 DS18B20對ROM的操作命令</p>

41、<p>  DS18B20存儲器操作命令可以分為溫度轉(zhuǎn)換、寫暫存器、讀暫存器、復(fù)制暫存器、重調(diào)E²PROM、讀取供電方式等,表2-4中列出了這些操作的命令代碼及其功能。</p><p>  表2-4 DS18B20存儲器操作指令</p><p>  2.2 模塊電路設(shè)計</p><p>  2.2.1 時鐘電路</p><

42、p><b>  圖2-4 時鐘電路</b></p><p>  89C51芯片內(nèi)部有一個高增益反相放大器,用于構(gòu)成振蕩器。反相放大器的輸入端為XTAL1,輸出端為XTAL2,兩端跨接石英晶體及兩個電容可以構(gòu)成穩(wěn)定的自激振蕩器。電容器C1和C2通常選取30pF左右,可穩(wěn)定頻率并對振蕩頻率有微調(diào)作用。振蕩脈沖頻率范圍為0~24MHz。本設(shè)計采用12MHz的晶振。</p>&l

43、t;p>  2.2.2 復(fù)位電路</p><p><b>  圖2-5 復(fù)位電路</b></p><p>  復(fù)位操作有上電自動復(fù)位和按鍵手動復(fù)位兩種方式。本設(shè)計采用兩種復(fù)位方式。</p><p>  2.2.3 溫度采集電路 </p><p>  圖2-6 溫度采集電路</p><p> 

44、 溫度采集電路如上圖,DS18B20采用外部供電方式。</p><p>  2.2.4 顯示電路</p><p><b>  圖2-7 顯示電路</b></p><p>  本設(shè)計采用LCD1602顯示所測溫度值,1602接P0口,需外接上拉電阻。</p><p>  2.2.5 報警電路</p><

45、p><b>  圖2-8 報警電路</b></p><p>  采用發(fā)光二極管進行報警,溫度值在20℃以下時,黃燈亮;溫度值在21℃-25℃之間時,綠燈亮;溫度值在25度以上時,紅燈亮。</p><p><b>  第3章 軟件設(shè)計</b></p><p>  系統(tǒng)程序主要包括主程序,讀出溫度子程序,溫度轉(zhuǎn)換命令子程

46、序,計算溫度子程序,報警子程序和顯示數(shù)據(jù)子程序等。</p><p>  3.1 DS18B20的讀操作</p><p>  DSl8B20的主要數(shù)據(jù)元件有:64位激光Lasered ROM,溫度靈敏元件和非易失性溫度告警觸發(fā)器TH和TL。DSl8B20可以從單總線獲取電源,當信號線為高電平時,將能量貯存在內(nèi)部電容器中;當單信號線為低電平時,將該電源斷開,直到信號線變?yōu)楦唠娖街匦陆由霞纳?電

47、容)電源為止。此外,還可外接5 V電源,給DSl8B20供電。DSl8B20的供電方式靈活,利用外接電源還可增加系統(tǒng)的穩(wěn)定性和可靠性。DS18B20讀寫時序如圖3-1所示。</p><p>  圖3-1 DS18B20的復(fù)位時序圖</p><p>  圖3-2 DS18B20的寫數(shù)據(jù)時序圖</p><p>  圖3-3 DS18B20的讀數(shù)據(jù)時序圖</p>

48、;<p>  由時序圖可知,DS18B20在復(fù)位時需要480us的低電平,等待15us后MCU將總線拉高,等待DS18B20的響應(yīng)信號;DS18B20在寫數(shù)據(jù)時分為寫“0”和寫“1”操作,寫“0”操作時,DS18B20需要至少60us的總線被拉低,然后在60us內(nèi)將“0”寫入DS18B20中,持續(xù)時間至少1us,寫“1”操作是只需將寫入的“0”改為“1”即可;DS18B20讀操作也分為讀“0”和讀“1”操作,讀“0”操作時

49、,總線需要15us被拉低,再拉高45us,然后再15us內(nèi)將數(shù)據(jù)讀走,讀“1”操作同讀“0”操作。程序流程圖如圖3-4所示。</p><p>  圖3-4 DS18B20讀取溫度的流程圖</p><p>  3.2 DS18B20的溫度數(shù)據(jù)處理</p><p>  讀出溫度數(shù)據(jù)后,LOW的低四位為溫度的小數(shù)部分,可以精確到0.0625℃,LOW的高四位和HIGH的低

50、四位為溫度的整數(shù)部分,HIGH的高四位全部為1表示負數(shù),全為0表示正數(shù)。所以先將數(shù)據(jù)提取出來,分為三個部分:小數(shù)部分、整數(shù)部分和符號部分。小數(shù)部分進行四舍五入處理:大于0.5℃的話,向個位進1;小于0.5℃的時候,舍去不要。圖3-5為溫度數(shù)據(jù)處理程序的流程圖。</p><p>  圖3-5 溫度數(shù)據(jù)處理</p><p>  3.3 1602顯示部分</p><p>

51、  1602的讀寫時序圖如下:</p><p>  圖3-6 1602液晶的讀時序圖</p><p>  圖3-7 1602液晶的寫時序圖</p><p>  1602顯示程序流程圖如圖3-8所示。</p><p>  圖3-8 1602顯示程序流程圖</p><p><b>  3.4 主程序</b&

52、gt;</p><p>  主程序流程圖如圖3-9所示。</p><p>  圖3-9 主程序流程圖</p><p><b>  結(jié)論</b></p><p>  本設(shè)計Keil C51對單片機多點溫度測量系統(tǒng)進行了軟件編寫。在編寫過程中,必須嚴格按照DS18B20的工作時序嚴格編寫,否則溫度無法準確測量。</p&

53、gt;<p>  硬件電路的設(shè)計與仿真是通過Proteus軟件來設(shè)計,仿真畢竟是仿真,是一個理想化的環(huán)境,與制作實物還是有很多差別的。</p><p>  本課題通過分析對比各種不同的溫度傳感器,選定DS18B20,這種單總線數(shù)字溫度傳感器的通信方式比較獨特,軟件編寫要求的比較新穎,特點突出。用其構(gòu)建的系統(tǒng)有很多優(yōu)點:硬件連線簡單,省去了使用模擬傳感器要進行放大、A/D轉(zhuǎn)換等工作。另外,由于DS18

54、20 單線通信功能是分時完成的,遵循嚴格的時隙概念,因此, 系統(tǒng)對DS1820 和各種操作必須按協(xié)議進行,即:初始化DS1820 (發(fā)復(fù)位脈沖)—發(fā)ROM功能命令—發(fā)存儲器操作命令—處理數(shù)據(jù)?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,每一個自帶地址,大大減少了系統(tǒng)的電纜數(shù),提高了系統(tǒng)的穩(wěn)定性和抗干擾性。</p><p>  通過調(diào)試成型系統(tǒng)發(fā)現(xiàn)了DS18B20除了上述優(yōu)點外,還有一些缺點,如:簡單的硬件連接的代價

55、是復(fù)雜的軟件時序,DS18B20在測量溫度的時候,靈敏度不夠高,溫度快速變化時無法迅速顯示出其變化。通過一系列的實驗發(fā)現(xiàn):由DS18B20構(gòu)建的測溫小系統(tǒng)適用于環(huán)境溫度監(jiān)控,對溫度小變化較敏感;不適合應(yīng)用于要求實時性強、溫度跨度大的測溫方式。</p><p><b>  謝辭</b></p><p>  本設(shè)計是在張麗娟老師的指導(dǎo)下完成的,張麗娟老師是一位極其負責任的

56、指導(dǎo)老師。課程設(shè)計初期時,就制定了詳細的設(shè)計安排與要求,而且按時要求完成。期間,多次對同學(xué)分析指導(dǎo),提供修改意見。為此,對張麗娟老師在課程設(shè)計期間提供的悉心指導(dǎo)與幫助表示衷心的感謝!</p><p>  此外,特別要感謝在這次課程設(shè)計中為我提供寶貴意見的同學(xué),有了大家的建議讓我這次課程設(shè)計順利完成!</p><p><b>  參考文獻</b></p>

57、<p>  劉國榮, 梁景凱. 計算機控制技術(shù)與應(yīng)用. 北京:機械工業(yè)出版社, 2011 .</p><p>  姜濤. 基于單片機的數(shù)字式溫度計設(shè)計. 西安:西北電力學(xué)校出版社,2012.</p><p>  林立,張俊亮,曹旭東. 單片機原理及應(yīng)用(基于Proteus和Keil ). 北京:電子工業(yè)出版社,2009.</p><p>  馬云峰. 單片

58、機與數(shù)字溫度傳感器DS18B20的接口設(shè)計. 計算機測量與控制,2002(04).</p><p>  趙海蘭、趙祥偉.智能溫度傳感器DS18B20的原理與應(yīng)用[J].現(xiàn)代電子技術(shù),2003,26(14).</p><p>  高金源,等. 計算機控制系統(tǒng). 北京:北京航空航天大學(xué)出版社,2001.</p><p>  張晉格,等. 計算機控制原理與應(yīng)用. 北京:電

59、子工業(yè)出版社,1995.</p><p>  何利民. 單片機應(yīng)用系統(tǒng)設(shè)計. 北京:北京航空航天大學(xué)出版社,1995.</p><p><b>  附錄</b></p><p><b>  附錄一 原理圖</b></p><p>  圖2-9 總體硬件原理圖</p><p>

60、<b>  附錄二 實物圖</b></p><p><b>  附錄三 源程序</b></p><p>  #include<reg52.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned i

61、nt</p><p>  uchar code table1[]="Xiaolong DS18B20";</p><p>  uchar code table2[]="CurrentTemp";</p><p>  uchar table3[5];</p><p>  sbit dq=P3^3;

62、 //18B20數(shù)據(jù)端</p><p>  sbit lcden=P2^2; //lcd使能</p><p>  sbit lcdrs=P2^0; //LCD命令數(shù)據(jù)選擇</p><p>  sbit lcdrw=P2^1; </p><p>  uint temp;

63、 //存整形數(shù)溫度</p><p>  float f_temp; //存浮點型溫度</p><p>  void delayms (uint z)//延時 (z=n,延時n ms)</p><p>  { </p><p><b>  uint x,y;<

64、/b></p><p>  for(x=0;x<z;x++)</p><p>  for(y=0;y<110;y++);</p><p><b>  }</b></p><p>  void dqreset() //18b20初始化</p><p><

65、;b>  {</b></p><p><b>  uint i;</b></p><p><b>  dq=1;</b></p><p><b>  dq=0;</b></p><p>  i=103;while(i>0)i--;</p>

66、<p><b>  dq=1;</b></p><p>  i=4;while(i>0)i--;</p><p><b>  dq = 1;</b></p><p><b>  } </b></p><p>  bit tempreadbit()

67、 //讀1位數(shù)據(jù)</p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  bit dat;</b></p><p><b>  dq=0;</b></p><p>&

68、lt;b>  i++;i++;</b></p><p><b>  dq=1;</b></p><p><b>  i++;</b></p><p><b>  dat=dq;</b></p><p>  i=8;while(i>0)i--;</p

69、><p>  return(dat);</p><p><b>  }</b></p><p>  uchar tempreadbyte() //讀1字節(jié)</p><p><b>  {</b></p><p>  uchar i,j,dat;</p>&

70、lt;p><b>  dat=0;</b></p><p>  for(i=0;i<8;i++)</p><p>  { j=tempreadbit();</p><p>  dat=(j<<7)|(dat>>1);</p><p><b>  }</b><

71、/p><p>  return(dat);</p><p><b>  }</b></p><p>  void tempwritebyte(uchar dat) //寫1字節(jié)</p><p><b>  {</b></p><p><b>  uint i,k

72、;</b></p><p>  bit testb;</p><p>  for(i=0;i<8;i++)</p><p>  { testb=dat&0x01;</p><p>  dat=dat>>1;</p><p>  if(testb) //寫1<

73、/p><p><b>  { dq=0;</b></p><p><b>  k++;k++;</b></p><p><b>  dq=1;</b></p><p><b>  k++;k++;</b></p><p>  k=8;w

74、hile(k>0)k--;</p><p><b>  }</b></p><p>  else{ dq=0; //寫0</p><p>  k=8;while(k>0)k--;</p><p><b>  dq=1;</b></p><p><b&

75、gt;  k++;k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void tempchange() //18b20獲取溫度</p>

76、;<p>  {//while(flag==0)</p><p>  dqreset();</p><p>  delayms(1);</p><p>  tempwritebyte(0xcc); //跳過ROM </p><p>  tempwritebyte(0x44); //獲取溫

77、度</p><p><b>  }</b></p><p>  uint gettemp() //讀取溫度</p><p><b>  {</b></p><p><b>  uint a,b;</b></p><p>  dqres

78、et();</p><p>  delayms(1);</p><p>  tempwritebyte(0xcc);</p><p>  tempwritebyte(0xbe);</p><p>  a=tempreadbyte();</p><p>  b=tempreadbyte();</p><

79、;p><b>  temp=b;</b></p><p><b>  temp<<=8;</b></p><p>  temp=temp|a;</p><p>  f_temp=temp*0.0625;</p><p>  temp=f_temp*100+0.5; //小數(shù)點

80、后四舍五入 取兩位</p><p>  return (temp);</p><p><b>  }</b></p><p>  void distemp(uint t) //分解溫度值</p><p><b>  {</b></p><p>  table3[0]=t/1

81、000+0x30; //得十位</p><p>  table3[1]=t%1000/100+0x30; //得個位</p><p>  table3[3]=t%100/10+0x30; //得十分位</p><p>  table3[4]=t%10+0x30; //得百分位</p><p>  table3[2

82、]='.'; //顯示小數(shù)點</p><p><b>  }</b></p><p>  void writelcdcomd(uchar comd)//lcd寫命令</p><p><b>  {</b></p><p><b>  lcdrs=0;&

83、lt;/b></p><p>  lcdrw=0; //lcd讀寫端設(shè)為寫</p><p>  lcden=0; //使能端關(guān)閉</p><p>  P0=comd; //注意1602與單片機接口匹配</p><p>  delayms(5);</p><p><b

84、>  lcden=1;</b></p><p>  delayms(2);</p><p><b>  lcden=0;</b></p><p>  delayms(2);</p><p><b>  }</b></p><p>  void writelc

85、ddat(uchar dat)//lcd寫數(shù)據(jù)</p><p><b>  {</b></p><p><b>  lcdrs=1;</b></p><p>  lcdrw=0; //lcd讀寫端設(shè)為寫</p><p><b>  lcden=0;</b>&l

86、t;/p><p>  P0=dat; //注意1602與單片機接口匹配</p><p>  delayms(5);</p><p><b>  lcden=1;</b></p><p>  delayms(2);</p><p><b>  lcden=0;</b>

87、;</p><p>  delayms(5);</p><p><b>  }</b></p><p>  void lcdinit() //1602初始化</p><p><b>  {</b></p><p><b>  lcden=0;</b

88、></p><p>  writelcdcomd(0x38);</p><p>  writelcdcomd(0x0c);</p><p>  writelcdcomd(0x06);</p><p>  writelcdcomd(0x01);</p><p>  delayms(5);</p>&l

89、t;p><b>  }</b></p><p>  void lcddis1() //顯示固定字幕</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  writelcdcomd(0x80+0); //0

90、x80表示要開始寫地址的命令</p><p>  for(i=0;i<16;i++)</p><p>  { writelcddat(table1[i]);</p><p>  // delayms(5);</p><p><b>  }</b></p><p>  writelcdco

91、md(0x80+0x40);</p><p>  for(i=0;i<11;i++)</p><p>  { writelcddat(table2[i]);</p><p>  // delayms(5);</p><p><b>  }</b></p><p><b>  }

92、</b></p><p>  void lcddis2() //顯示動態(tài)字幕</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  writelcdcomd(0x80+0x4b);</p><p>

93、;  for(i=0;i<5;i++)</p><p>  { writelcddat(table3[i]);</p><p>  delayms(5);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void te

94、mpdeal(uint t)//報警處理</p><p><b>  { </b></p><p>  if(t>2500)</p><p><b>  P1=0XFB;</b></p><p><b>  else </b></p><p>&

95、lt;b>  {</b></p><p>  if(t<2000)</p><p><b>  P1=0XFE ;</b></p><p>  else P1=0XFD ;</p><p><b>  }</b></p><p><b> 

96、 } </b></p><p>  void main() //主函數(shù)</p><p><b>  {</b></p><p>  lcdinit(); //1602初始化</p><p>  lcddis1(); //顯示固定字符</p><p><

97、b>  while(1)</b></p><p><b>  {</b></p><p>  tempchange(); //獲取溫度</p><p>  gettemp(); //讀取溫度</p><p>  distemp(temp); //分解溫度值</p><p

98、>  // distemp(gettemp());</p><p>  lcddis2(); //顯示溫度值</p><p>  delayms(5);</p><p>  tempdeal(temp);//溫度報警處理</p><p>  delayms(5);</p><p><b>  }

溫馨提示

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

評論

0/150

提交評論