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

下載本文檔

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

文檔簡介

1、<p><b>  本科畢業(yè)論文</b></p><p><b>  (20 屆)</b></p><p>  基于C51單片機的船舶輔鍋爐水位自動控制系統(tǒng)設(shè)計</p><p><b>  摘要</b></p><p>  鍋爐水位是鍋爐運行時重要的參數(shù),水位過低可

2、能會發(fā)生鍋爐干燒現(xiàn)象,導(dǎo)致鍋爐燒壞。水位過高會導(dǎo)致蒸汽帶水過多,蒸汽品質(zhì)下降,會引起設(shè)備腐蝕、水擊,燒壞過熱器管子。</p><p>  本文在“育鯤”輪輔鍋爐現(xiàn)有設(shè)備的基礎(chǔ)上,設(shè)計了一套簡易的鍋爐水位自動控制系統(tǒng),由于育鯤輪通常是在航行時使用廢氣鍋爐,停泊時使用燃油鍋爐,對水位的控制不需要很精確,所以本系統(tǒng)對燃油鍋爐水位采用單沖量控制。系統(tǒng)由硬件系統(tǒng)和軟件系統(tǒng)兩部分組成。硬件系統(tǒng)和軟件系統(tǒng)都采用模塊化設(shè)計,將系

3、統(tǒng)分為若干模塊進行初步設(shè)計,然后將各個模塊進行整合,經(jīng)過改進最終形成一個完善的控制系統(tǒng)。用仿真軟件Proteus和編程軟件Keil相結(jié)合,完成系統(tǒng)硬件設(shè)計和軟件編程,程序由C語言編寫。硬件系統(tǒng)以STC89C52單片機為核心,包括模擬量采集輸入模塊、單片機最小單元模塊、報警模塊、鍵盤模塊、顯示模塊及端口擴展模塊。軟件系統(tǒng)包括初始化模塊、中斷模塊、數(shù)據(jù)處理模塊、鍵盤模塊、顯示模塊、A/D轉(zhuǎn)換模塊和報警模塊。通過硬件系統(tǒng)和軟件系統(tǒng)相結(jié)合,實現(xiàn)

4、具有液位檢測和控制的雙重功能,同時也具有報警和顯示的功能,并能通過鍵盤對參數(shù)值進行手動設(shè)定。最后,提出了顯示模塊的合理改進方案,并且在育鯤輪現(xiàn)有的通信網(wǎng)絡(luò)基礎(chǔ)上設(shè)計了通信模塊,使系統(tǒng)功能更加完善。</p><p>  關(guān)鍵詞:鍋爐液位,單片機,單沖量控制,模塊化</p><p><b>  ABSTRACT</b></p><p>  Wate

5、r level is an important parameter when a boiler is running. The phenomenon of distilling without water may occur when the water level is too low, and the boiler may be burn down finally. Due to high water level, the qual

6、ity of the steam will become worse. What’s worse, it may also cause corrosion and water attack of equipments, and burn down the super-heater coil.</p><p>  This paper aims at design a simple set of automatic

7、 control system of the boiler’s water level based on existing equipments of the “YU KUN” vessel. Generally, exhaust gas boiler is in service during sailing and auxiliary oil-burning boiler is in service in harbor. Thus,

8、the control of water level does not need to be very precisely. This control system applies single pulse control to the water level. It is composed of two parts: hardware system and software system. They are all modulariz

9、ed. Initi</p><p>  Keywords: Boiler, Water level, Microcontroller, Single pulse control, Modularization</p><p><b>  目錄</b></p><p><b>  1 前言1</b></p>

10、<p><b>  1.1課題意義1</b></p><p><b>  1.2發(fā)展狀況1</b></p><p>  2 硬件系統(tǒng)設(shè)計2</p><p>  2.1 系統(tǒng)總體設(shè)計2</p><p>  2.1.1 系統(tǒng)功能2</p><p>  2.1.

11、2 硬件系統(tǒng)示意圖2</p><p>  2.2 各硬件模塊設(shè)計3</p><p>  2.2.1 模擬量采集輸入模塊3</p><p>  2.2.2 單片機最小單元模塊5</p><p>  2.2.3 I/O端口擴展模塊7</p><p>  2.2.4 鍵盤模塊9</p><p&

12、gt;  2.2.5 顯示模塊11</p><p>  2.2.6 報警模塊12</p><p>  2.3 硬件系統(tǒng)總原理圖13</p><p>  3 軟件系統(tǒng)設(shè)計14</p><p>  3.1 軟件系統(tǒng)總體設(shè)計14</p><p>  3.1.1 軟件程序流程14</p><p&

13、gt;  3.1.2 軟件程序主函數(shù)15</p><p>  3.2 軟件各模塊程序設(shè)計16</p><p>  3.2.1 初始化模塊16</p><p>  3.2.2 AD轉(zhuǎn)換模塊17</p><p>  3.2.3 數(shù)據(jù)處理模塊18</p><p>  3.2.4 顯示模塊20</p>

14、<p>  3.2.5 報警模塊23</p><p>  3.2.6 鍵盤模塊25</p><p>  3.2.7 中斷模塊28</p><p>  4 系統(tǒng)功能改進與擴展30</p><p>  4.1 顯示模塊改進30</p><p>  4.1.1 LCD1602液晶顯示30</p

15、><p>  4.1.2 液晶顯示程序設(shè)計31</p><p>  4.2通信功能擴展36</p><p>  4.2.1 RS-485通信36</p><p>  4.2.2通信模塊設(shè)計36</p><p><b>  5總結(jié)38</b></p><p><

16、b>  參考文獻39</b></p><p><b>  致謝39</b></p><p><b>  1 前言</b></p><p><b>  1.1課題意義 </b></p><p>  在以內(nèi)燃機為動力裝置的船上,輔鍋爐是船舶的重要設(shè)備,產(chǎn)生的蒸

17、汽主要用于加熱主、副機所用的燃油,以及供廚房及空調(diào)等用汽。因此具有蒸發(fā)量較小、工作壓力較低、對水位控制質(zhì)量要求不高的特點[4]。而鍋爐水位是鍋爐運行時重要的參數(shù),水位過低可能會發(fā)生鍋爐干燒現(xiàn)象,導(dǎo)致鍋爐燒壞。水位過高會導(dǎo)致蒸汽帶水過多,蒸汽品質(zhì)下降,會引起設(shè)備腐蝕、水擊,燒壞過熱器管子。當前船舶機艙自動化的要求越來越高,鍋爐的自動控制在實現(xiàn)無人機艙中是必不可少的。目前,國內(nèi)較數(shù)船舶的輔鍋爐的自動控制仍由繼電器、接觸器、時間繼電器等組成,

