基于大林算法的溫度控制系統(tǒng)設(shè)計.doc
《基于大林算法的溫度控制系統(tǒng)設(shè)計.doc》由會員分享,可在線閱讀,更多相關(guān)《基于大林算法的溫度控制系統(tǒng)設(shè)計.doc(26頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 計算機控制技術(shù)課程設(shè)計 2015/2016學(xué)年第二學(xué)期 設(shè)計課題:基于大林算法的電路溫度控制系統(tǒng)的設(shè)計 專 業(yè):__ __ 班 級: __ _ 學(xué) 號:___ _______ 姓 名:_______ _ _____ 2016年5月 目 錄 第一章 課題簡介 1 1.1課題的目的 1 1.1.1 本機實現(xiàn)的功能 1 1.1.2 擴展功能: 1 1.2課題的任務(wù)及要求 1
2、第二章 系統(tǒng)方案設(shè)計 2 2.1 水溫控制系統(tǒng)的總體介紹 2 2.2 系統(tǒng)框圖 2 2.3 閉環(huán)系統(tǒng)的工作原理 2 第三章 系統(tǒng)硬件設(shè)計 3 3.1 系統(tǒng)原理圖 3 3.2 單片機最小系統(tǒng)設(shè)計 3 第四章 大林控制算法設(shè)計 5 4.1 大林控制算法原理: 5 4.2 控制器的設(shè)計及公式推導(dǎo)過程 6 4.3 采樣周期的選擇: 7 第五章 水溫控制系統(tǒng)的仿真 7 5.1振鈴現(xiàn)象 7 5.2 Matlab仿真 9 5.2 大林算法控制系統(tǒng)編程設(shè)計: 10 5.3各模塊子程序設(shè)計 11 5.3.1主程序設(shè)計 11 5.3.2讀出溫度子程序 12 5.5.3數(shù)碼管顯示
3、模塊 13 5.5.4溫度處理程序 14 第六章 小結(jié)與體會 15 第七章 參考文獻 16 第八章 附錄 17 第一章 課題簡介 1.1課題的目的 1.1.1 本機實現(xiàn)的功能 (1)利用溫度傳感器采集到當前的溫度,通過AT89S52單片機進行控制,最后通過LED數(shù)碼管以串行口傳送數(shù)據(jù)實現(xiàn)溫度顯示。 (2)可以通過按鍵任意設(shè)定一個恒定的溫度。 (3)將水環(huán)境數(shù)據(jù)與所設(shè)置的數(shù)據(jù)進行比較,當水溫低于設(shè)定值時,開啟加熱設(shè)備,進行加熱;當水溫高于設(shè)定溫度時,停止加熱,從而實現(xiàn)對水溫的自動控制。 (4)當系統(tǒng)出現(xiàn)故障,超出控制溫度范圍時,自動蜂鳴報警。 1.1.2 擴展
4、功能: (1)具有通信能力,可接收其他數(shù)據(jù)設(shè)備發(fā)來的命令,或?qū)⒔Y(jié)果傳送到其他數(shù)據(jù)設(shè)備。 (2)采用適當?shù)目刂品椒▽崿F(xiàn)當設(shè)定溫度或環(huán)境溫度突變時,減小系統(tǒng)的調(diào)節(jié)時間和超調(diào)量。 (3) 溫度控制的靜態(tài)誤差。 1.2課題的任務(wù)及要求 一升水由800W的電熱設(shè)備加熱,要求水溫可以在一定范圍內(nèi)由人工設(shè)定,并能在環(huán)境溫度降低時實現(xiàn)自動調(diào)整,以保持設(shè)定的溫度基本不變。 (1)溫度測量范圍:10~100℃,最小區(qū)分度不大于1℃。 (2)控制精度在0.2℃以內(nèi),溫度控制的靜態(tài)誤差小于1℃。 (3)用十進制數(shù)碼管顯示實際水溫。 第二章 系統(tǒng)方案設(shè)計 2.1
5、水溫控制系統(tǒng)的總體介紹 本次設(shè)計采用采樣值和鍵盤設(shè)定值進行比較運算的方法來簡單精確地控制溫度。先通過鍵盤輸入設(shè)定溫度,保存在AT89S52單片機的指定單元中,再利用溫度傳感器DS18B20進行信號的采集,送入單片機中,保存在采樣值單元。然后把采樣值與設(shè)定值進行比較運算,得出控制量,從而調(diào)節(jié)繼電器觸發(fā)端的通斷,來實現(xiàn)將水溫控制在一定的范圍內(nèi)。當水溫超出單片機預(yù)存溫度時,蜂鳴器進行報警。單片機控制系統(tǒng)是一個完整的智能化的集數(shù)據(jù)采集、顯示、處理、控制于一體的系統(tǒng)。由傳感器、LED顯示單片機及執(zhí)行機構(gòu)控制部分等組成。 2.2 系統(tǒng)框圖 DS18B2
6、0 溫度傳感器 LED顯示 指示燈 蜂鳴器 AT89S52單片機 加熱繼電器 按鍵 2.3 閉環(huán)系統(tǒng)的工作原理 本設(shè)計以AT89S52單片機系統(tǒng)進行溫度采集與控制。溫度信號由模擬溫度傳感器DS18B20采集輸入AT89S52,利用溫度傳感器采集到當前的溫度,通過AT89S52單片機進行控制,最后通過LED數(shù)碼管以串行口傳送數(shù)據(jù)實現(xiàn)溫度顯示??梢酝ㄟ^按鍵任意設(shè)定一個恒定的溫度。將水環(huán)境數(shù)據(jù)與所設(shè)置的數(shù)據(jù)進行比較,當水溫低于設(shè)定值時,開啟加熱設(shè)備,進行加熱;當水溫高于設(shè)定溫度時,停止加熱,從而實現(xiàn)對水溫的自動控制。當系統(tǒng)出現(xiàn)故障,超出控制溫度范圍時,自動蜂鳴報
7、警。用單片機控制水溫可以在一定范圍內(nèi)設(shè)定,并能在環(huán)境溫度變化時保持溫度不變。 第三章 系統(tǒng)硬件設(shè)計 3.1 系統(tǒng)原理圖 在溫度測量控制系統(tǒng)中,實際溫度值由PT100恒流工作調(diào)理電路進行測量。為了克服PT100線性度不好的缺點,在信號調(diào)理電路中加入負反饋非線性校正網(wǎng)絡(luò);調(diào)理電路的輸出電壓經(jīng)ADC0808轉(zhuǎn)換后送入單片機AT89S51;對采樣數(shù)據(jù)進行濾波及標定處理后,由3位7段數(shù)碼管顯示。輸入的設(shè)定值由4位獨立按鍵電路進行設(shè)定,可分別對設(shè)定值的十位和個位進行加1、減1操作。設(shè)定值送入單片機后,由另外一組3位7段數(shù)碼管顯示。數(shù)碼管的段碼由74HC05驅(qū)動,位碼由三極管2N2222A驅(qū)動
8、。 系統(tǒng)采用PID閉環(huán)控制方案。將預(yù)置初值與溫度傳感器反饋信號比較得到偏差(e)進行PID運算處理得到控制量(u),通過此量來控制加熱器的加熱時間,從而控制加熱功率。由于水本身具有很大的熱慣性,所以必須對水溫的變化趨勢作出預(yù)測,并且根據(jù)需要及時反方向抑制,以防止出現(xiàn)較大的超調(diào)量的波動。在PID控制中,積分環(huán)節(jié)(I)具有很強的滯后效應(yīng),而微分環(huán)節(jié)(D)具有預(yù)見性,所以該方案最終采用PD算法,能夠很好的控制超調(diào),并且穩(wěn)態(tài)誤差也很小。 圖3-1 系統(tǒng)原理圖 3.2 單片機最小系統(tǒng)設(shè)計 基本的AVR硬件線路,包括以下幾部分: (1)復(fù)位線路的設(shè)計 AT89S52已經(jīng)內(nèi)置了上電復(fù)位設(shè)
9、計。并且在熔絲位里,可以控制復(fù)位時的額外 時間,故AVR外部的復(fù)位線路在上電時,可以設(shè)計得很簡單:直接拉一只10K的電 阻到VCC即可(R6)。 為了可靠,再加上一只0.1uF的電容(C0)以消除干擾、雜波。 D3(1N4148)的作用有兩個:作用一是將復(fù)位輸入的最高電壓鉗在Vcc+0.5V 左右,另一作用是系統(tǒng)斷電時,將R1(10K)電阻短路,讓C0快速放電,讓下一次來電時,能產(chǎn)生有效的復(fù)位。 當AVR在工作時,按下S0開關(guān)時,復(fù)位腳變成低電平,觸發(fā)AVR芯片復(fù)位。 重要說明:實際應(yīng)用時,如果你不需要復(fù)位按鈕,復(fù)位腳可以不接任何的零件,AVR芯片也能穩(wěn)定工作。即這部分不需要任何的
10、外圍零件。 圖3-2 復(fù)位電路設(shè)計 (2)晶振電路的設(shè)計 Mega16已經(jīng)內(nèi)置RC振蕩線路,可以產(chǎn)生1M、2M、4M、8M的振蕩頻率。不過, 內(nèi)置的畢竟是RC振蕩,在一些要求較高的場合,比如要與RS232通信需要比較精確的波特率時,建議使用外部的晶振線路。 早期的90S系列,晶振兩端均需要接22pF左右的電容。Mega系列實際使用時,這兩只小電容不接也能正常工作。不過為了線路的規(guī)范化,我們?nèi)越ㄗh接上。 重要說明:實際應(yīng)用時,如果你不需要太高精度的頻率,可以使用內(nèi)部RC振 蕩。即這部分不需要任何的外圍零件。 圖3-3 晶振電路設(shè)計 (3)電源設(shè)計 AV
11、R單片機最常用的是5V與3.3V兩種電壓。本線路以轉(zhuǎn)換成5V直流電壓,電路需要變壓器把220交流電壓轉(zhuǎn)換成28V交流電,再通過整流器,把交流電轉(zhuǎn)化成直流電,通過7809和7805三端正電源穩(wěn)壓電路轉(zhuǎn)化成直流5V。電源如圖3-4。 圖3-4 電源電路設(shè)計圖 第四章 大林控制算法設(shè)計 4.1 大林控制算法原理: 在許多工業(yè)過程中,被控對象一般都有純滯后特性,而且經(jīng)常遇到純滯后較大的對象。美國IBM公司的大林,在1968年提出了一種針對工業(yè)生產(chǎn)過程中,含有純滯后對象的控制算法,具有較好的效果。 假設(shè)帶有純滯后的一階、二階慣性環(huán)節(jié)的對象為: 式中,為純滯后時間
12、,、為時間常數(shù),K為放大系數(shù)。為簡單起見,設(shè)=NT,N為正整數(shù)。 大林算法的設(shè)計目標是設(shè)計合適的數(shù)字控制器,使整個閉環(huán)系統(tǒng)的傳遞函數(shù)為具有時間純滯后的一階慣性環(huán)節(jié),而且要求閉環(huán)系統(tǒng)的純滯后時間等于對象的純滯后時間。 4.2 控制器的設(shè)計及公式推導(dǎo)過程 - 電爐 溫度傳感器 D/A A/D 被控對象的傳遞函數(shù): 采樣周期T=1s,期望閉環(huán)傳遞函數(shù)的慣性時間常數(shù): 設(shè)期望閉環(huán)傳遞函數(shù)為: 系統(tǒng)的廣義對象傳遞函數(shù): 系統(tǒng)廣義對象的脈沖傳遞函數(shù)為: 系統(tǒng)的閉環(huán)脈沖傳遞函數(shù)為: 數(shù)字控制器的脈沖傳遞函數(shù)為: 當輸入為單位階躍時,
13、輸出為: 控制量的輸出為: 4.3 采樣周期的選擇: 在本實驗中,定時中斷間隔選取100ms,采樣周期T要求既是采樣中斷間隔的整數(shù)倍,又要滿足,而由被控對象的表達式可知,所以取N=1,=T,=1s,取T=1s。 因為,,因為采樣周期T=1s,定時中斷為1s,就是說1個定時中斷后進行采樣。 第五章 水溫控制系統(tǒng)的仿真 5.1振鈴現(xiàn)象 直接用上述控制算法構(gòu)成閉環(huán)控制系統(tǒng)時,人們發(fā)現(xiàn)數(shù)字控制器輸出U(z)會以1/2采樣頻率大幅度上下擺動。這種現(xiàn)象稱為振鈴現(xiàn)象。 振鈴現(xiàn)象與被控對象的特性、閉環(huán)時間常數(shù)、采樣周期、純滯后時間的大小等都有關(guān)系。振鈴現(xiàn)象中的振蕩是衰減的,
14、并且于由被控對象中慣性環(huán)節(jié)的低通特性,使得這種振蕩對系統(tǒng)的輸出幾乎無任何影響,但是振鈴現(xiàn)象卻會增加執(zhí)行機構(gòu)的磨損。在交互作用的多參數(shù)控制系統(tǒng)中,振鈴現(xiàn)象還有可能影響到系統(tǒng)的穩(wěn)定性,所以,在系統(tǒng)設(shè)計中,應(yīng)設(shè)法消除振鈴現(xiàn)象。 可引入振鈴幅度RA來衡量振蕩的強烈程度。振鈴幅度RA的定義為:在單位階躍信號的作用下,數(shù)字控制器D(z)的第0次輸出與第1次輸出之差值。 設(shè)數(shù)字控制器D(z)可以表示為: (5-1) 其中 (5-2) 那么,數(shù)字控制器D(z)輸出幅度的變
15、化完全取決于Q(z),則在單位階躍信號的作用下的輸出為: (5-3) 根據(jù)振鈴的定義,可得: (5-4) 上述表明,產(chǎn)生振鈴現(xiàn)象的原因是數(shù)字控制器D(z)在z平面上位于z=-1附近有極點。當z=-1時,振鈴現(xiàn)象最嚴重。在單位圓內(nèi)離z=-1越遠,振鈴現(xiàn)象越弱。在單位圓內(nèi)右半平面的極點會減弱振鈴現(xiàn)象,而在單位圓內(nèi)右半平面的零點會加劇振鈴現(xiàn)象。由于振鈴現(xiàn)象容易損壞系統(tǒng)的執(zhí)行機構(gòu),因此,應(yīng)設(shè)法消除振鈴現(xiàn)象。 大林提出了一個消除振鈴的簡單可行的方法,就是先找
16、造成振鈴現(xiàn)象的因子,然后令該因子中的z=1.這樣就相當于取消了該因子產(chǎn)生振鈴的可能性。根據(jù)終值定理,這樣處理后,不會影響輸出的穩(wěn)態(tài)值。 本設(shè)計的被控對象是含有純滯后的一階慣性環(huán)節(jié),大林算法求得的數(shù)字控制器為式: (5-5) 有可表示為式3-14所示: (5-6) 可能引起振鈴現(xiàn)象的因子是式3-15所示: (5-7) 其振鈴的幅度為: (5-8) 根據(jù)r值的不
17、同,有一下幾種情況:
(1)當r=0時,不存在振鈴極點因子,此時不產(chǎn)生振鈴現(xiàn)象
(2)當r=1時,存在一個極點z=-();
當τ<= 時,z≈-1,存在嚴重的振鈴。
當r=2時,存在極點Z=
當τ< 18、要求,合理地安排監(jiān)控軟件和各執(zhí)行模塊之間地調(diào)度關(guān)系。
本部分詳細介紹了基于AT89S52單片機的多路溫度采集控制系統(tǒng)的軟件設(shè)計。根據(jù)系統(tǒng)功能,可以將系統(tǒng)設(shè)計分為若干個子程序進行設(shè)計,如溫度采集子程序,數(shù)據(jù)處理子程序、顯示子程序、執(zhí)行子程序。采用Keil uVision3集成編譯環(huán)境和C語言來進行系統(tǒng)軟件的設(shè)計。本章從設(shè)計思路、軟件系統(tǒng)框圖出發(fā),先介紹整體的思路后,再逐一分析各模塊程序算法的實現(xiàn),最終編寫出滿足任務(wù)需求的程序。
采集到當前的溫度,通過LED數(shù)碼管實現(xiàn)溫度顯示。通過按鍵任意設(shè)定一個恒定的溫度將水環(huán)境數(shù)據(jù)與所設(shè)置的數(shù)據(jù)進行比較。當水溫低于設(shè)定值時,開啟加熱設(shè)備,進行加熱;當水溫高 19、于設(shè)定溫度時,停止加熱。當系統(tǒng)出現(xiàn)故障,超出控制溫度范圍時,自動蜂鳴報警并對溫度進行實時顯示。采用C語言編寫代碼,鑒于篇幅限制及DS18B20的應(yīng)用已經(jīng)規(guī)范和成熟,本文僅就主程序流程圖和顯示子程序流程圖及其代碼進行說明。通過定時器T0 P3.4口的定時來實現(xiàn),在此不再贅述。有關(guān)DS18B20的讀寫程序,編程時序分析等請見附錄三。功能主程序流程圖主程序通過調(diào)用溫度采集子程序完成溫度數(shù)據(jù)采集,然后調(diào)用溫度轉(zhuǎn)換子程序轉(zhuǎn)換讀取溫度數(shù)據(jù),調(diào)用顯示子程序進行溫度顯示和判斷溫度數(shù)據(jù)。
主程序(見附錄二)調(diào)用四個子程序,分別是溫度采集程序、數(shù)碼管顯示程序、溫度處理程序和數(shù)據(jù)存儲程序。
溫度采集程序:對溫度 20、芯片送過來的數(shù)據(jù)進行處理,進行判斷和顯示。
數(shù)碼管顯示程序:向數(shù)碼的顯示送數(shù),控制系統(tǒng)的顯示部分。
溫度處理程序:對采集到的溫度和設(shè)置的上、下限進行比較,做出判斷,向繼電器輸出關(guān)斷或閉合指令。
數(shù)據(jù)存儲程序:對鍵盤的設(shè)置的數(shù)據(jù)進行存儲。
設(shè)定溫度值
顯示當前溫度
判斷當前溫度值
超過設(shè)定1℃
低于設(shè)定1℃
報警
報警
是
否
否
是
圖1 系統(tǒng)總流程圖
5.3各模塊子程序設(shè)計
5.3.1主程序設(shè)計
主程序的主要功能是負責(zé)溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值,溫度測量每1s進行一次。這樣可以在一秒之內(nèi)測量一次被測溫度, 21、其程序流程見圖2所示。
通過調(diào)用讀溫度子程序把存入內(nèi)存儲中的整數(shù)部分與小數(shù)部分分開存放在不同的兩個單元中,然后通過調(diào)用顯示子程序顯示出來。
開始
調(diào)用讀溫度子程序
數(shù)字變換程序
顯示子程序
圖2 主程序流程圖
5.3.2讀出溫度子程序
讀出溫度子程序的主要功能是讀出RAM中的9字節(jié),在讀出時需進行CRC校驗,校驗有錯時不進行溫度數(shù)據(jù)的改寫。DS18B20的各個命令對時序的要求特別嚴格,所以必須按照所要求的時序才能達到預(yù)期的目的,同時,要注意讀進來的是高位在后低位在前,共有12位數(shù),小數(shù)4位,整數(shù)7位,還有一位符號位。
DS18B20的數(shù)據(jù)讀寫是通過時序處理位來確認信息交換 22、的。當總線控制器發(fā)起讀時序時,DS18B20僅被用來傳輸數(shù)據(jù)給控制器。因此,總線控制器在發(fā)出讀暫存器指令[BEh]或讀電源模式指令[B4H]后必須立刻開始讀時序,DS18B20可以提供請求信息。所有讀時序必須最少60us,包括兩個讀周期間至少1us的恢復(fù)時間。當總線控制器把數(shù)據(jù)線從高電平拉到低電平時,讀時序開始,數(shù)據(jù)線必須至少保持1us,然后總線被釋放在總線控制器發(fā)出讀時序后,DS18B20通過拉高或拉低總線上來傳輸1或0。當傳輸邏輯0結(jié)束后,總線將被釋放,通過上拉電阻回到上升沿狀態(tài)。從DS18B20輸出的數(shù)據(jù)在讀時序的下降沿出現(xiàn)后15us內(nèi)有效。因此,總線控制器在讀時序開始后必須停止把I/O 23、腳驅(qū)動為低電平15us,以讀取I/O腳狀態(tài)。
DS18B20復(fù)位、應(yīng)答子程序
跳過ROM匹配命令
寫入子程序
溫度轉(zhuǎn)移命令
寫入子程序
延時顯示子程序
DS18B20復(fù)位、應(yīng)答子程序
跳過ROM匹配命令
寫入子程序
讀溫度命令子程序
終止
圖3 讀出溫度子程序
5.5.3數(shù)碼管顯示模塊
本系統(tǒng)采用八位共陽極數(shù)碼管,用模擬串口的動態(tài)顯示數(shù)據(jù)。其流程圖如圖4所示:
子程序入口
初始化
查表取段碼
位碼送譯碼器選通低位數(shù)碼管
數(shù)字是否顯示亮
關(guān)顯示
返回
段碼送驅(qū)動顯示
顯示緩沖區(qū)左移
Y
N
圖4 數(shù)碼管顯示流程圖
5.5.4溫度處 24、理程序
基于單片機水溫控制系統(tǒng)通過DS18B20溫度傳感器采集到的溫度和設(shè)置的溫度上、下限進行比較得出結(jié)果。如果低于下限溫度或是高于上限溫度,則報警器進行進行報警。
第六章 小結(jié)與體會
這次的課程設(shè)計分配到兩個人一組完成,雖然只有短短的兩周時間,但是通過這些天的學(xué)習(xí)使我收獲巨大,讓我更加深刻的復(fù)習(xí)了課本知識,使得自己在專業(yè)技能和動手能力方面有了很大的提高,為以后自己進入社會打下了一個良好的基礎(chǔ)。
在這次的課程設(shè)計過程中,我與周航一組,我很感謝老師對我的指導(dǎo)及同學(xué)的幫助,我主要負責(zé)軟件的仿真,周航負責(zé)硬件系統(tǒng)的設(shè)計。在大林控制算法的設(shè)計中,遇到 25、了許多的難題,對于原理概念十分模糊,一些公式也忘了如何去使用,拿出了以前的課本對遺忘的知識進行了回顧,在同學(xué)的幫助下,與周航的討論中一步一步的完成了控制器的設(shè)計和大林算法公式的推導(dǎo)。使得我能夠順利的完成此次的課程設(shè)計,通過完成這次的課程設(shè)計,使我深刻的體會到了團隊的重要性,這次的課程設(shè)計很,但兩人一組的團隊的合作使課程設(shè)計簡單了許多,每個人都有明確的分工,這樣,再加上自己的努力終能取得成功。
感謝此次的課程設(shè)計讓我收獲良多!
第七章 參考文獻
[1]于海生主編,微型計算機控制技術(shù)[M],北京:清華大學(xué)出版社,2009
[2]李小堅 26、,趙山林,馮曉軍,龍懷冰.Protel DXP電路設(shè)計與制版實用教程(第2版).北京:人民郵電出版社.2009
[3]全國大學(xué)生電子設(shè)計競賽組委會.全國大學(xué)生電子設(shè)計競賽獲獎作品選編(第一屆-第五屆).北京: 北京理工大學(xué)出版社.2004
[4]張琳娜,劉武發(fā).傳感檢測技術(shù)及應(yīng)用.北京:中國計量出版社.1999
[5]沈德金,陳粵初. MCS-51系列單片機接口電路與應(yīng)用程序?qū)嵗?北京:北京航空航天大學(xué)出版社.1990
[6]周立功等.增強型80C51單片機速成與實戰(zhàn).北京:北京航空航天大學(xué)出版社.2003.7
[7]馬忠梅等.單片機的C語言應(yīng)用程序設(shè)計.北京:北京航空航天大學(xué)出版社 27、社.1998.10
[8]胡漢才.單片機原理及接口技術(shù).北京:清華大學(xué)出版社社.1996
[9]李志全等.智能儀表設(shè)計原理及應(yīng)用.北京:國防工業(yè)出版社.1998.6
[10]何立民.MCS-51系列單片機應(yīng)用系統(tǒng)設(shè)計.北京:北京航空航天大學(xué)出版社.1990.1
第八章 附錄
附錄一:系統(tǒng)程序
#include 28、nsigned int
sbit ds=P3^4;
sbit dula=P2^6;
sbit beep=P1^4; //定義蜂鳴器
sbit led=P1^1;
sbit jdq=P1^0;
uint temp,t,w; //定義整型的溫度數(shù)據(jù)
uchar flag;
float f_temp; //定義浮點型的溫度數(shù)據(jù)
uint low; //定義溫度下限值 是溫度乘以10后的結(jié)果
uint high; //定義溫度的上限值
sbit led1=P1^0; //控制發(fā)光二極管
sbit led2=P1^1; // 29、控制發(fā)光二極管
sbit s1=P3^5;
sbit s2=P3^6;
sbit s3=P3^7;
uchar flag1,flag2,flag3,flag4,s1num,qian,bai,shi,ge;
uchar code table[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0xc6
}; //共陽數(shù)碼管段碼表
uchar code table1[]=
{0x40,0x79,0x24,0x30,0x19,
0x12,0x02,0x78,0x00,0x10};//帶小數(shù)點的編碼
30、void delay(uchar z) //延時函數(shù)
{
uchar a,b;
for(a=z;a>0;a--)
for(b=100;b>0;b--);
}
void init()
{
EA=1;
ET1=1;
TR1=1;
TMOD=0x10;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
flag=0;
high=100;
jdq=1;
}
void didi()
{
beep=0;
led=0;
delay(500);
beep=1;
led=1;
31、
delay(500);
}
void dsreset(void) //DS18b20復(fù)位, 初始化函數(shù)
{
uint i;
ds=0;
i=103; //延時最短480us
while(i>0) i--;
ds=1; //等待16-60us,收到低電平一個約60-240us則復(fù)位成功
i=4;
while(i>0) i--;
}
bit tempreadbit(void) //讀1位數(shù)據(jù)函數(shù)
{
uint i;
bit dat;
ds=0;i++;
ds=1;i++;i++; 32、 //i++起到延時作用
dat=ds;
i=8;
while(i>0)i--;
return(dat);
}
uchar tempread(void) //讀1字節(jié)的數(shù)據(jù)函數(shù)
{
uint i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
dat=(j<<7)|(dat>>1);
//讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在dat里
}
return(dat);
}
void tempwritebyte(uchar dat) //向DS18B20寫一個 33、字節(jié)的數(shù)據(jù)函數(shù)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //寫1
{
ds=0;
i++;i++;
ds=1;
i=8;
while(i>0)
i--;
}
else //寫0
{
ds=0;
i=8;
while(i>0) i--;
ds=1;
i++;i++;
34、 }
}
}
void tempchange(void) //DS18B20開始獲取溫度并轉(zhuǎn)換
{
dsreset();
delay(1);
tempwritebyte(0xcc); //寫跳過讀ROM指令
tempwritebyte(0x44); //寫溫度轉(zhuǎn)換指令
}
uint get_temp() //讀取寄存器中存儲的溫度數(shù)據(jù)
{
uchar a,b;
dsreset();
delay(1);
tempwritebyte(0xcc); //寫跳過讀ROM指令
tempwritebyte(0xbe) 35、; //寫溫度轉(zhuǎn)換指令
a=tempread(); //讀低8位
b=tempread(); //讀高8位
temp=256*b+a;
f_temp=temp*0.0625; //溫度在寄存器中為12位,分辨率為0.0625
temp=f_temp*10+0.5; //乘以10表示小數(shù)點后面只取一位
return temp; //temp是整型
}
void keyscan()
{
if(s1==0)
{P2=0xff;
delay(5);
if(s1==0)
{
36、
while(!s1);
s1num++;
if(s1num==1)
{
flag=1;
}
if(s1num==2)
{
s1num=0;
flag=0;
}
}
}
if(s1num==1)
{
flag=1;
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!s2);
high+=10;
if(high==1000)
37、
high=100;
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!s3);
high-=10;
if(high==0)
high=100;
}
}
}
}
void main() //主函數(shù)
{
init();
while(1)
{
tempchange(); //溫度轉(zhuǎn)換函數(shù)
if(temp 38、idi();
}
if((temp>=high-10)&&(temp<=high))
{
jdq=0;
beep=1;
}
if((temp>high)&&(temp<=high+10))
{
jdq=1;
beep=1;
}
if(temp>high+10)
{
jdq=1;
didi();
}
}
}
void time1() interrupt 3
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
39、t++;
keyscan();
if(flag==0)
{
if(t==4) t=0;
switch(t)
{
case 1:P0=table[get_temp()/100]; P2=0xfd;break;
case 2:P0=table1[get_temp()%100/10];P2=0xfb;break;
case 3:P0=table[get_temp()%10]; P2=0xf7;break;
}
}
if(flag==1)
{
if(t==4) t=0;
switch(t)
40、 {
case 0:P0=0xff; P2=0xfe;break;
case 1:P0=0xff; P2=0xfd;break;
case 2:P0=table[high/100]; P2=0xfb;break;
case 3:P0=table[high%100/10]; P2=0xf7;break;
}
}
}
班級: 姓名: 學(xué)號:
1.簡要敘述系統(tǒng)的工作原理。
2.簡述復(fù)位電路設(shè)計原理。
3.系統(tǒng)如何產(chǎn)生報警?
4.簡述大林算法的原理。
5.采樣周期如何確立?
23
- 溫馨提示:
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. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案