

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘 要</b></p><p> 隨著現(xiàn)代信息技術(shù)的飛速發(fā)展,在生產(chǎn)中溫度的準(zhǔn)確測量是一個比較困難的事情從最初的酒精、水銀溫度計到現(xiàn)在的數(shù)字化、集成化的溫度檢測系統(tǒng)。可見傳感器的發(fā)展是飛快的。它快速的發(fā)展必將帶來新一輪的工業(yè)化的革命和社會發(fā)展的飛躍。</p><p> 本文從硬軟件兩個方面介紹了基于AT89S52單片機溫度自動檢測系
2、統(tǒng)的設(shè)計。系統(tǒng)硬件由控制電路、溫度采集電路、鍵盤和LED顯示電路組成。軟件設(shè)計從設(shè)計思路、軟件系統(tǒng)框圖出發(fā),先介紹整體的思路后,再逐一分析各模塊程序算法的實現(xiàn),最終編寫出滿足任務(wù)需求的程序。最終通過DS18B20采集溫度并顯示出來,由此對周圍環(huán)境的溫度進行有效檢測與報警。基本上滿足了溫度檢測與報警的要求,具有超調(diào)量小,采樣值與設(shè)定值基本一致,操作簡單等優(yōu)點。</p><p> 本設(shè)計創(chuàng)新點在于采用數(shù)字式溫度傳感
3、器DS18B20 作為感溫元件, 占用單片機引腳少, 因而可以利用空余引腳通過軟件模擬和溫度顯示。</p><p> 關(guān)鍵詞:溫度檢測;AT89S52;LED顯示器;DS18B20溫度傳感器</p><p><b> ABSTRACT</b></p><p> With the rapid development of modern in
4、formation technology, accurate measurement of temperature in the production is a difficult thing from the initial alcohol, mercury thermometer to the present digital, integrated temperature detection system. Visible sens
5、or development is fast. Its rapid development will bring about a new round of industrial revolution and a leap of social development.</p><p> This paper introduces the design of automatic detection system o
6、f temperature based on AT89S52 from two aspects of hardware and software. The system hardware consists of control circuit, temperature acquisition circuit, keyboard and LED display circuit. Software design from the desig
7、n ideas, software system block diagram, first introduced the overall idea, and then one by one to analyze the implementation of each module program algorithm, and ultimately to write programs to meet the needs of the<
8、/p><p> The design innovation is the use of digital temperature sensor DS18B20 as a temperature sensor, the use of single-chip pin, and thus can be used in the spare pin through the software simulation and tem
9、perature display.</p><p> Key word:Temperature detection ;LED AT89S52 display; DS18B20 temperature sensor</p><p><b> 目 錄</b></p><p><b> 引言2</b></p>
10、;<p> 1 溫度采集系統(tǒng)的設(shè)計說明2</p><p> 1.1 溫度控制系統(tǒng)完成的功能2</p><p> 1.2 溫度采集系統(tǒng)方案2</p><p> 1.3 設(shè)計思路2</p><p> 2 硬件電路設(shè)計3</p><p> 2.1 系統(tǒng)總體設(shè)計3</p>
11、<p> 2.2 各部分硬件電路設(shè)計3</p><p> 2.2.1、時鐘電路設(shè)計3</p><p> 2.2.2系統(tǒng)復(fù)位電路4</p><p> 2.2.3報警與控制電路設(shè)計4</p><p> 2.2.4 LED顯示電路設(shè)計5</p><p> 2.2.5溫度檢測電路設(shè)計6<
12、;/p><p> 2.2.6按鍵電路設(shè)計8</p><p><b> 3 軟件設(shè)計9</b></p><p> 3.1 主程序方案9</p><p> 3.2 各個模塊子程序設(shè)計11</p><p> 3.2.1溫度采集11</p><p> 3.2.2
13、數(shù)碼管顯示模塊12</p><p> 3.2.3溫度處理程序12</p><p> 4 系統(tǒng)調(diào)試13</p><p> 4.1 測試環(huán)境及工具13</p><p> 4.2 測試方法13</p><p> 4.3 測試結(jié)果分析13</p><p><b> 5
14、 結(jié)論14</b></p><p><b> 謝 辭15</b></p><p><b> 參考文獻(xiàn)16</b></p><p> 附錄..............................................................17</p><
15、;p><b> 引言</b></p><p> 隨著社會的發(fā)展,科技的進步,以及測溫儀器在各個領(lǐng)域的應(yīng)用,智能化已是現(xiàn)代溫度控制系統(tǒng)發(fā)展的主流方向。溫度測試控制系統(tǒng),控制對象是溫度。溫度控制在日常生活及工業(yè)領(lǐng)域應(yīng)用相當(dāng)廣泛,比如溫室、水池、發(fā)酵缸、電源等場所的溫度控制。而以往溫度控制是由人工完成的而且不夠重視,其實在很多場所溫度都需要監(jiān)控以防止發(fā)生意外。針對此問題,本系統(tǒng)設(shè)計的目的
16、是實現(xiàn)一種可連續(xù)高精度調(diào)溫的溫度控制系統(tǒng),它應(yīng)用廣泛,功能強大,小巧美觀,便于攜帶,是一款既實用又廉價的控制系統(tǒng)。特別是近年來,溫度控制系統(tǒng)已應(yīng)用到人們生活的各個方面,但溫度控制一直是一個未開發(fā)的領(lǐng)域,卻又是與人們息息相關(guān)的一個實際問題。</p><p> 1 溫度采集系統(tǒng)的設(shè)計說明</p><p> 1.1溫度控制系統(tǒng)完成的功能</p><p> 本器件以
17、AT89S52單片機系統(tǒng)進行溫度采集與控制 溫度信號由模擬溫度傳感器DS18B20采集輸入AT89S52,主控器能對各溫度檢測器通過LED進行顯示。</p><p><b> 本機實現(xiàn)的功能:</b></p><p> 1. 當(dāng)溫度低于設(shè)定下限溫度時,低溫發(fā)光二極管閃爍,蜂鳴器報警;</p><p> 2. 當(dāng)溫度上升到下限溫度以上時,高
18、溫發(fā)光二極管閃爍,蜂鳴器報警;</p><p> 3. 數(shù)碼管即時顯示溫度。</p><p> 1.2 溫度采集系統(tǒng)方案</p><p> 采用數(shù)字可編程溫度傳感器作為溫度檢測元件。數(shù)字可編程溫度傳感器可以直接讀出被測溫度值。不需要將溫度傳感器的輸出信號接到A/D轉(zhuǎn)換器上,減少了系統(tǒng)的硬件電路的成本和整個系統(tǒng)的體積。</p><p>
19、 美國Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 “一線總線”接口的溫度傳感器,在其內(nèi)部使用了在板(ON-B0ARD)專利技術(shù)。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)?!耙痪€總線”獨特而且經(jīng)濟的特點,使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新概念?,F(xiàn)在,新一代的DS18B20體積更小、更經(jīng)濟、更靈活。使你可以充分發(fā)揮“一線總線”的優(yōu)點。 同DS1820一樣,DS18B20也支持“一
20、線總線”接口,測量溫度范圍為-55°C~+125°C,在-10~+85°C范圍內(nèi),精度為±0.5°C?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3V~5.5V的電壓范圍,使系統(tǒng)設(shè)計更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小</p>&l
21、t;p><b> 1.3 設(shè)計思路</b></p><p> 用溫度傳感器去讀取當(dāng)前的溫度值,再把溫度值傳送到51單片機,51單片機再根據(jù)讀取到的溫度值進行處理。如果溫度是符合要求就顯示當(dāng)前溫度,如果高于上限溫度,則顯示上限溫度并蜂鳴,如果低于下限溫度就顯示下限溫度并蜂鳴。</p><p><b> 2 硬件電路設(shè)計</b><
22、/p><p> 2.1 系統(tǒng)總體設(shè)計</p><p> 本次設(shè)計采用采樣值和鍵盤設(shè)定值進行比較運算的方法來簡單精確地控制溫度。它的整體思想是先通過鍵盤輸入設(shè)定溫度的范圍,保存在AT89S52的指定單元中,再利用溫度傳感器DS18B20進行信號的采集,送入單片機中,保存在采樣值單元。然后把采樣值與設(shè)定值進行比較運算,得出控制量,從而調(diào)節(jié)繼電器觸發(fā)端的通斷,來實現(xiàn)將溫度控制在一定的范圍內(nèi)。單片
23、機控制系統(tǒng)是一個完整的智能化的集數(shù)據(jù)采集、顯示、處理、控制于一體的系統(tǒng)。由傳感器、LED顯示單片機及執(zhí)行機構(gòu)控制部分等組成。系統(tǒng)結(jié)構(gòu)框圖如圖2.1所示。</p><p> 圖2.1 系統(tǒng)硬件結(jié)構(gòu)框圖</p><p> 2.2 各部分硬件電路設(shè)計</p><p> 2.2.1、時鐘電路設(shè)計</p><p> 時鐘電路是用來產(chǎn)生AT89S
24、52單片機工作時所必須的時鐘信號,AT89C52本身就是一個復(fù)雜的同步時序電路,為保證工作方式的實現(xiàn),AT89C52在唯一的時鐘信號的控制下嚴(yán)格的按時序執(zhí)行指令進行工作 ,時鐘的頻率影響單片機的速度和穩(wěn)定性。通常時鐘由于兩種形式:內(nèi)部時鐘和外部時鐘。</p><p> 我們系統(tǒng)采用內(nèi)部時鐘方式來為系統(tǒng)提供時鐘信號。AT89C52內(nèi)部有一個用于構(gòu)成振蕩器的高增益反向放大器,該放大器的輸入輸出引腳為XTAL1和XT
25、AL2,它們跨接在晶體振蕩器和用于微調(diào)的電容,便構(gòu)成了一個自激勵振蕩器。</p><p> 電路中的C1、C2的選擇在30PF左右,但電容太小會影響振蕩的頻率、穩(wěn)定性和快速性。晶振頻率為在1.2MHZ~12MHZ之間,頻率越高單片機的速度就越快,但對存儲器速度要求就高。為了提高穩(wěn)定性我們采用溫度穩(wěn)定性好的NPO電容,采用的晶振頻率為12MHZ。本次系統(tǒng)的時鐘電路設(shè)計如圖2.2所示。</p><
26、;p> 圖2.2 時鐘電路圖</p><p> 2.2.2系統(tǒng)復(fù)位電路</p><p> 在圖2.3 中復(fù)位開關(guān)K 被按下并松開,使端獲得低電平,RST 端輸出復(fù)位信號,單片機復(fù)位?;蛴捎? VCC 加入并超過復(fù)位門限電壓) 引起系統(tǒng)正常復(fù)位。</p><p> 圖2.3 復(fù)位電路圖</p><p> 2.2.3報警與控制電路
27、設(shè)計</p><p> 在微型計算機控制系統(tǒng)中,為了安全生產(chǎn),對于一些重要的參數(shù)或系統(tǒng)部位,都設(shè)有緊急狀態(tài)報警系統(tǒng),以便提醒操作人員注意,或采取緊急措施。其方法就是把計算機采集的數(shù)據(jù)或記過計算機進行數(shù)據(jù)處理、數(shù)字濾波,標(biāo)度變換之后,與該參數(shù)上下限給定值進行比較,如果高于上限值(或低于下限值)則進行報警,否則就作為采樣的正常值,進行顯示和控制。室內(nèi)的溫度高于設(shè)定的溫度范圍內(nèi)時當(dāng)P1.4輸出低電平“0”時,三極管導(dǎo)
28、通,壓電蜂鳴器兩端獲得約+5V電壓而鳴叫,發(fā)出報警聲音。溫度高于設(shè)定上限溫度是P1.4輸出低電平,P1.0輸出低電平,高溫報警 溫度低于設(shè)定下限溫度是P1.4輸出低電平,P1.1輸出低電平,低溫報警。 </p><p> 圖2.4 報警與控制電路與單片機的連接</p><p> 2.2.4 LED顯示電路設(shè)計</p><p> LED數(shù)碼管是一種半導(dǎo)體
29、發(fā)光器件,其基本單元是發(fā)光二極管,通過對其不同的管腳輸入相對的電流,會使其發(fā)亮,從而顯示出數(shù)字??梢燥@示:時間、日期、溫度等可以用數(shù)字代替的參數(shù)。 </p><p> 數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個發(fā)光二極管單元(多一個小數(shù)點顯示);按能顯示多少個“8”可分為1位、2位、4位等等數(shù)碼管;按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽極數(shù)碼管是指將所有發(fā)光二極管
30、的陽極接到一起形成公共陽極(COM)的數(shù)碼管。共陽極數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮。當(dāng)某一字段的陰極為高電平時,相應(yīng)字段就不亮。</p><p> 動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,通過由各自獨立的I/O線控制,當(dāng)單片機的P
31、0口輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對P2.0-P2.3位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。通過分時輪流控制各個數(shù)碼管的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。</p><p> 在本設(shè)計中采用了四位七段數(shù)碼管,用動態(tài)驅(qū)動來顯示溫度的值,如圖2.5所示。<
32、/p><p> 圖2.5 顯示電路圖</p><p> 2.2.5溫度檢測電路設(shè)計</p><p> 本次設(shè)計所采用的溫度傳感器為Dallas半導(dǎo)體公司的數(shù)字化溫度傳感器DS18B20,它是世界上第一片支持“一線總線”接口的溫度傳感器?!耙痪€器件”體積更小、適用電壓更寬、更經(jīng)濟。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。DS18B20可以程序設(shè)定9-
33、12位的分辨率,精度為±0.5℃。可選更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報警溫度存儲在EEPROM中,掉電后依然保存。</p><p> DS18B20與AT89S52單片機接口電路的設(shè)計</p><p> DSl8B20數(shù)字溫度計提供9位(二進制)溫度讀數(shù),指示器件的溫度信息經(jīng)過單線接口送入DSl8B20或從DSl8B20送出,因此從主機CPU到D
34、Sl8B20僅需一條線,當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機可以通過單線接口讀出該數(shù)據(jù),讀數(shù)據(jù)時低位在先,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。</p><p> 當(dāng)符號位S=0時,表示測得的溫度值為正值,可以直接將二進制位轉(zhuǎn)換為十進制;當(dāng)符號位S=1時,表示測得的溫度值為負(fù)值,要先將補
35、碼變成原碼,再計算十進制數(shù)值。表2是一部分溫度值對應(yīng)的二進制溫度數(shù)據(jù)[6]。</p><p> 圖2.6 DS18B20與AT89S52單片機的連接</p><p> DS18B20支持“一線總線”接口,測量溫度范圍為 -55°C--+125°C,在-10--+85°C范圍內(nèi),精度為±0.5°C?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳
36、輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費電子產(chǎn)品等。</p><p> 1.DS18B20產(chǎn)品的特點 </p><p> ?。?)只要求一個端口即可實現(xiàn)通信。 </p><p> ?。?)在DS18B20中的每個器件上都有獨一無二的序列號。 </p><p> (3)實際應(yīng)用中不
37、需要外部任何元器件即可實現(xiàn)測溫。 </p><p> ?。?)測量溫度范圍在-55°C- +125°C之間。 </p><p> ?。?)數(shù)字溫度計的分辨率用戶可以從9位到12位選擇。 </p><p> ?。?)內(nèi)部有溫度上、下限設(shè)置。 </p><p> 2.DS18B20的引腳介紹 </p><
38、p> TO-92封裝的DS18B20引腳功能描述見表1。 </p><p> 表1 DS18B20詳細(xì)引腳功能描述</p><p> 因為一線通信接口,必須在先完成ROM設(shè)定,否則記憶和控制功能將無法使用。主要首先DS18B20提供以下功能命令之一:讀ROM, ROM匹配,搜索ROM,跳過ROM,報警檢查。若指令成功地使DS18B20完成溫度測量,數(shù)據(jù)存儲在DS18B20的存儲
39、器。一個控制功能指揮指示DS18B20的演出測溫。測量結(jié)果將被放置在DS18B20內(nèi)存中,并可以讓閱讀發(fā)出記憶功能的指揮,閱讀內(nèi)容的片上存儲器。溫度報警觸發(fā)器TH和TL都有一字節(jié)EEPROM 的數(shù)據(jù)。如果DS18B20不使用報警檢查指令,這些寄存器可作為一般的用戶記憶用途。在片上還載有配置字節(jié)以理想的解決溫度數(shù)字轉(zhuǎn)換。寫TH,TL指令以及配置字節(jié)利用一個記憶功能的指令完成。所有的數(shù)據(jù)的讀、寫都是從最低位開始。</p>&l
40、t;p> 2.2.6按鍵電路設(shè)計</p><p> 鍵盤共有三個鍵,判斷K3~K5鍵是否按下,可采用軟件查詢和中斷的方法,當(dāng)某個鍵按下時,低電平有效。3個鍵K3~K5的功能定義如表所示。</p><p><b> K3~K5鍵的定義</b></p><p><b> 圖2.7 按鍵電路</b></p&g
41、t;<p><b> 3 軟件設(shè)計</b></p><p><b> 3.1 主程序方案</b></p><p> 首先要根據(jù)系統(tǒng)的總體功能和鍵盤設(shè)置選擇一種最合適的監(jiān)控程序結(jié)構(gòu),然后根據(jù)實時性的要求,合理地安排監(jiān)控軟件和各執(zhí)行模塊之間地調(diào)度關(guān)系。</p><p> 本部分詳細(xì)介紹了基于AT89S5
42、2單片機的多路溫度采集控制系統(tǒng)的軟件設(shè)計。根據(jù)系統(tǒng)功能,可以將系統(tǒng)設(shè)計分為若干個子程序進行設(shè)計,如溫度采集子程序,數(shù)據(jù)處理子程序、顯示子程序、執(zhí)行子程序。采用Kiel uVision3集成編譯環(huán)境和匯編語言來進行系統(tǒng)軟件的設(shè)計。本章從設(shè)計思路、軟件系統(tǒng)框圖出發(fā),先介紹整體的思路后,再逐一分析各模塊程序算法的實現(xiàn),最終編寫出滿足任務(wù)需求的程序。</p><p> 并對溫度進行實時顯示。采用C語言編寫代碼, 鑒于篇
43、幅限制及DS18B20 的應(yīng)用已經(jīng)規(guī)范和成熟, 本文僅就主程序流程圖和顯示子程序流程圖及其代碼進行說明。通過定時器T0 P3.4口的定時來實現(xiàn), 在此不再贅述。主程序流程圖主程序通過調(diào)用溫度采集子程序完成溫度數(shù)據(jù)采集, 然后調(diào)用溫度轉(zhuǎn)換子程序轉(zhuǎn)換讀取溫度數(shù)據(jù),調(diào)用顯示子程序進行溫度顯示和判斷溫度數(shù)據(jù)。</p><p> 主程序調(diào)用四個子程序,分別是溫度采集程序、數(shù)碼管顯示程序、溫度處理程序和數(shù)據(jù)存儲程序。<
44、;/p><p> 溫度采集程序:對溫度芯片送過來的數(shù)據(jù)進行處理,進行判斷和顯示。</p><p> 數(shù)碼管顯示程序:向數(shù)碼的顯示送數(shù),控制系統(tǒng)的顯示部分。</p><p> 溫度處理程序:對采集到的溫度和設(shè)置的上、下限進行比較,做出判斷,向繼電器輸出。</p><p> 數(shù)據(jù)存儲程序:對鍵盤的設(shè)置的數(shù)據(jù)進行存儲。</p>&
45、lt;p> 圖 3.1 系統(tǒng)流程圖</p><p> 3.2 各個模塊子程序設(shè)計</p><p><b> 3.2.1溫度采集</b></p><p> 溫度采集子程序流程圖如下:</p><p> 圖3.2 溫度采集子程序流程圖</p><p> 3.2.2數(shù)碼管顯示模塊
46、 </p><p> 本系統(tǒng)采用共陽極數(shù)碼管,用模擬串口的動態(tài)顯示數(shù)據(jù)。其流程圖如圖3.3所示:</p><p> 圖3.3 數(shù)碼管顯示流程圖</p><p> 3.2.3溫度處理程序</p><p> 系統(tǒng)通過DS18B20采集到溫度和設(shè)置的上、下限進行比較得出結(jié)果,進行報警。</p>
47、;<p> void hdidi()</p><p><b> {</b></p><p><b> beep=0;</b></p><p><b> led1=0;</b></p><p> delay(500);</p><p&g
48、t;<b> beep=1;</b></p><p><b> led1=1;</b></p><p> delay(500);</p><p><b> }</b></p><p> void ldidi()</p><p><b>
49、; {</b></p><p><b> beep=0;</b></p><p><b> led2=0;</b></p><p> delay(50);</p><p><b> beep=1;</b></p><p><b
50、> led2=1;</b></p><p> delay(50);</p><p><b> }</b></p><p><b> 4 系統(tǒng)調(diào)試</b></p><p> 4.1 測試環(huán)境及工具</p><p> 測試溫度:0-100攝氏度。(
51、模擬不同溫度值環(huán)境)</p><p> 測試儀器及軟件:數(shù)字萬用表,溫度計0-100攝氏度。</p><p><b> 4.2 測試方法</b></p><p> 先檢查元器件的好壞和是否連接正確,再運行系統(tǒng)運行,觀察系統(tǒng)硬件檢測是否正常(包括單片機控制系統(tǒng),鍵盤電路,顯示電路,溫度測試電路等)。系統(tǒng)自帶測試表格數(shù)據(jù),觀察顯示數(shù)據(jù)是否相符
52、合即可。</p><p> 采用溫度傳感器變化情況,目測顯示電路是否正常。并記錄溫度值,與實際溫度值比較,得出系統(tǒng)的溫度指標(biāo)。</p><p><b> 4.3測試結(jié)果分析</b></p><p> 自檢正常,溫度顯示正常。</p><p> 因為芯片是塑料封裝,所以對溫度的感應(yīng)靈敏度不是相當(dāng)高,需要一個很短的時
53、間才能達(dá)到穩(wěn)定。</p><p><b> 5 結(jié)論</b></p><p> 經(jīng)過設(shè)計和實踐,本設(shè)計已經(jīng)完成了一個比較完整的溫度檢測預(yù)與報警系統(tǒng)。它可以通過鍵盤輸入溫度上限、下限值,然后計算其上限和下限的中間值作為最適溫度值。不斷的采集溫度值,顯示溫度值,如果發(fā)現(xiàn)采集的溫度值高于上限值就通過相應(yīng)的提示燈亮。如果采集的溫度值低于下限值,那么也有相應(yīng)的燈提示操作人員
54、。如果并沒有超過上下限則不會報警。致此本人設(shè)計基本完成了預(yù)期的目標(biāo),系統(tǒng)在溫度采集、溫度處理和鍵盤處理方面做的比較好,而在數(shù)據(jù)的存儲和數(shù)碼管的顯示方面不夠理想。主要存在以下幾個方面:</p><p> 程序的代碼不夠精練,浪費AT89S52內(nèi)的FLASH ROM;</p><p> 未對以前的溫度數(shù)值進行存儲,使以后不能利用這些數(shù)據(jù);</p><p> 對數(shù)碼
55、管的控制考慮不周,以致出現(xiàn)閃爍現(xiàn)象;</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 陶冶,袁永超,羅平. 基于DS18B20的單片機溫度測量系統(tǒng)[J]. 農(nóng)機化研究,2007,10:160-164.</p><p> [2] 盧思祺. MCS-51單片機溫度控制系統(tǒng)的設(shè)計[J].
56、60;科技致富向?qū)?2013,17:25+30.</p><p> [3] 周秀明,曹雋,張春龍. 基于DS18B20的單片機溫度檢測與調(diào)節(jié)系統(tǒng)設(shè)計[J]. 實驗室科學(xué),2011,01:79-81.</p><p> [4] 周欽,張博舒. 單片機溫度控制系統(tǒng)探究[J]. 安徽電子信息職業(yè)技術(shù)學(xué)院學(xué)報,2011,02:22-23+28.</
57、p><p> [5] 李曉妮. 單片機溫度控制系統(tǒng)的設(shè)計[J]. 九江學(xué)院學(xué)報(自然科版),2005,02:25-28.</p><p> [6] 余瑾,姚燕. 基于DS18B20測溫的單片機溫度控制系統(tǒng)[J]. 微計算機信息,2009,08:105-106+112.</p><p> [7] 岳慧平,劉廣,劉建平.
58、0;單片機溫度控制系統(tǒng)方案的研究[J]. 信息系統(tǒng)工程,2012,02:139-140. </p><p> [8] 趙曉光. 單片機溫度控制系統(tǒng)方案的研究[J]. 科技傳播,2013,03:187+175.[9] Su, Liangyu. Design of RF Heat Therapy Syst
59、em Based on DS18B20 and FPGA[J]. Sensors &Transducers,</p><p> 2014, 1789:89.</p><p> [10] Limin Cai. Temperature Measurement and
60、0;Control System Based on Embedded WEB[J]. Computer and</p><p> Information Science,2009,22:108.</p><p><b> 附 錄</b></p><p><
61、;b> 源程序代碼</b></p><p> #include <reg52.h> //52系列頭文件</p><p> #include <stdio.h></p><p> #define uchar unsigned char //宏定義uchar</p><p> #de
62、fine uint unsigned int //宏定義uint</p><p> sbit ds=P3^4; //定義DS198B20的io口</p><p> sbit beep=P1^4; //定義蜂鳴器的io</p><p> uint temp,t,w; //定義整型的溫度數(shù)據(jù)</p><p>
63、 uchar flag;</p><p> float f_temp; //定義浮點型的溫度數(shù)據(jù)</p><p> uint low; //定義溫度下限值 是溫度乘以10后的結(jié)果</p><p> uint high; //定義溫度的上限值</p><p> sbit led1=P1^0; //控制高溫發(fā)
64、光二極管</p><p> sbit led2=P1^1; //控制低溫發(fā)光二極管</p><p> sbit s1=P3^5;//功能鍵控制io</p><p> sbit s2=P3^6;//增大按鍵io</p><p> sbit s3=P3^7; //減少鍵控制io</p><p
65、> uchar flag1,flag2,flag3,flag4,s1num,qian,bai,shi,ge;</p><p> uchar code table[]=</p><p><b> {</b></p><p> 0xc0,0xf9,0xa4,0xb0,0x99,</p><p> 0x92,0
66、x82,0xf8,0x80,0x90,</p><p> };//共陽數(shù)碼管段碼表沒有小數(shù)點 0~9</p><p> uchar code table1[]=</p><p> {0x40,0x79,0x24,0x30,0x19,</p><p> 0x12,0x02,0x78,0x00,0x10};//帶小數(shù)點的編碼
67、0~9</p><p> void delay(uchar z) //延時函數(shù)</p><p><b> {</b></p><p> uchar a,b;</p><p> for(a=z;a>0;a--)</p><p> for(b=100;b>0;b--);&
68、lt;/p><p><b> }</b></p><p> void init()</p><p><b> {</b></p><p> EA=1;//打開全局中斷控制 ,再此條件下,由各個中段控制位確定相應(yīng)中斷的打開和關(guān)閉</p><p> ET1=1;
69、 //打開定時器T1中段</p><p> TR1=1;//啟動定時器T1</p><p> TMOD=0x10;//定時器1工作方式1</p><p> TH1=(65536-4000)/256; //給定時器高四位賦初值</p><p> TL1=(65536-4000)%256; //給定時器第四位賦初值</p>
70、;<p><b> flag=0;</b></p><p> low=200; //下限溫度是20</p><p> high=300; //上限溫度是30</p><p><b> }</b></p><p> void hdidi() //高溫報警</p
71、><p><b> {</b></p><p> beep=0; //蜂鳴器打開</p><p> led1=0; //高溫發(fā)光二極管亮</p><p> delay(500);//延時</p><p> beep=1;//蜂鳴器關(guān)閉</p><
72、p> led1=1; //發(fā)光二極管關(guān)閉</p><p> delay(500); //延時</p><p><b> }</b></p><p> void ldidi() //低溫報警</p><p><b> {</b></p><p>
73、 beep=0; //蜂鳴器打開</p><p> led2=0; //低溫發(fā)光二極管亮</p><p> delay(500);//延時</p><p> beep=1; //蜂鳴器關(guān)閉</p><p> led2=1; //低溫發(fā)光二極管滅</p><p> delay
74、(500); //延時</p><p><b> }</b></p><p> void dsreset(void) //DS18b20復(fù)位, 初始化函數(shù)</p><p><b> {</b></p><p><b> uint i;</b></p&g
75、t;<p><b> ds=0;</b></p><p> i=103; //延時最短480us</p><p> while(i>0) i--;</p><p> ds=1; //等待16-60us,收到低電平一個約60-240us則復(fù)位成功</p><p><b&
76、gt; i=4;</b></p><p> while(i>0) i--;</p><p><b> }</b></p><p> bit tempreadbit(void) //讀1位數(shù)據(jù)函數(shù)</p><p><b> {</b></p><p&
77、gt;<b> uint i;</b></p><p><b> bit dat;</b></p><p><b> ds=0;i++;</b></p><p> ds=1;i++;i++;//i++起到延時作用</p><p><b> dat=
78、ds;</b></p><p><b> i=8;</b></p><p> while(i>0)i--;</p><p> return(dat);</p><p><b> }</b></p><p> uchar tempread(void)
79、//讀1字節(jié)的數(shù)據(jù)函數(shù)</p><p><b> {</b></p><p> uint i,j,dat;</p><p><b> dat=0;</b></p><p> for(i=1;i<=8;i++)</p><p><b> {<
80、;/b></p><p> j=tempreadbit();</p><p> dat=(j<<7)|(dat>>1); </p><p> //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在dat里</p><p><b> }</b></p><p> r
81、eturn(dat);</p><p><b> }</b></p><p> void tempwritebyte(uchar dat) //向DS18B20寫一個字節(jié)的數(shù)據(jù)函數(shù)</p><p><b> {</b></p><p><b> uint i;</b>&
82、lt;/p><p><b> uchar j;</b></p><p> bit testb;</p><p> for(j=1;j<=8;j++)</p><p><b> {</b></p><p> testb=dat&0x01;</p>
83、<p> dat=dat>>1;</p><p> if(testb) //寫1</p><p><b> {</b></p><p><b> ds=0;</b></p><p><b> i++;i++;</b></p>
84、<p><b> ds=1;</b></p><p><b> i=8;</b></p><p> while(i>0)</p><p><b> i--;</b></p><p><b> }</b></p>
85、<p> else //寫0</p><p><b> {</b></p><p><b> ds=0;</b></p><p><b> i=8;</b></p><p> while(i>0) i--;</p><p&
86、gt;<b> ds=1;</b></p><p><b> i++;i++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>
87、<p> void tempchange(void) //DS18B20開始獲取溫度并轉(zhuǎn)換</p><p><b> {</b></p><p> dsreset();</p><p><b> delay(1);</b></p><p> tempwritebyte(0x
88、cc);//寫跳過讀ROM指令</p><p> tempwritebyte(0x44); //寫溫度轉(zhuǎn)換指令</p><p><b> }</b></p><p> uint get_temp()//讀取寄存器中存儲的溫度數(shù)據(jù)</p><p><b> {</b></
89、p><p> uchar a,b;</p><p> dsreset();</p><p><b> delay(1);</b></p><p> tempwritebyte(0xcc); //寫跳過讀ROM指令</p><p> tempwritebyte(0xbe); //寫
90、溫度轉(zhuǎn)換指令</p><p> a=tempread(); //讀低8位</p><p> b=tempread(); //讀高8位 </p><p> temp=256*b+a;</p><p> f_temp=temp*0.0625; //溫度在寄存器中為12位,分辨率為0.0625</p>
91、<p> temp=f_temp*10+0.5; //乘以10表示小數(shù)點后面只取一位</p><p> return temp; //temp是整型</p><p><b> }</b></p><p> void keyscan() //按鍵掃描程序</p><p><
92、b> {</b></p><p> if(s1==0) //如果按鍵s1按下</p><p><b> {P2=0xff;</b></p><p> delay(5);//延時按鍵消抖</p><p> if(s1==0)//如果按鍵S1按下</p><p>&l
93、t;b> { </b></p><p> while(!s1);//等待按鍵釋放</p><p> s1num++; //是s1num加1</p><p> if(s1num==1) //如果是s1num==1;flag=1;</p><p><b> {</b></p>
94、;<p><b> flag=1;</b></p><p><b> }</b></p><p> if(s1num==2)//如果是s1num==2;flag=2;</p><p><b> {</b></p><p><b> flag=
95、2;</b></p><p><b> }</b></p><p> if(s1num==3) //如果是s1num==3,是s1num==0;flag清0;</p><p><b> {</b></p><p><b> s1num=0;</b><
96、/p><p><b> flag=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> if(s1num==1)//如果是s1
97、num==1</p><p><b> {</b></p><p><b> flag=1;</b></p><p> if(s2==0) //如果按鍵2按下 </p><p><b> {</b></p><p> delay(5)
98、; //按鍵消抖</p><p> if(s2==0) //如果按鍵2按下</p><p><b> {</b></p><p> while(!s2); //等待按鍵釋放</p><p> low+=10; //低溫溫度+1</p><p> if(low==10
99、00) //如果下限溫度為100,則清為20</p><p><b> low=200;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(s3==0) //如果按鍵3按下</p>&
100、lt;p><b> {</b></p><p> delay(5);//延時按鍵消抖</p><p> if(s3==0)//如果按鍵3按下</p><p><b> {</b></p><p> while(!s3); //等待按鍵釋放</p>
101、<p> low-=10; //下限溫度減一</p><p> if(low==0) //如果下限溫度是0</p><p> low=200; //則下限溫度清20</p><p><b> }</b></p><p><b> }</b></p>
102、;<p><b> }</b></p><p> if(s1num==2) //如果s1num==2</p><p><b> {</b></p><p><b> flag=2;</b></p><p> if(s2==0) //如果
103、按鍵2按下 </p><p><b> {</b></p><p> delay(5); //按鍵消抖</p><p> if(s2==0) //如果按下按鍵2</p><p><b> {</b></p><p> while(!s2);
104、 //等待按鍵2釋放</p><p> high+=10;//高溫溫度加1</p><p> if(high==1000)//如果高溫為1000</p><p> high=200; //高溫溫度清20</p><p><b> }</b></p><p><b&
105、gt; }</b></p><p> if(s3==0) //如果按下s3按下</p><p><b> {</b></p><p> delay(5); //按鍵消抖</p><p> if(s3==0) //如果按下S3按鍵</p><p&g
106、t;<b> {</b></p><p> while(!s3); //等待按鍵S3按下</p><p> high-=10; //高溫溫度減1</p><p> if(high==0) //如果高溫溫度為0,則高溫溫度變成30</p><p><b> high=300
107、;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void main()
108、//主函數(shù)</p><p><b> {</b></p><p><b> init();</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> temp
109、change(); //溫度轉(zhuǎn)換函數(shù)</p><p> //delay(5);</p><p> //temp=get_temp()/10;</p><p> if(temp>high) //如果得出的溫度大于上限溫度</p><p><b> {</b></p><p>
110、; hdidi(); //高溫報警</p><p><b> }</b></p><p> if(temp<low) //如果得出的值小于下限溫度</p><p><b> {</b></p><p> ldidi(); //低溫報警</p>&l
111、t;p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p> void time1() interrupt 3 //定時器中斷1</p><p><b> {</b>
112、</p><p> TH1=(65536-4000)/256; //給定時器1賦初值</p><p> TL1=(65536-4000)%256; //給定時器1賦初值</p><p> t++; //每中斷1次,t加1</p><p> keyscan(); //按鍵掃描程序</p
113、><p> if(flag==0) //flag等于0,顯示測出的溫度值</p><p><b> {</b></p><p> if(t==4)t=0; //如果等于4,t清0</p><p><b> switch(t)</b></p><p&
114、gt;<b> {</b></p><p> case 1:P0=table[get_temp()/100]; P2=0xfd;break;//得出測出溫度的十位,在第二位數(shù)碼管上顯示</p><p> case 2:P0=table1[get_temp()%100/10];P2=0xfb;break;//得出測出溫度的各位,在第三位數(shù)碼管上顯示&
115、lt;/p><p> case 3:P0=table[get_temp()%10]; P2=0xf7;break;//得出測出溫度的小數(shù)點位,在第四位數(shù)碼管上顯示</p><p> //case 3:delay(1);break;</p><p><b> }</b></p><p><b>
116、}</b></p><p> if(flag==1) //如果flag等于1,顯示低溫溫度</p><p><b> {</b></p><p> if(t==4)t=0; //如果t等于4,t清0</p><p> switch(t) //掃描t</p>&l
117、t;p><b> {</b></p><p> case 0:P0=0xc7; P2=0xfe;break; //數(shù)碼管第一位顯示l</p><p> case 1:P0=0xff; P2=0xfd;break; //數(shù)碼管第二位什么都不顯示</p><p> case 2:P0=table[low/100
118、]; P2=0xfb;break;//數(shù)碼管第三位顯示低溫溫度十位</p><p> case 3:P0=table[low%100/10]; P2=0xf7;break; //數(shù)碼管第四位顯示低溫溫度個位</p><p><b> }</b></p><p><b> }</b></p>
119、<p> if(flag==2) //如果flag等于2,顯示高溫溫度</p><p><b> {</b></p><p> if(t==4)t=0; //如果t等于4,t清0</p><p> switch(t) //掃描t</p><p><b>
120、 {</b></p><p> case 0:P0=0x89; P2=0xfe;break; //數(shù)碼管第一位顯示h</p><p> case 1:P0=0xff; P2=0xfd;break; //數(shù)碼管第二位什么都不顯示</p><p> case 2:P0=table[high/100]; P2=0xfb;
121、break; //數(shù)碼管第三位顯示高溫溫度十位</p><p> case 3:P0=table[high%100/10]; P2=0xf7;break;//數(shù)碼管第四位顯示高溫溫度個位</p><p><b> }</b></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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89s52單片機溫度自動檢測系統(tǒng)的設(shè)計
- 基于at89s52單片機溫度自動檢測系統(tǒng)的設(shè)計
- 單片機課程設(shè)計---基于at89s52單片機的溫度控制系統(tǒng)
- 單片機課程設(shè)計---基于at89s52 單片機的溫度控制系統(tǒng)
- 單片機課程設(shè)計---基于單片機at89s52的數(shù)字溫度計的設(shè)計
- 基于at89s52單片機溫度測量的課程設(shè)計畢業(yè)論文
- 單片機課程設(shè)計---基于at89s52交通燈設(shè)計
- 自動檢測技術(shù)課程設(shè)計-基于單片機的溫度自動檢測儀表設(shè)計
- 課程設(shè)計-- 基于at89s52單片機的密碼鎖設(shè)計
- 課程設(shè)計---基于at89s52單片機簡易電子琴設(shè)計
- 課程設(shè)計---基于at89s52單片機簡易電子琴設(shè)計
- 基于at89s52單片機溫度控制系統(tǒng)畢業(yè)設(shè)計
- 基于at89s52單片機的數(shù)字式頻率檢測裝置設(shè)計課程設(shè)計
- 基于at89s52單片機溫度控制系統(tǒng)設(shè)計畢業(yè)設(shè)計
- 基于at89s52單片機溫度控制系統(tǒng)設(shè)計畢業(yè)設(shè)計
- 基于at89s52單片機溫度采集設(shè)計畢業(yè)論文
- 本科畢業(yè)論文-基于at89s52單片機的溫度檢測系統(tǒng)設(shè)計
- 課程設(shè)計---基于at89s52單片機數(shù)字音樂盒設(shè)計
- 單片機課程設(shè)計報告--基于at89s52的簡易電子琴
- 基于AT89S52單片機的溫度控制系統(tǒng).pdf
評論
0/150
提交評論