18、實現(xiàn)各種控制功能,它們的共同特點是線路復(fù)雜、可靠性差、有時容易出現(xiàn)誤動作,特別是觸頭氧化及鐵芯與銜鐵弄臟后的吸力不足,機械運動部件運動不靈活而出現(xiàn)被卡燒壞線圈等故障,給維護過程帶來極大不便,甚至?xí)绊懻I運工作,而且,控制設(shè)備體積大、數(shù)量多、重量重、價格貴。因此應(yīng)用更先進的控制方法是很有必要的。</p><p>  目前應(yīng)用較為廣泛的可作為傳統(tǒng)繼電接觸器控制系統(tǒng)的替代產(chǎn)品主要有可編程控制器(PLC)和單片機(M

19、CU),都可以通過軟件來改變控制過程,而且都具有體積小、組裝靈活、編程簡單、抗干擾及可靠性高等特點。鍋爐自控系統(tǒng)是一個典型的大慣性、大滯后、多變量的過程控制系統(tǒng) ,其涉及到壓力、溫度、水位等多個物理參數(shù)檢測與控制 ,需要同時控制循環(huán)泵、補水泵、加熱裝置 自動排除故障等。由于模擬輸入量多 ,需要的硬件電路也多 ,控制起來不簡單?,F(xiàn)階段 ,很多廠家都是利用 PLC對鍋爐進行控制 ,其自動化程度和可靠性較高 ,但是成本也很高 ,而且程序修改和

20、參數(shù)設(shè)置比較困難。以單片機為控制核心的智能控制系統(tǒng)由于成本低、可靠性好、安全性高 ,受到了更多企業(yè)的喜愛[16]。總之,以單片機為核心的控制系統(tǒng)經(jīng)濟性更高,體積更小,控制更靈活,并可以以模塊化更換來代替維修。單片機控制系統(tǒng)必然會得到更廣泛的應(yīng)用,在工業(yè)控制現(xiàn)場具有良好的應(yīng)用前景。</p><p>  本設(shè)計以鍋爐液位的自動控制為例,實現(xiàn)了以單片機為核心的自動控制系統(tǒng),克服了傳統(tǒng)控制鍋爐液位的缺陷,突顯了單片機控制

21、系統(tǒng)的優(yōu)勢。</p><p><b>  1.2發(fā)展狀況 </b></p><p>  鍋爐作為能源轉(zhuǎn)換和消耗的設(shè)備已有兩百多年的歷史了,處于歷史的原因,我國鍋爐自動控制的水平一直都較低,鍋爐微機控制是近幾年是近年來開發(fā)的新技術(shù),它是微型計算機軟件、硬件、自動控制、鍋爐節(jié)能等幾項技術(shù)密結(jié)合的產(chǎn)物。工業(yè)鍋爐采用微機控制和原有控制方式相比具有明顯優(yōu)勢,能夠直觀而集中的顯示

22、鍋爐各運行參數(shù),顯示液位壓力溫度的狀態(tài)。而作為鍋爐控制裝置,其主要任務(wù)是保證鍋爐的安全、穩(wěn)定、濟運行,減輕操作人員的勞動強度。在采用計算機控制的鍋爐控制系統(tǒng)中,有十分周到的安全機制,能夠杜絕由于人為疏忽造成的重大事故。 鍋爐工業(yè)的迅猛發(fā)展是近幾年的事情,國外的鍋爐工業(yè)50年代發(fā)展最快,70年代達到高峰。一直以來,用單片機實現(xiàn)鍋爐的控制是控制領(lǐng)域的一個典型的問題,伴隨著控制理論和技術(shù)的法發(fā)展,鍋爐自動化控制水平也在逐漸提高,鍋爐的自動控制

23、,經(jīng)歷了30年代的單參數(shù)儀表控制,40年代的組成儀表復(fù)合參數(shù)儀表控制,以及60年代興起的計算機過程控制幾個階段。而用單片機實現(xiàn)鍋爐的控制,也是近幾年才發(fā)展起來的,是一個逐漸深入的過程,雖然與其他發(fā)達國家相比還存在差距,但是在此方面的進步卻是很大的[13]?,F(xiàn)在船舶上應(yīng)用最多的鍋</p><p><b>  2 硬件系統(tǒng)設(shè)計</b></p><p>  2.1 系統(tǒng)總體

24、設(shè)計</p><p>  2.1.1 系統(tǒng)功能</p><p>  本系統(tǒng)采用單沖量的控制方法來完成對燃油鍋爐水位的控制,確保鍋爐運行的安全性。本系統(tǒng)能夠完成以下功能:</p><p>  a)能夠顯示鍋爐當前水位值;</p><p>  b)當水位高于最高水位和低于最低水位時能夠發(fā)出報警,并能夠自動控制供水泵的啟停和燃燒器供油的緊急切斷;&

25、lt;/p><p>  c)能夠通過鍵盤對最高/低水位、供水泵啟停水位和燃燒器供油切斷水位進行人工調(diào)節(jié)。</p><p>  本系統(tǒng)以STC89C52單片機為核心,包括模擬量采集輸入模塊、單片機最小單元模塊、端口擴展模塊、報警模塊、按鍵及顯示模塊、數(shù)字量輸出模塊。模擬量采集輸入模塊包括液位傳感器、A/D轉(zhuǎn)換器,將模擬量轉(zhuǎn)換成數(shù)字量,再將數(shù)據(jù)傳給單片機進行處理。單片機單元模塊即單片機最小單元,使

26、單片機能正常工作。串口擴展模塊通過端口擴展芯片8255A完成人機交互的一些功能。按鍵及顯示模塊由獨立式按鍵鍵盤和3位數(shù)碼管及相應(yīng)的驅(qū)動電路組成。報警模塊將單片機的控制數(shù)據(jù)通過驅(qū)動芯片控制相應(yīng)發(fā)光二極管、繼電器和報警器的工作,實現(xiàn)對燃油鍋爐各種工作狀態(tài)的監(jiān)視報警。</p><p>  2.1.2 硬件系統(tǒng)示意圖</p><p>  硬件系統(tǒng)是由多個子模塊連接而成的,以STC89C52單片機為

27、核心,包括模擬量采集輸入模塊、單片機最小單元模塊、報警模塊、鍵盤模塊、顯示模塊及端口擴展模塊。硬件系統(tǒng)示意圖如圖1所示:</p><p>  2.2 各硬件模塊設(shè)計</p><p>  2.2.1 模擬量采集輸入模塊</p><p>  本模塊采用NRGT26-1S型水位監(jiān)測單元來采集爐內(nèi)水位,輸出的電流模擬信號經(jīng)電流—電壓轉(zhuǎn)換電路轉(zhuǎn)換成電壓信號,模數(shù)轉(zhuǎn)換器(ADC

28、0804)將采集到的電壓信號轉(zhuǎn)換為數(shù)字信號,然后把數(shù)字信號經(jīng)過8255A擴展芯片送入單片機進行處理。此模塊原理圖如圖2所示</p><p>  圖2 模擬量采集輸入模塊原理圖</p><p><b>  (1)水位監(jiān)測單元</b></p><p>  NRGT26-1S型水位監(jiān)測單元,根據(jù)電容測量原理,可以監(jiān)測導(dǎo)電性和絕緣的液體液位差。在電

29、極盒內(nèi)有一個液位變送器,可以產(chǎn)生4-20mA的輸出電流,不需要額外的轉(zhuǎn)換設(shè)備,特別適合持續(xù)監(jiān)測和遠程指示液位。最大工作壓力/溫度:2bar/238°C。水位檢測單元接線圖[17]和外形示意圖[17]如圖3、4所示:</p><p>  圖3 水位監(jiān)測單元接線圖 圖4 水位監(jiān)測單元示意圖</p><p> ?。?)電流—電壓轉(zhuǎn)換電路</p>

30、<p>  水位監(jiān)測單元產(chǎn)生的是4-20mA的標準電流,要對模擬量信號在ADC中進行AD轉(zhuǎn)換就要將電流信號轉(zhuǎn)換成電壓信號。</p><p>  應(yīng)用運放進行電流測量有兩種方法,一是利用電流在電阻上的壓降(電路初步設(shè)計階段就采用的此方法),再進行電壓放大;二是直接將電流注入運放的求和點。應(yīng)用這樣的電路,轉(zhuǎn)換得到的電壓信號可以直接加在運放的輸入端。這種轉(zhuǎn)換方式有兩個不妥之處:首先,電阻的加入會破壞電路原

31、來的狀態(tài),帶來測量上的誤差;其次,運放的失調(diào)電壓也會被運放自己放大,并加到測量的輸出結(jié)果上。使用“電流-電壓”轉(zhuǎn)換電路可以避免上述兩個不足,其電路結(jié)構(gòu)如圖5所示:</p><p>  圖5 電流-電壓轉(zhuǎn)換電路</p><p>  輸入電流直接接入運放的求和點(反相輸入端),運放輸出端將通過R1向求和點提供同樣大小的電流以達到平衡,電路的增益由R1決定,Uout=IinR。該電路唯一的誤

32、差來源于偏置電流,偏置電流作為誤差與輸入電流進行了代數(shù)疊加。</p><p><b>  (3)A/D轉(zhuǎn)換器</b></p><p>  A/D轉(zhuǎn)換器的作用是將模擬量信號轉(zhuǎn)換成數(shù)字量信號。不同的A/D轉(zhuǎn)換方式具有各自的特點,在要求轉(zhuǎn)換速度高的場合,選用并行A/D轉(zhuǎn)換器;在要求精度高的情況下,可采用雙積分型A/D轉(zhuǎn)換器,也可以選擇分辨率更高的其他形式的轉(zhuǎn)換器,但成本會增

33、加。而逐次比較性A/D轉(zhuǎn)換器在一定程度上兼有以上兩種轉(zhuǎn)換器的優(yōu)點,應(yīng)用較多,ADC0804就是此類單片集成A/D轉(zhuǎn)換器。</p><p>  ADC0804采用CMOS工藝20引腳集成芯片,分辨率為8位,轉(zhuǎn)換時間為100us,輸入電壓范圍是0~5V,由一個8位A/D轉(zhuǎn)換器、一個8路模擬量開關(guān)、8路模擬量地址鎖存/譯碼器和一個三態(tài)數(shù)據(jù)輸出鎖存器組成。在A/D轉(zhuǎn)換器內(nèi)部含有一個高阻抗斬波穩(wěn)定比較器,一個帶有模擬開關(guān)樹

34、組的256電阻分壓器,以及一個逐次逼近型寄存器。8路的模擬開關(guān)由地址鎖存器和譯碼器控制,可以在8個通道中任意訪問一個通道的模擬信號。由于多路開關(guān)的地址輸入部分能夠進行鎖存和譯碼,而且三態(tài)TTL輸出也可以鎖存,所以它易于與微型計算機接口。內(nèi)部結(jié)構(gòu)原理圖[15]如圖6所示,引腳圖如圖7所示;</p><p>  圖6 內(nèi)部結(jié)構(gòu)原理圖 圖7 引腳圖</

35、p><p>  2.2.2 單片機最小單元模塊</p><p>  單片機最小單元是保證單片機能正常的最基本的電路,本文采用STC89C52芯片為核心芯片,采用內(nèi)部時鐘電路和上電復(fù)位電路。本模塊原理圖如圖8所示</p><p>  圖8 單片機最小單元模塊原理圖</p><p> ?。?) STC89C52單片機</p><

36、;p>  整個系統(tǒng)以STC公司生產(chǎn)的89C52為核心芯片。該芯片為8051內(nèi)核芯片,內(nèi)部含F(xiàn)lash E2PROM 存儲器,芯片內(nèi)部程序存儲空間為8KB,內(nèi)部RAM為512B,PDIP(雙列直插)式封裝,芯片外觀如圖9所示,引腳圖如圖10所示:</p><p>  STC89C52單片機具有以下優(yōu)點[14]:</p><p><b>  a)加密性強</b>&l

37、t;/p><p>  b)抗干擾能力強,高抗靜電,寬電壓、不怕電源抖動,寬溫度范圍:-40到80攝氏度</p><p><b>  c)價格低廉</b></p><p><b>  d)超低功耗</b></p><p>  e)速度快,可靠性高</p><p>  圖9

38、STC89C52外觀圖[7] 圖10 STC89C52引腳圖[7]</p><p> ?。?) 晶體振蕩器電路及復(fù)位電路</p><p>  51系列單片機內(nèi)部已具有振蕩電路,只要在18腳(XTAL2)和19腳(XTAL1)上連接簡單的晶體振蕩器即可,典型的晶體振蕩器頻率可以選11.0592MHz,它可以準確地得到9600波特率和19200波特率,另一個典型的晶

39、體振蕩器頻率為12MHz,可以產(chǎn)生精確地微秒級延時,方便定時場合。本系統(tǒng)采用的是12MHz的晶體振蕩器。晶體振蕩器實物如圖11所示:</p><p>  圖11 晶體振蕩器實物圖</p><p>  單片機的復(fù)位引腳是第9腳(RST),當次引腳連接高電平超過兩個機器周期,即可產(chǎn)生復(fù)位的動作。為了保證應(yīng)用系統(tǒng)可靠地復(fù)位,在設(shè)計復(fù)位電路時通常使RST引腳保持10ms以上的高電平。復(fù)位電路

40、有上電復(fù)位和手動復(fù)位兩種,還可以采用上電和按鈕復(fù)合復(fù)位,本系統(tǒng)采用上電復(fù)位的形式。</p><p>  2.2.3 I/O端口擴展模塊</p><p>  單片機本身的I/O口是很有限的,當所要連接的外設(shè)較多時,就要擴展I/O接口。擴展并行I/O口所用的芯片有可編程芯片(如8255、8155等)、通過TTL、CMOS鎖存器和緩沖器(如74LS373、74LS573、74LS244等)。本模

41、塊選擇的并行I/O口擴展芯片為可編程并行接口芯片8255A和TTL鎖存器和緩沖器74HC573。</p><p> ?。?)可編程并行接口芯片8255A</p><p>  8255A是Intel公司生產(chǎn)的通用可編程并行I/O接口芯片,允許采用同步異步和中斷方式傳送I/O數(shù)據(jù)。8255A內(nèi)部由四部分電路組成。它們是A口、B口和C口,A組控制器和B組控制器,數(shù)據(jù)緩沖器及讀寫控制邏輯,8255

42、A內(nèi)部結(jié)構(gòu)原理圖如圖13所示,芯片引腳圖[2]如圖12所示:</p><p>  圖12 8255A引腳圖</p><p>  圖13 8255A內(nèi)部結(jié)構(gòu)原理圖</p><p>  8255A共有3種工作方式:方式0、方式1和方式2。本系統(tǒng)是采用的8255A的工作方式0,方式0為基本輸入/輸出方式,無需聯(lián)絡(luò)信號,直接輸入或輸出,PA,PB和PC中任一端口都可以

43、通過方式控制字設(shè)定為輸入或輸出。單片機可對8255A進行I/O數(shù)據(jù)無條件傳送,外設(shè)的I/O數(shù)據(jù)可以在8255A的各端口得到鎖存和緩沖。方式0工作示意圖如圖14所示:</p><p> ?。?)鎖存器和緩沖器74HC573</p><p>  74HC573是八進制高電流三態(tài)同步輸出鎖存器,器件的輸入是和標準的CMOS輸出兼容的,當鎖存使能端為高時,這些器件的鎖存對于數(shù)據(jù)是透明的(也就是說輸

44、出同步),當鎖存使能變低時,符合建立時間和保持時間的數(shù)據(jù)會被鎖存。輸出能直接接到CMOS,NMOS和TTL接口上;操作電壓范圍:2.0V~6.0V;低輸入電流:1.0uA;CMOS器件的高噪音抵抗特性。74HC573引腳圖[18]如圖15所示,真值表如表1所示:</p><p>  圖15 74HC573引腳圖</p><p>  表1:4HC573真值表</p><

45、p>  2.2.4 鍵盤模塊</p><p>  鍵盤模塊主要完成對參數(shù)手動設(shè)置的功能。</p><p>  鍵盤在單片機應(yīng)用系統(tǒng)中能實現(xiàn)單片機輸入數(shù)據(jù)、傳送命令等功能,是人工干預(yù)單片機的主要手段。鍵盤分為編碼鍵盤和和非編碼鍵盤。鍵盤上閉合鍵的識別由專用的硬件編碼器實現(xiàn),并產(chǎn)生鍵編碼號或鍵值的稱為編碼鍵盤,如計算機鍵盤。而靠軟件編程來識別的鍵盤稱為非編碼鍵盤,非編碼鍵盤又分為獨立鍵盤

46、和矩陣鍵盤。當需要的按鍵較多時,為了減少占用單片機的I/O線資源,通常采用矩陣式鍵盤。矩陣式鍵盤有行線和列線組成,按鍵位于行與列的交叉點上,矩陣鍵盤能有效的提高I/O口的利用率。本系統(tǒng)在設(shè)計方案中,為了節(jié)約I/O線資源,采用了矩陣鍵盤的設(shè)計方法,如圖16所示:</p><p>  圖16 矩陣鍵盤設(shè)計原理圖</p><p>  在后來不斷改進過程中發(fā)現(xiàn),有的按鍵功能重疊,經(jīng)過改進之后功

47、能鍵最終確定為8個,完全可以采用獨立按鍵的設(shè)計方法。由于鍵盤的掃描只是CPU工作的內(nèi)容之一,CPU還要做其他工作,如液晶顯示、A/D轉(zhuǎn)換等,為了保證CPU能及時響應(yīng)按鍵操作,又不過多的占用CPU的工作時間,鍵盤的工作方式選為中斷掃描方式。圖17所示為獨立鍵盤中斷方式下與單片機接口電路,7個調(diào)節(jié)功能按鍵接單片機P1口的P1^0、P1^1、P1^2、P1^3、P1^4、P1^5、P1^6,進入/退出按鍵設(shè)置鍵接到單片機外部中斷0口(P3^2

48、)。各功能鍵功能如表2所示:</p><p><b>  表2:各功能鍵功能</b></p><p>  圖17 鍵盤模塊原理圖</p><p>  2.2.5 顯示模塊</p><p>  顯示模塊的功能是對當前鍋爐液位進行顯示,在進行參數(shù)手動設(shè)置時對調(diào)節(jié)參數(shù)進行顯示。</p><p> 

49、 液位顯示初期設(shè)計采用數(shù)碼管動態(tài)顯示,范圍從0~999,選擇的數(shù)碼管是7段共陰極連接,型號是MPX3-CA。在這里使用到了74LS573,它是一個8位的D觸發(fā)器,在單片機系統(tǒng)中經(jīng)常使用,可以作地址數(shù)據(jù)總線擴展的鎖存器,也可以作為普通的LED的驅(qū)動器件。</p><p>  動態(tài)顯示的特點是將所有位數(shù)碼管的段選線并聯(lián)在一起,由位選線控制是哪一位數(shù)碼管有效。這樣一來,就沒有必要每一位數(shù)碼管配一個鎖存器,從而大大地簡化

50、了硬件電路。選亮數(shù)碼管采用動態(tài)掃描顯示。所謂動態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時都在顯示[10]。動態(tài)顯示的亮度比靜態(tài)顯示要差一些,所以在選擇限流電阻時應(yīng)略小于靜態(tài)顯示電路中的。 </p><p>  顯示模塊原理圖如圖18所示:U7(74HC573)為數(shù)碼管位選數(shù)據(jù)鎖存器,Q0、Q1、Q2分別接三個數(shù)碼管的位選端。U8(74HC5

51、73)為數(shù)碼管段選數(shù)據(jù)鎖存器,Q0~Q7分別接數(shù)碼管的段選端。8255A的C口的PC0接位選鎖存器的輸入使能端,PC1接段選鎖存器的輸入使能端。B口用于輸出數(shù)碼管的位選段選數(shù)據(jù)。</p><p>  圖18 顯示模塊原理圖</p><p>  2.2.6 報警模塊</p><p>  報警模塊的功能是對單片機的控制命令和報警命令進行輸出。聲光報警功能由發(fā)光二極

52、管和喇叭完成,繼電器則用于將單片機的控制命令進行輸出,控制外部設(shè)備動作。報警模塊原理圖如圖19所示,各器件功能如表3所示:</p><p>  表3:報警模塊各器件功能</p><p>  LED(發(fā)光二極管),體積小,耗電量低,常作為微計算機與數(shù)字電路的輸出設(shè)備,用于指示信號狀態(tài)。具有二極管單向?qū)ǖ奶匦?,施加反向電壓時LED不亮,而施加正向電壓時,LED將發(fā)光。隨著通過LED正向電流的

53、增加,LED將更亮,LED的壽命也將縮短,因此電流以5~15mA為宜。51系列的單片機的I/O口都是漏極開路的輸出,其中P1、P2與P3內(nèi)有30 kΩ的上拉電阻,因此想讓I/O口提供10~20mA的電流驅(qū)動LED發(fā)光比較困難。所以擴展一片ULN2803作為驅(qū)動。</p><p>  繼電器是當輸入量達到規(guī)定值時,是被控制的輸出電路導(dǎo)通或斷開的電器,實際上是用較小的電流去控制較大電流的一種“自動開關(guān)”。&l

54、t;/p><p>  本系統(tǒng)中采用的是直流電磁機械繼電器,盡管機械繼電器的開關(guān)響應(yīng)時間較長,但是已經(jīng)能夠滿足本系統(tǒng)對控制響應(yīng)時間的要求。而且,機械繼電器最大的優(yōu)點是其開關(guān)狀態(tài)時理想的[6]。電阻R10、R11、R12用于調(diào)整繼電器的驅(qū)動電流,二極管D11、D12、D13用于在繼電器關(guān)斷時為線圈提供感生電流的放電電路。</p><p>  圖19 報警模塊原理圖</p><

55、;p>  2.3 硬件系統(tǒng)總原理圖</p><p>  以上是對硬件系統(tǒng)以模塊的形式進行的初步設(shè)計,只有將各個模塊進行整合,經(jīng)過改進最終才能形成一個完善的控制系統(tǒng)。本部分就是將模擬量采集輸入模塊、單片機最小單元模塊、報警模塊、鍵盤模塊、顯示模塊及端口擴展模塊進行了整合,形成了一個完整的硬件系統(tǒng),以在軟件設(shè)計部分進行編程。</p><p>  圖20 硬件系統(tǒng)總原理圖</p

56、><p><b>  3 軟件系統(tǒng)設(shè)計</b></p><p>  3.1 軟件系統(tǒng)總體設(shè)計</p><p>  3.1.1 軟件程序流程</p><p>  軟件系統(tǒng)指揮著硬件系統(tǒng)的操作,軟件系統(tǒng)設(shè)計的成功與否直接影響著系統(tǒng)性能的優(yōu)劣,本軟件系統(tǒng)的程序設(shè)計實施模塊化,將程序分為若干模塊。分別是初始化模塊、中斷模塊、鍵盤模塊

57、、顯示模塊、A/D轉(zhuǎn)換模塊和報警模塊。初始化主要是完成開中斷,清標志位的任務(wù),接著系統(tǒng)就開始啟動A/D檢測信號,延時等待AD轉(zhuǎn)換完成,接著通過I/O擴展芯片8555A將AD轉(zhuǎn)換的結(jié)果讀到單片機中,在單片機中對AD轉(zhuǎn)換的數(shù)據(jù)進行處理,判斷此刻系統(tǒng)的水位狀態(tài),從而執(zhí)行不同水位狀態(tài)相對應(yīng)的報警程序,并將此時的水位顯示在數(shù)碼管上。按鍵設(shè)置是通過響應(yīng)中斷來實現(xiàn)的,在不對參數(shù)設(shè)置時,不會執(zhí)行鍵盤掃描程序。通過以上設(shè)置,系統(tǒng)就能按要求對鍋爐液位進行控

58、制了。圖21是系統(tǒng)的程序流程圖。</p><p>  3.1.2 軟件程序主函數(shù)</p><p>  軟件系統(tǒng)程序主函數(shù)C語言程序如下:</p><p>  void main() //程序主函數(shù)</p><p><b>  {</b></p><p>  initial(); //調(diào)用

59、初始化子函數(shù)</p><p>  while(1); //大循環(huán)</p><p><b>  {</b></p><p>  write_ad(); //調(diào)用啟動A/D子函數(shù)</p><p>  delay(100); //等待AD轉(zhuǎn)換完成</p><p>  AD_8255to89c5

60、1(); //將AD轉(zhuǎn)換結(jié)果從8255傳到單片機</p><p>  handle(); //調(diào)用數(shù)據(jù)處理子函數(shù)</p><p>  alarm(); //調(diào)用報警子函數(shù)</p><p>  display(uint num); //調(diào)用顯示子函數(shù)</p><p><b>  }</b></p&g

61、t;<p><b>  }</b></p><p>  3.2 軟件各模塊程序設(shè)計</p><p>  3.2.1 初始化模塊</p><p><b> ?。?)初始化流程</b></p><p>  初始化是程序編程的第一步,初始化的目的就是把所有用到的標志位、變量回到所要設(shè)定的初始

62、值,以及完成引腳分配的工作,并為配置寄存器寫入需要的值[7]。系統(tǒng)開始后首先要進行初始化,初始化主要是完成開中斷,清標志位的任務(wù),本設(shè)計采用的中斷是INT0中斷、INT1中斷和定時器T0中斷,并將初始值送入到寄存器中。初始化程序流程圖如圖22所示。</p><p> ?。?)初始化C語言程序</p><p>  初始化模塊具體C語言程序如下:</p><p>  v

63、oid initial()</p><p><b>  {</b></p><p>  HWLA=524 //最高工作水位</p><p>  P_STOP WL=404 //供水泵停止水位</p><p>  P_START WL=244 //供水泵啟動水位</p><p>  LWL

64、A=124 //最低工作水位</p><p>  BOC=74 //最低危險水位</p><p>  flag=0; //系統(tǒng)水位狀態(tài)標志位</p><p>  flag_key=0; //外部中斷INT0標志位</p><p>  EA=1; //開總中斷</p><p>  EX0=1; //開

65、INTO中斷</p><p>  EX1=1; //開INT1中斷</p><p>  ET0=1; //開T0中斷</p><p>  TMOD=0x01; //設(shè)定T0為工作方式1,M1M0=01</p><p>  TH0=(65536-50000)/256; //為T0賦初值</p><p>

66、  TL0=(65536-50000)%256;</p><p>  IT0=1; //INTO為邊沿觸發(fā)方式</p><p>  IT1=1; //INT1為邊沿觸發(fā)方式</p><p>  TR0=0; //禁止啟動T0</p><p><b>  }</b></p><p>

67、;  3.2.2 AD轉(zhuǎn)換模塊</p><p> ?。?) AD轉(zhuǎn)換流程</p><p>  啟動A/D轉(zhuǎn)換,延時一段時間以等待轉(zhuǎn)換完成,再讀取轉(zhuǎn)換結(jié)果,將結(jié)果經(jīng)過8255A讀取到單片機中,在單片機中對數(shù)據(jù)進行處理。A/D轉(zhuǎn)換模塊的程序流程圖如圖23所示。</p><p> ?。?)AD轉(zhuǎn)換C語言程序</p><p>  AD轉(zhuǎn)換模塊具體C語

68、言程序如下:</p><p>  sbit wr=P3^6; //AD寫端口</p><p>  sbit rd=P3^7; //AD讀端口</p><p>  sbit ad_cs=P2^1; //AD片選端</p><p>  void write_ad() //啟動A/D轉(zhuǎn)換子函數(shù)</p><p&g

69、t;<b>  {</b></p><p>  ad_cs=0; //將AD0804的CS拉低</p><p><b>  wr=0; </b></p><p><b>  delay(1);</b></p><p><b>  wr=1;</b>

70、</p><p>  ad_cs=1; //將AD0804的CS置高</p><p><b>  }</b></p><p>  sbit io8255_cs=P2^2; //8255片選端</p><p>  sbit io8255_a0=P2^3; //8255A0引腳</p><p>

71、;  sbit io8255_a1=P2^4; //8255A1引腳</p><p>  uint adnum; //存儲AD的轉(zhuǎn)換結(jié)果</p><p>  void AD_8255to89c51() //將AD轉(zhuǎn)換結(jié)果從8255傳到單片機</p><p><b>  {</b></p><p>  io8255

72、_cs=0; //將8255A選通CS=0,A1A0=11</p><p>  wr=0; //寫控制字</p><p>  P0=0x90; //將A口設(shè)置為工作方式0</p><p><b>  rd=0;</b></p><p>  P2=0xe4; //讀A口</p><p>&l

73、t;b>  delay(5);</b></p><p>  adnum=P0; //將AD結(jié)果存儲在adnum中</p><p><b>  }</b></p><p>  void delay (uchar x)//延時程序</p><p><b>  {</b></p&

74、gt;<p>  uchar a,b;</p><p>  for(a=x;a>0;a--)</p><p>  for(b=110;b>0;b--);</p><p><b>  }</b></p><p>  3.2.3 數(shù)據(jù)處理模塊</p><p><b>

75、;  (1)數(shù)據(jù)處理流程</b></p><p>  首先,由電容式傳感器對水位進行采樣輸出模擬信號,再經(jīng)A/D 轉(zhuǎn)換變成相應(yīng)的數(shù)字信號,送入80C51 單片機進行數(shù)據(jù)處理。單片機經(jīng)運算后,把當前測得的液位值num與設(shè)定的液位值依次進行比較:</p><p>  若num≥HWL,則表示達至最高工作液位,系統(tǒng)水位狀態(tài)標志位flag=1,啟動報警器報警;</p>&

76、lt;p>  若num≥P_STOP WL,則表示達至供水泵停止液位,系統(tǒng)水位狀態(tài)標志位flag=2,供水泵停止,水泵工作指示燈不亮;</p><p>  若P_START WL<num<P_STOP WL,則表示正常液位,系統(tǒng)水位狀態(tài)標志位flag=3,水位正常指示燈亮, 呈綠色;</p><p>  若BOC<num≤P_START WL,則表示達供水泵啟動供水

77、,系統(tǒng)水位狀態(tài)標志位flag=4,水泵工作指示燈亮,呈綠色;</p><p>  若num≤LWL,則表示達至最低工作液位,系統(tǒng)水位狀態(tài)標志位flag=5,啟動報警器報警;</p><p>  若num≤BOC,則表示達至最低危險液位,系統(tǒng)水位狀態(tài)標志位flag=6,啟動報警器報警,并切斷燃燒器供油。</p><p>  在本系統(tǒng)中,由于條件所限,未能確定育鯤輔鍋爐

78、內(nèi)水位監(jiān)測單元傳感器測量桿的具體長度,為了方便計算,假設(shè)水位為0mm時對應(yīng)的電流信號是4mA,水位為1000mm時對應(yīng)的電流信號是20mA,兩者之間成線性關(guān),系統(tǒng)所應(yīng)用的水位測量范圍大致可定位為50mm~560mm,ADC0804參考電壓選5V,則測量精度為560/255≈2.2mm,取整為3mm。</p><p>  數(shù)據(jù)處理模塊的程序流程圖如圖24所示:</p><p> ?。?)數(shù)據(jù)

79、處理C語言程序</p><p>  數(shù)據(jù)處理模塊具體C語言程序如下:</p><p>  uint adnum; //AD轉(zhuǎn)換數(shù)據(jù)</p><p>  uint bai1,bai2,shi1,shi2,ge1,ge2; //將AD數(shù)據(jù)轉(zhuǎn)換成水位的過程變量</p><p>  uint HWL=524 //最高工作水位</p&

80、gt;<p>  uint P_STOP WL=404 //供水泵停止水位</p><p>  uint P_START WL=244 //供水泵啟動水位</p><p>  uint LWL=124 //最低工作水位</p><p>  uint BOC=74 //最低危險水位</p><p>  uint flag

81、=0; //系統(tǒng)水位狀態(tài)位</p><p>  void handle()//數(shù)據(jù)處理程序</p><p><b>  {</b></p><p>  bai1=adnum/51; //水位對應(yīng)的電壓值的最高位</p><p>  shi1=adnum%51*10/51;</p><p> 

82、 ge1=adnum%51*10%51*10/51;</p><p>  bai2=(bai1*2)%10; //將電壓值轉(zhuǎn)換成對應(yīng)的水位值</p><p>  shi2=(shi1*2)%10;</p><p>  ge2=(ge1*2)%10;</p><p>  num=bai*100+shi*10+ge;</p>&

83、lt;p>  if(num>=HWL)</p><p><b>  flag=1;</b></p><p>  if(HWL>num>=P_STOP WL)</p><p><b>  flag=2;</b></p><p>  if(P_START WL <num&l

84、t;P_STOP WL)</p><p><b>  flag=3;</b></p><p>  if(BOC<num<=P_START WL)</p><p><b>  flag=4;</b></p><p>  else if(num<=LWL)</p><

85、;p><b>  flag=5;</b></p><p>  if(num<=BOC)</p><p><b>  flag=6;</b></p><p><b>  }</b></p><p>  3.2.4 顯示模塊</p><p>  

86、(1) 顯示模塊流程</p><p>  LED顯示器有分靜態(tài)顯示和動態(tài)顯示兩種顯示方式,本設(shè)計的LED選用的是動態(tài)顯示方式。顯示器中的各位獨立,各位的顯示字符一經(jīng)確定,相應(yīng)鎖存器的輸出將維持不變,直到顯示另一個字符為止[8]。水位變化在0mm到999mm之間變化,將三位數(shù)據(jù)拆分為百、十、個三位,分別在三位數(shù)碼管上顯示。在每次送完段選數(shù)據(jù)后,在送入為數(shù)據(jù)之前,需要加上一句“P0=0XFF;”,這句語句叫“消影”

87、[7]。在剛送完段選數(shù)據(jù)后,PA口仍然保持著上次的段選數(shù)據(jù),若不加“P0=0XFF”再執(zhí)行接下來的打開位選鎖存器的命令后,原來保持在PA口的段選數(shù)據(jù)將立即通過位選按鎖存器直接加在數(shù)碼管上,接下來才是再次通過PA口給位選鎖存器送入位選數(shù)據(jù),雖然這個過程非常短暫,但是在數(shù)碼管高速顯示狀態(tài)下,我們?nèi)匀豢梢钥匆姅?shù)碼管出現(xiàn)顯示混亂現(xiàn)象,加上消影后,在開啟位選鎖存器后,PA口數(shù)據(jù)全為高電平,所以哪個數(shù)碼管也不會亮。顯示模塊的程序流程圖如圖25所示:

88、</p><p> ?。?)顯示模塊C語言程序</p><p>  顯示模塊具體C語言程序如下:</p><p>  uchar code table[]={</p><p>  0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p&g

89、t;  0x7f,0x6f,0x77,0x7c,</p><p>  0x39,0x5e,0x79,0x71}; //數(shù)碼管編碼</p><p>  uint num; //要顯示的數(shù)字</p><p>  uint bai,shi,ge; //要顯示的數(shù)字的百、十、個位</p><p>  void display(uint n

90、um) //數(shù)碼管顯示程序</p><p><b>  {</b></p><p>  io8255_cs=0; //將8255A選通CS=0,A1A0=11</p><p>  wr=0; //寫控制字</p><p>  P0=0x90; //將B,C口設(shè)置為工作模式0,且都為輸出</p

91、><p>  bai=num/100; </p><p>  shi=num%100/10;</p><p>  ge=num%10;</p><p>  P2=0xf3; //設(shè)置為寫C口</p><p>  P0=0x00; //將兩片74HC573的LE引腳置低</p><p>  P2=

92、0xeb; //寫B(tài)口</p><p>  P0=0xff; //消影</p><p>  P2=0xf3; //設(shè)置為寫C口</p><p>  P0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>  P2=

93、0xeb; //寫B(tài)口</p><p>  P0=table[bai];//百位顯示</p><p>  P0=0x02; //將段選74HC573的LE引腳置高</p><p>  P0=0x00; //將段選74HC573的LE引腳置低</p><p>  P2=0xf3; //設(shè)置為寫C口</p><p>

94、;  P0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>  P0=0xfb; //選通第一個數(shù)碼管的位選端</p><p>  P2=0xf3; //設(shè)置為寫C口</p><p>  P0=0x01; //將位選74HC573的LE

95、引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p><b>  delay(5);</b></p><p>  P2=0xf3; //設(shè)置為寫C口</p><p>  P0=0x00; //將兩片74HC573的LE引腳置低</p><p>

96、;  P2=0xeb; //寫B(tài)口</p><p>  P0=0xff; //消影</p><p>  P2=0xf3; //設(shè)置為寫C口</p><p>  P0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>

97、;  P2=0xeb; //寫B(tài)口</p><p>  P0=table[shi];//十位顯示</p><p>  P0=0x02; //將段選74HC573的LE引腳置高</p><p>  P0=0x00; //將段選74HC573的LE引腳置低</p><p>  P2=0xf3; //設(shè)置為寫C口</p>&l

98、t;p>  P0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>  P0=0xfd; //選通第二個數(shù)碼管的位選端</p><p>  P2=0xf3; //設(shè)置為寫C口</p><p>  P0=0x01; //將位選74HC

99、573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p><b>  delay(5);</b></p><p>  P2=0xf3; //設(shè)置為寫C口</p><p>  P0=0x00; //將兩片74HC573的LE引腳置低</p>&l

100、t;p>  P2=0xeb; //寫B(tài)口</p><p>  P0=0xff; //消影</p><p>  P2=0xf3; //設(shè)置為寫C口</p><p>  P0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p>&l

101、t;p>  P2=0xeb; //寫B(tài)口</p><p>  P0=table[ge];//個位顯示</p><p>  P0=0x02; //將段選74HC573的LE引腳置高</p><p>  P0=0x00; //將段選74HC573的LE引腳置低</p><p>  P2=0xf3; //設(shè)置為寫C口</p>

102、;<p>  P0=0x01; //將位選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p>  P0=0xfe; //選通第三個數(shù)碼管的位選端</p><p>  P2=0xf3; //設(shè)置為寫C口</p><p>  P0=0x01; //將位

103、選74HC573的LE引腳置高</p><p>  P0=0x00; //將位選74HC573的LE引腳置低</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p>  3.2.5 報警模塊</p><p> ?。?)

104、 報警模塊流程</p><p>  單片機對AD轉(zhuǎn)換數(shù)據(jù)進行處理后,得到了相應(yīng)的系統(tǒng)水位狀態(tài)標志位flag,不同的flag值對應(yīng)著不同的報警:</p><p>  若系統(tǒng)水位狀態(tài)位flag=1,表示達至最高工作液位,啟動報警器報警,供水泵停;</p><p>  若系統(tǒng)水位狀態(tài)位flag=2,表示達至供水泵停止液位,供水泵停,水泵工作指示燈不亮;</p>

105、<p>  若系統(tǒng)水位狀態(tài)位flag=3,表示正常液位,水位正常指示燈亮, 呈綠色;</p><p>  若系統(tǒng)水位狀態(tài)位flag=4,表示達供水泵啟動供水,水泵工作指示燈亮,呈綠色;</p><p>  若系統(tǒng)水位狀態(tài)位flag=5,表示達至最低工作液位,啟動報警器報警;</p><p>  若系統(tǒng)水位狀態(tài)位flag=6,表示達至最低危險液位,啟動報

106、警器報警,切斷燃燒器供油。</p><p>  報警模塊程序流程圖如圖26所示:</p><p> ?。?)報警模塊C語言程序</p><p>  報警模塊具體C語言程序如下:</p><p>  sbit alarm_cs=P2.0 //74LS373片選端</p><p>  sbit normalled=P0

107、^2; //正常水位指示燈</p><p>  void alarm()</p><p><b>  {</b></p><p>  if(flag=1)</p><p><b>  {</b></p><p>  P0=0xee; //達至最高工作液位,啟動報警

108、器報警,供水泵停</p><p>  alarm_cs=0;</p><p><b>  }</b></p><p>  if(flag=2)</p><p><b>  {</b></p><p>  P0=0xff; //達至供水泵停止液位,供水泵停,水泵工作指示

109、燈不亮</p><p>  alarm_cs=0;</p><p><b>  }</b></p><p>  if(flag=3)</p><p><b>  {</b></p><p>  normalled=0; //正常液位,水位正常指示燈亮</p>

110、<p>  alarm_cs=0;</p><p><b>  }</b></p><p>  if(flag=4)</p><p><b>  {</b></p><p>  P0=0x9f; //表示達供水泵啟動供水,水泵工作指示燈亮</p><p&g

111、t;  alarm_cs=0;</p><p>  if(flag=5)</p><p><b>  {</b></p><p>  P0=0x8d; //達至最低工作液位,啟動報警器報警;</p><p>  alarm_cs=0;</p><p><b>  }</b&

112、gt;</p><p><b>  }</b></p><p>  if(flag=6) </p><p><b>  {</b></p><p>  P0=0x6d; //達至最低危險液位,啟動報警器報警,切斷燃燒器供油</p><p>  alarm_cs=0;&

113、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p>  3.2.6 鍵盤模塊</p><p> ?。?)鍵盤模塊程序流程</p><p>  鍵盤模塊主要完成對參數(shù)設(shè)置的功能。</p><p>  鍵盤的軟件

114、程序設(shè)計主要解決:判斷是否有按鍵按下、消除按鍵的抖動、確定按鍵鍵值、判斷按鍵是否釋放。鍵盤掃描程序由外部中斷INT0觸發(fā),當ENTER/EXIT鍵按下時,開啟外部中斷INT0響應(yīng)程序,根據(jù)標志位flag_key的值確定是開始按鍵設(shè)置還是退出按鍵設(shè)置,當為開始按鍵設(shè)置時,計時器T0開始計時,要求在一分鐘之內(nèi)完成按鍵設(shè)置,否則自動關(guān)中斷退出按鍵設(shè)置,返回主程序。開始按鍵設(shè)置之后,要進行鍵盤掃描,判斷是否有鍵按下,采用延時消抖,當按鍵松開后確

115、定按鍵鍵值,確定相應(yīng)標志位的值和執(zhí)行相應(yīng)程序。中斷方式下矩陣鍵盤總體流程圖如圖27所示:</p><p>  (2)鍵盤模塊C語言程序</p><p>  具體的鍵盤模塊C語言程序如下:</p><p>  sbit key1=P1^0; //最高工作水位設(shè)置按鍵</p><p>  sbit key2=P1^1; //供水泵停止

116、水位設(shè)置按鍵</p><p>  sbit key3=P1^2; //供水泵啟動水位設(shè)置按鍵</p><p>  sbit key4=P1^3; //最低工作水位設(shè)置按鍵</p><p>  sbit key5=P1^4; //燃燒器停止水位按鍵</p><p>  sbit key6=P1^5; //加1按鍵<

117、/p><p>  sbit key7=P1^6; //減1按鍵</p><p>  sbit key8=P1^7; //進入/退出設(shè)置按鍵</p><p>  uint temp;</p><p>  uint show;</p><p>  void key() //按鍵程序</p><

118、;p><b>  {</b></p><p>  if(count>=1200)</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  flag_key=2; //如果按鍵設(shè)置超過一分鐘,則標志位fla

119、g_key置2</p><p><b>  }</b></p><p><b>  P1=0xff;</b></p><p><b>  temp=P1;</b></p><p>  if(temp!=0xff)</p><p><b>  {

120、</b></p><p>  delay(5); //延時消抖(下降沿)</p><p>  if(temp!=0xff)</p><p><b>  {</b></p><p>  while(temp=0xff);</p><p>  delay(10); //延

溫馨提示

  • 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

提交評論