智能樓宇防盜及燈控系統(tǒng)_第1頁(yè)
智能樓宇防盜及燈控系統(tǒng)_第2頁(yè)
智能樓宇防盜及燈控系統(tǒng)_第3頁(yè)
智能樓宇防盜及燈控系統(tǒng)_第4頁(yè)
智能樓宇防盜及燈控系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、智能樓宇防盜及燈控系統(tǒng)第1章 緒論第1節(jié) 智能樓宇防盜及燈控系統(tǒng)的背景和意義隨著人們生活水平的不斷提高,生活質(zhì)量不斷增長(zhǎng),人們對(duì)安全也提出了更高的要求。人們的居住環(huán)境安全與否,尤為重要。鑒于此,安全防御系統(tǒng)的設(shè)置就顯得極其重要,人們采取了許多措施來保障安全,以往的做法是安裝防盜門、防盜網(wǎng),但也存在有礙美觀,不符合防火要求等不足之處,而且由于這些方法的科技含量太低,不能有效地防止壞人的入侵。因此,人們對(duì)自己所處環(huán)境的安全性提出了更高的要求, 在這樣的社會(huì)背景和需求下,智能樓宇防盜報(bào)警系統(tǒng)也就應(yīng)運(yùn)而生,而且它已經(jīng)成為小區(qū)智能化的必要組成部分。本設(shè)計(jì)主要對(duì)樓宇監(jiān)控的基本功能進(jìn)行了設(shè)計(jì),可以分時(shí)段對(duì)檢

2、測(cè)到的信號(hào)做出不同判斷;采用了模塊化的設(shè)計(jì)方法,將整個(gè)系統(tǒng)分解為不同的程序模塊,再將不同程序模塊分為不同的子程序,用多個(gè)小程序組成了功能負(fù)載的系統(tǒng)。第2節(jié) 系統(tǒng)方案的選擇和論證1.2.1 系統(tǒng)設(shè)計(jì)要求1.防盜系統(tǒng)在00:0007:00時(shí)間段內(nèi)處于防盜狀態(tài),當(dāng)檢測(cè)到有人進(jìn)入則發(fā)出聲光報(bào)警,并記錄進(jìn)入時(shí)間,該時(shí)間能夠在系統(tǒng)掉電的情況下依然存儲(chǔ)無誤。2.防盜系統(tǒng)在07:0018:00時(shí)間段內(nèi)處于檢測(cè)人數(shù)狀態(tài),每當(dāng)一個(gè)人進(jìn)入,則計(jì)數(shù)一次,當(dāng)達(dá)到人數(shù)上限時(shí),發(fā)出報(bào)警,人數(shù)上限可以手動(dòng)修改。3.防盜系統(tǒng)在18:0000:00時(shí)間段內(nèi)處于燈控狀態(tài),當(dāng)檢測(cè)到有人進(jìn)入則點(diǎn)亮樓道照明燈,無人時(shí)則關(guān)閉照明燈。1.2

3、.2 主控模塊的選擇方案一:8051片內(nèi)有4k ROM,無須外接外存儲(chǔ)器和373,更能體現(xiàn)“單片”的簡(jiǎn)練。但是自己所編寫的程序無法燒寫到其ROM中,只有將程序交芯片廠代為燒寫,并是一次性的,今后任何人都不能改寫其內(nèi)容,技術(shù)上有局限,在調(diào)試過程中會(huì)增大成本。方案二:ATMEL 公司的AT89C51、AT89S51在與眾多的51系列單片機(jī)相比之下更顯實(shí)用,因?yàn)檫@兩款單片機(jī)不但和8051指令、管腳完全兼容,而且其片內(nèi)的4K程序存儲(chǔ)器是FLASH工藝的,用戶可以用電的方式瞬間擦除、改寫程序,一般專為ATMEL AT89xx 做的編程器均帶有這些功能。顯而易見,這種單片機(jī)對(duì)開發(fā)設(shè)備的要求很低,開發(fā)時(shí)間也

4、大大縮短。另外,AT89C51、AT89S51目前的售價(jià)比8031還低,市場(chǎng)供應(yīng)也很充足,比較符合本次設(shè)計(jì)的要求。方案三:AT89S52是2003年ATMEL推出的AT89S系列的新型品種,除了完全兼容8051和AT89C51外,還多了ISP編程和看門狗功能,其中的ISP在線編程技術(shù)既降低了成本也無需反復(fù)插拔芯片,可避免損壞芯片管腳,同時(shí)可省去了仿真器和專用編程器,大大減低了操作難度和成本;而且該單片機(jī)的性能穩(wěn)定且內(nèi)存達(dá)8KB,與其他同類單片機(jī)相比,它的性價(jià)比非常高。綜上所述,對(duì)這三種方案進(jìn)行比較后,確定選擇方案三中介紹的AT89S52作為本次設(shè)計(jì)的主控芯片。1.2.3紅外信號(hào)檢測(cè)模塊的方案選

5、擇方案一:采用紅外線對(duì)管收發(fā)電路,但是這樣不論是檢測(cè)到人時(shí),還是物體經(jīng)過,都會(huì)產(chǎn)生報(bào)警信號(hào),而本次設(shè)計(jì)所要求的是防盜,只要求對(duì)人體進(jìn)行檢測(cè),所以排除本方案。方案二:采用人體紅外感應(yīng)模塊來輸入報(bào)警信號(hào),這樣硬件連接簡(jiǎn)單,相應(yīng)的軟件設(shè)計(jì)也會(huì)隨之簡(jiǎn)化,而且這種模塊直線檢測(cè)距離遠(yuǎn),范圍廣,工作也較為穩(wěn)定。綜合比較以上兩種方案,決定選擇方案二實(shí)現(xiàn)本次設(shè)計(jì)的紅外信號(hào)檢測(cè)功能。1.2.4顯示模塊的方案選擇方案一:LED數(shù)碼管靜態(tài)顯示,這種方法編程容易,管理也較簡(jiǎn)單,但是占用單片機(jī)I/O口線資源較多,也給焊接增加了一定的難度。方案二:LED數(shù)碼管動(dòng)態(tài)顯示,價(jià)格低廉,不僅減少了對(duì)I/O口的浪費(fèi),而且能夠同時(shí)驅(qū)動(dòng)

6、多個(gè)數(shù)碼管。其驅(qū)動(dòng)程序容易編寫和理解。經(jīng)過以上二種方案的比較,在考慮成本和程序編寫等因素后,選擇方案二即LED數(shù)碼管動(dòng)態(tài)顯示作為本次設(shè)計(jì)顯示部分。1.2.5聲光報(bào)警和鍵盤控制模塊聲光報(bào)警模塊擬采用一個(gè)紅色發(fā)光二極管和一個(gè)藍(lán)色發(fā)光二極管作為警燈,一個(gè)無源蜂鳴器通過編程實(shí)現(xiàn)警笛。鍵盤控制模塊準(zhǔn)備用8個(gè)獨(dú)立按鍵分別控制時(shí)間調(diào)整、報(bào)警人數(shù)上限設(shè)定和解除警報(bào)等功能,不采用矩陣按鍵是因?yàn)樗某绦蚓帉戄^為復(fù)雜。1.2.6系統(tǒng)最終整體硬件方案經(jīng)過對(duì)以上各模塊方案的比較,在考慮成本、編程難易程度等方面的前提下,確定了最終硬件方案為:紅外信號(hào)檢測(cè)模塊:人體紅外感應(yīng)集成模塊;主控芯片:ATMEL公司的AT89S52

7、微控制器;顯示模塊:LED數(shù)碼管動(dòng)態(tài)顯示;外部控制:8個(gè)獨(dú)立按鍵;聲光報(bào)警:無源蜂鳴器,紅藍(lán)發(fā)光二極管各一個(gè)。最終整體方案的系統(tǒng)框圖如圖1-1所示。圖1-1 系統(tǒng)整體原理框圖第2章 系統(tǒng)硬件設(shè)計(jì)第一節(jié) 系統(tǒng)硬件及功能概述智能樓宇防盜及燈控系統(tǒng)主要由五個(gè)模塊組成,其核心AT89S52微控制器,用以對(duì)其他子模塊進(jìn)行通信;P3口與鍵盤控制模塊連接,實(shí)現(xiàn)系統(tǒng)的人機(jī)交互功能;P2口和P0口的部分位連接數(shù)碼管,通過動(dòng)態(tài)掃描的方式實(shí)現(xiàn)系統(tǒng)的顯示功能;P0口的其他位連接聲光報(bào)警模塊,主要由一個(gè)蜂鳴器、兩個(gè)發(fā)光二極管組成,當(dāng)有報(bào)警信號(hào)時(shí)則由單片機(jī)控制驅(qū)動(dòng)發(fā)光管和蜂鳴器實(shí)現(xiàn)報(bào)警功能;燈控部分以一個(gè)發(fā)光二極管模擬,

8、與單片機(jī)的一位I/O口相連;人體紅外感應(yīng)模塊與P1.1相連以實(shí)現(xiàn)紅外信號(hào)檢測(cè)模塊與微控制器之間的通信。第2節(jié) 主控模塊2.2.1主控芯片簡(jiǎn)介AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K在系統(tǒng)可編程Flash存儲(chǔ)器。使用Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM,32 位I/

9、O 口線,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。其引腳結(jié)構(gòu)如圖2-1所示。圖2-1 AT89S52引腳結(jié)構(gòu)2.2.2 主控模塊電路的設(shè)計(jì)AT89S52單片機(jī)是雙列直插40引腳的集成電路芯片,MCS-51單片機(jī)共有4個(gè)8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨(dú)

10、立地作輸出或輸入。MCS-51單片機(jī)第20引腳為接地端;第40引腳為電源端;第31引腳需要接高電位使單片機(jī)選用內(nèi)部程序存儲(chǔ)器;第18、19腳之間接上一個(gè)12MHz的晶振為單片機(jī)提供時(shí)鐘信號(hào);第9腳為復(fù)位腳,當(dāng)其接高電位時(shí),單片機(jī)停止當(dāng)前工作并恢復(fù)到初始狀態(tài)。電路連接如圖2-2所示。圖2-2主控模塊電路2.2.3紅外信號(hào)檢測(cè)模塊LM324系列運(yùn)算放大器是價(jià)格便宜的帶差動(dòng)輸入功能的四運(yùn)算放大器,可工作在單電源下,電壓范圍是332V或±16V。設(shè)計(jì)方案被動(dòng)式紅外報(bào)警器主要由光學(xué)系統(tǒng)、熱釋電紅外傳感器、信號(hào)濾波和放大、信號(hào)處理和報(bào)警電路等幾部分組成。熱釋電紅外線傳感器 :主要部分是由一種高熱

11、電系數(shù)的材料制成尺寸為2×lmm的探測(cè)元件。在每個(gè)探測(cè)器內(nèi)裝入一個(gè)或兩個(gè)探測(cè)元件,并將兩個(gè)探測(cè)元件以反極性串聯(lián),以抑制由于自身溫度升高而產(chǎn)生的干擾。探測(cè)元件的作用是探測(cè)、接收紅外輻射并將其轉(zhuǎn)換成微弱的電壓信號(hào)。信號(hào)處理及報(bào)警電路:電路中的傳感器將輸出電壓信號(hào),然后使該信號(hào)先通過一個(gè)帶通濾波器濾波,由于熱釋電紅外傳感器輸出的探測(cè)信號(hào)電壓十分微弱(通常僅有1mV左右),而且是一個(gè)變化的信號(hào),同時(shí)菲涅爾透鏡的作用又使輸出信號(hào)電壓呈脈沖形式(脈沖電壓的頻率由被測(cè)物體的移動(dòng)速度決定,通常為0.110Hz左右),所以應(yīng)對(duì)熱釋紅外傳感器輸出的電壓信號(hào)進(jìn)行放大。本設(shè)計(jì)運(yùn)用集成運(yùn)算放大器LM324來進(jìn)

12、行兩級(jí)放大,以使其獲得足夠的增益。圖2-3紅外信號(hào)檢測(cè)模塊連接圖2.2.4 LED數(shù)碼管顯示模塊電路的設(shè)計(jì)從圖中可以觀察到單片機(jī)P1口的低4位連接一片74LS47,由于74LS47的輸出是低電位有效的七段譯碼器,因此采用共陽(yáng)極的數(shù)碼管。通過單片機(jī)P1口的低4位傳輸出的信號(hào)經(jīng)過74LS47譯碼器碼后輸出給數(shù)碼管顯示。由于采用的是動(dòng)態(tài)方式因此我們使用的是P1口的P1.4、 P1.5、 P1.6、P1.7來組合選擇通道,通過編程來實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)顯示。電路連接圖如圖2-4所示。圖2-4 LED顯示模塊2.2.5聲光報(bào)警模塊蜂鳴器可以分為有源蜂鳴器和無源蜂鳴器兩種。有源蜂鳴器和無源蜂鳴器的差別主要差別

13、為:有源蜂鳴器和無源蜂鳴器的根本區(qū)別是產(chǎn)品對(duì)輸入信號(hào)的要求不一樣;有源蜂鳴器工作的理想信號(hào)是直流電,通常標(biāo)示為VDC、VDD等。因?yàn)榉澍Q器內(nèi)部有一簡(jiǎn)單的振蕩電路,能將恒定的直流電轉(zhuǎn)化成一定頻率的脈沖信號(hào),從面實(shí)出磁場(chǎng)交變,帶動(dòng)鉬片振動(dòng)發(fā)音。但是在某些有源蜂鳴器在特定的交流信號(hào)下也可以工作,只是對(duì)交流信號(hào)的電壓和頻率要求很高,此種工作方式一般不采用。而無源蜂鳴器沒有內(nèi)部驅(qū)動(dòng)電路,有些公司和工廠稱為訊響器,國(guó)標(biāo)中稱為聲響器。無源蜂鳴器工作的理想信號(hào)方波。如果給預(yù)直流信號(hào)蜂鳴器是不響應(yīng)的,因?yàn)榇怕泛愣ǎf片不能振動(dòng)發(fā)音。本設(shè)計(jì)需要產(chǎn)生警笛聲,要求有不同聲調(diào),所以將采用無源蜂鳴器作為發(fā)聲器件。系統(tǒng)中的

14、無源蜂鳴器用一個(gè)NPN型三極管8050進(jìn)行驅(qū)動(dòng),聲光報(bào)警模塊電原理圖如圖2-5所示。圖2-5燈光報(bào)警模塊原理圖2.2.6鍵盤控制模塊鍵盤采用8個(gè)獨(dú)立按鍵分別實(shí)現(xiàn)時(shí)間小時(shí)加一、時(shí)間分加一、人數(shù)千位加一、人數(shù)百位加一、人數(shù)十位加一、人數(shù)個(gè)位加一、系統(tǒng)設(shè)定開關(guān)和解除警報(bào)、顯示記錄的報(bào)警時(shí)間等作用??紤]到本次設(shè)計(jì)的I/O口較為充裕,為了簡(jiǎn)化軟件設(shè)計(jì)難度,從而放棄使用編程復(fù)雜的矩陣鍵盤。因?yàn)锳T89S52微控制器的P3口內(nèi)部?jī)?nèi)部已經(jīng)集成了上拉電阻,所以鍵盤控制模塊的電路相對(duì)簡(jiǎn)化了很多,如圖3-9所示。按鍵功能分配如表3-1所示。單片機(jī)I/O口功能分配P0.0小時(shí)加一P0.1分加一P0.2人數(shù)千位加一P0

15、.3人數(shù)百位加一P0.4人數(shù)十位加一P0.5人數(shù)個(gè)位加一P0.6系統(tǒng)設(shè)定開關(guān)P0.7解除警報(bào)、顯示記錄的報(bào)警時(shí)間圖2-6鍵盤模塊控制原理圖第3章 系統(tǒng)軟件設(shè)計(jì)第一節(jié) 編程語(yǔ)言的介紹與選擇 匯編語(yǔ)言是用助記符、符號(hào)和數(shù)字等來表示指令的程序語(yǔ)言,容易理解和記憶,它與機(jī)器語(yǔ)言指令是一一對(duì)應(yīng)的。匯編語(yǔ)言不像高級(jí)語(yǔ)言那樣通用性強(qiáng),而是屬于某種單片機(jī)所獨(dú)有的,與單片機(jī)的內(nèi)部硬件結(jié)構(gòu)密切相關(guān),也就是說,每款或者每個(gè)系列的單片機(jī)都有自己專有的一套指令系統(tǒng)。使用匯編語(yǔ)言編程的麻煩在于它的可讀性和可維護(hù)性比較差,如果是別人寫的程序,特別是當(dāng)程序沒有很好的標(biāo)注的時(shí)候,將非常不容易被讀懂,從而導(dǎo)致代碼的可重用性和可移

16、植性也比較低,而且在編程前需要先對(duì)所使用的單片機(jī)的硬件結(jié)構(gòu)有所了解。C語(yǔ)言是一種結(jié)構(gòu)化語(yǔ)言,它層次清晰,易于調(diào)試和維護(hù),語(yǔ)言簡(jiǎn)潔緊湊,使用方便、靈活。它不僅具有豐富的運(yùn)算符和數(shù)據(jù)類型,以便于實(shí)現(xiàn)各類復(fù)雜的數(shù)據(jù)結(jié)構(gòu),還可以直接訪問內(nèi)存地址,進(jìn)行位操作。用C語(yǔ)言編寫的程序,因?yàn)槠浜芎玫慕Y(jié)構(gòu)性和模塊化,更容易閱讀和維護(hù);而且由于它的模塊化,用語(yǔ)言編寫的程序具有很好的可移植性。功能化的代碼能夠很方便的從一個(gè)工程移植到另一個(gè)工程,從而減少了開發(fā)時(shí)間。C語(yǔ)言的特點(diǎn)就是可以使你盡量少地對(duì)硬件進(jìn)行操作,是一種功能性和結(jié)構(gòu)性很強(qiáng)的語(yǔ)言。鑒于以上對(duì)匯編語(yǔ)言和C語(yǔ)言的介紹與比較,本次設(shè)計(jì)將采用可讀性和可移植性相對(duì)較

17、強(qiáng)的C語(yǔ)言進(jìn)行軟件方面的設(shè)計(jì)。第二節(jié) 主程序設(shè)計(jì)整個(gè)軟件設(shè)計(jì)包括以下幾個(gè)子模塊:系統(tǒng)初始化模塊、時(shí)間系統(tǒng)模塊、監(jiān)控模塊和功能模塊。各模塊下又包含若干子程序:系統(tǒng)初始化模塊主要負(fù)責(zé)上電后對(duì)系統(tǒng)的各種初始化操作,包括系統(tǒng)自檢子程序和定時(shí)器初始化子程序;時(shí)間系統(tǒng)模塊主要完成時(shí)間的顯示功能,包括定時(shí)中斷子程序、數(shù)碼管動(dòng)態(tài)顯示子程序和報(bào)警時(shí)間顯示子程序;監(jiān)控模塊實(shí)現(xiàn)對(duì)外部命令的識(shí)別并調(diào)用相應(yīng)子程序的功能,包括鍵盤掃描子程序、延時(shí)子程序、系統(tǒng)設(shè)定子程序和紅外信號(hào)判斷子程序;功能模塊即為各功能的實(shí)現(xiàn)模塊,包括報(bào)警子程序、計(jì)數(shù)子程序、照明子程序、聲光報(bào)警子程序。系統(tǒng)上電后先調(diào)用自檢程序檢測(cè)硬件是否正常,自檢完

18、成后就對(duì)定時(shí)器進(jìn)行初始化以便開始計(jì)時(shí)工作。完成這些工作后,系統(tǒng)就會(huì)進(jìn)入到一個(gè)反復(fù)的循環(huán)過程中,即先調(diào)用數(shù)碼管動(dòng)態(tài)顯示程序使數(shù)碼管顯示相應(yīng)的內(nèi)容,接著進(jìn)入鍵盤掃描程序判斷是否有外部按鍵信號(hào)輸入,一旦檢測(cè)到有鍵被按下,則跳轉(zhuǎn)到相關(guān)的子程序以實(shí)現(xiàn)不同的功能,當(dāng)從子程序返回或沒有按鍵信號(hào)輸入時(shí),就判斷有沒有紅外信號(hào)產(chǎn)生,如果有,則根據(jù)當(dāng)前時(shí)間的不同調(diào)用相應(yīng)的功能子程序,如果沒有紅外信號(hào)產(chǎn)生,就繼續(xù)依次調(diào)用數(shù)碼管動(dòng)態(tài)顯示、鍵盤掃描和紅外信號(hào)判斷這三個(gè)子程序,從而構(gòu)成一個(gè)循環(huán)。由于在程序執(zhí)行過程中,數(shù)碼管顯示程序調(diào)用的間隔如果過大的話,數(shù)碼管上不同位的顯示對(duì)于人眼的感覺將不會(huì)是同時(shí)的,這樣就會(huì)使系統(tǒng)的顯示

19、部分變得異常而不易被觀察,所以,為了解決這個(gè)問題,在整個(gè)系統(tǒng)的程序執(zhí)行過程中,數(shù)碼管動(dòng)態(tài)顯示這個(gè)子程序?qū)?huì)在其他子程序中被反復(fù)調(diào)用。主程序流程圖如圖4-1所示。圖3-1主程序流程圖第三節(jié) 系統(tǒng)自檢子程序設(shè)計(jì)3.3.1系統(tǒng)自檢流程自檢主要是在系統(tǒng)開機(jī)后正常工作前先分別使用軟件驅(qū)動(dòng)關(guān)鍵硬件進(jìn)行最簡(jiǎn)單的工作,借以檢查系統(tǒng)的硬件部分有無損壞,電路是否有問題。首先將模擬警燈的紅、藍(lán)發(fā)光二極管和模擬燈光的發(fā)光二極管依次點(diǎn)亮,即將對(duì)應(yīng)I/O口置低電平;蜂鳴器是無源的,在實(shí)際工作中模擬警笛的聲音,這里只需反復(fù)給蜂鳴器賦予一個(gè)交替變化的交流信號(hào),它就可以工作,發(fā)出聲音;對(duì)于數(shù)碼管,因?yàn)榇颂幨菫榱藴y(cè)試硬件的好壞,

20、所以通過軟件將數(shù)碼管的所有8位全部打開,在段位上使其顯示“8”并閃爍三次即可證明數(shù)碼管是正常的。系統(tǒng)自檢子程序流程圖如圖4-2所示。圖3-2自檢程序流程圖3.3.2系統(tǒng)自檢程序代碼系統(tǒng)自檢子程序代碼如下:void selftest(void) rled=0; /紅色警燈亮 for(i=20000;i>0;i-); bled=0; /藍(lán)色警燈亮 for(i=20000;i>0;i-); light=0; /照明燈亮 for(i=20000;i>0;i-); for(i=3;i>0;i-); /警笛鳴叫 for(j=200;j>0;j-) beep=beep; del

21、ay500(); for(j=200;j>0;j-) beep=beep; delay500(); delay500(); P2=0x00; /打開數(shù)碼管所有位 P0=0x11; /所有數(shù)碼管顯示8 for(i=6;i>0;i-) /所有數(shù)碼管閃爍次 for(j=20000;j>0;j-); P0=P0; 第四節(jié) 定時(shí)器初始化及中斷3.4.1定時(shí)器概述AT89S52微控制器片內(nèi)有兩個(gè)16位定時(shí)/計(jì)數(shù)器,即定時(shí)器0(T0)和定時(shí)器1(T1)。它們都有定時(shí)和計(jì)數(shù)的功能,可用于定時(shí)控制、延時(shí)、對(duì)外部事件計(jì)數(shù)和檢測(cè)等。其中,T0由兩個(gè)8位特殊功能寄存器TH0和TL0構(gòu)成;T1由TH1

22、和TL1構(gòu)成。每個(gè)定時(shí)器都由軟件設(shè)置為定時(shí)工作方式或計(jì)數(shù)工作方式以及其他可控功能方式。設(shè)置為定時(shí)工作方式時(shí),定時(shí)器計(jì)數(shù)AT89S52片內(nèi)振蕩器輸出的經(jīng)12分頻后的脈沖,即每個(gè)機(jī)器周期使定時(shí)器(T0或T1)的數(shù)值加1直至計(jì)滿溢出。當(dāng)AT89S52采用12MHz晶振時(shí),一個(gè)機(jī)器周期為1s,計(jì)數(shù)頻率為1MHz。設(shè)置為計(jì)數(shù)工作方式時(shí),通過引腳T0(P3.4)和T1(P3.5)對(duì)外部脈沖信號(hào)計(jì)數(shù)。當(dāng)輸入脈沖信號(hào)產(chǎn)生由1至0的下降沿時(shí),定時(shí)器的值加1。不管是定時(shí)還是計(jì)數(shù)工作方式,定時(shí)器T0或T1在對(duì)內(nèi)部時(shí)鐘或?qū)ν獠渴录?jì)數(shù)時(shí),不占用CPU時(shí)間,除非定時(shí)/計(jì)數(shù)器溢出,才可能中斷CPU的當(dāng)前操作。由此可見,定

23、時(shí)器是單片機(jī)中效率高而且工作靈活的部件。由于本設(shè)計(jì)需要包含時(shí)間模塊,以便于在有外部紅外信號(hào)輸入時(shí)參考當(dāng)前時(shí)間調(diào)用相應(yīng)功能模塊,所以要將定時(shí)器設(shè)置為定時(shí)模式,為了便于編程,決定每次定時(shí)時(shí)間為50ms,這樣每1200次定時(shí)器溢出就是60秒。即一分鐘。3.4.2定時(shí)中斷流程當(dāng)定時(shí)器溢出產(chǎn)生中斷時(shí),CPU開始執(zhí)行定時(shí)中斷程序,先將定時(shí)器重新賦初值,然后判斷定時(shí)器溢出次數(shù)是否達(dá)到預(yù)設(shè)值,即計(jì)滿一分鐘,如果沒到,則中斷返回,繼續(xù)執(zhí)行系統(tǒng)的其他程序;如果已滿一分鐘,就重新設(shè)置溢出次數(shù)計(jì)數(shù)參數(shù),接著判斷是否計(jì)滿60分鐘,不是就中斷返回,是則將分鐘清零,將小時(shí)加一;再下來判斷是否計(jì)滿24小時(shí),不是則中斷返回,如

24、果是就將小時(shí)也清零。為了在計(jì)時(shí)判斷過程中不影響數(shù)碼管對(duì)當(dāng)前時(shí)間的正常顯示,專門定義了一組時(shí)間暫存器,分別對(duì)應(yīng)分鐘個(gè)位、分鐘十位、小時(shí)個(gè)位和小時(shí)十位,當(dāng)要中斷返回時(shí),就把這些暫存器中的值賦于顯示寄存器,使數(shù)碼管顯示值得以更新。定時(shí)中斷流程圖如圖3-3所示。圖3-3 定時(shí)中斷流程圖3.4.3初始化及中斷程序代碼定時(shí)器初始化代碼如下:void timerstart(void) TMOD=0x01; /定時(shí)器0模式1 IE=0x82; TH0=0x3C; /賦初值 TL0=0xB0; miao20=1200; /一分鐘計(jì)數(shù) TR0=1; /啟動(dòng)定時(shí)器定時(shí)中斷程序代碼如下:void timer0() i

25、nterrupt 1 using 1 TR0=0; /關(guān)閉定時(shí)器 TH0=0x3C; /賦初值 TL0=0xB0; TR0=1; /啟動(dòng)定時(shí)器 if(miao20-)=0) /是否到一分鐘 miao20=1200; /重新賦值 if(minl00+)>0xf9) /數(shù)碼管顯示變化 minl00=0xf0; if(minh00+)>0xf6) minh00=0xf0;if(hourl00+)>0xf3) if(hourh00=0xf2)hourl00=0xf0;hourh00=0xf0; else if(hourl00>0xf9)hourh00+;hourl00=0xf0

26、; else ; hourh0=hourh00; /將后臺(tái)寄存器值賦給顯示寄存器 hourl0=hourl00; minh0=minh00; minl0=minl00; 第五節(jié) 數(shù)碼管掃描子程序設(shè)計(jì)3.5.1動(dòng)態(tài)掃描原理對(duì)于一組數(shù)碼管動(dòng)態(tài)掃描顯示需要由兩組信號(hào)來控制:一組是字段輸出口輸出的字形代碼,用來控制顯示的字形,稱為段碼;另一組是位輸出口輸出的控制信號(hào),用來選擇第幾位數(shù)碼管工作,稱為位碼。由于各位數(shù)碼管的段線并聯(lián),段碼的輸出對(duì)各位數(shù)碼管來說都是相同的。因此,在同一時(shí)刻如果各位數(shù)碼管的位選線都處于選通狀態(tài)的話,8位數(shù)碼管將顯示相同的字符。若要各位數(shù)碼管能夠顯示出與本位相應(yīng)的字符,就必須采用

27、掃描顯示方式。即在某一時(shí)刻,只讓某一位的位選線處于導(dǎo)通狀態(tài),而其它各位的位選線處于關(guān)閉狀態(tài)。同時(shí),段線上輸出相應(yīng)位要顯示字符的字型碼。這樣在同一時(shí)刻,只有選通的那一位顯示出字符,而其它各位則是熄滅的,如此循環(huán)下去,就可以使各位數(shù)碼管顯示出將要顯示的字符。 3.5.2數(shù)碼管掃描流程對(duì)數(shù)碼管的動(dòng)態(tài)掃描應(yīng)按以下步驟進(jìn)行:1. 先準(zhǔn)備好要顯示的數(shù)據(jù),放入相應(yīng)的顯示存儲(chǔ)單元中。2. 根據(jù)要使用的數(shù)碼管的具體位置來確定掃描初值和掃描方向。3. 根據(jù)使用數(shù)碼管的個(gè)數(shù)來確定掃描的位數(shù)。4. 查表將要顯示的數(shù)據(jù)轉(zhuǎn)換為能使數(shù)碼管正確顯示相對(duì)應(yīng)的段碼。5. 本設(shè)計(jì)的數(shù)碼管掃描是按照自左向右的順序依次顯示兩個(gè)4位數(shù)碼

28、管,并將段值以數(shù)組的形式事先定義好了,在掃描時(shí)只需調(diào)用即可。3.5.3數(shù)碼管掃描程序代碼數(shù)碼管掃描程序代碼如下:void display(void) uchar w; /依次掃描8位計(jì)數(shù) for(w=7;w>0;w-) P2=weiw; /從P20開始顯示 switch(w) /根據(jù)位值給段位賦值 case 7:P0=P0&&hourh0;break; case 6:P0=P0&&hourl0;break; case 5:P0=P0&&minh0;break; case 4:P0=P0&&minl0;break; case

29、3:P0=P0&&qian0;break; case 2:P0=P0&&bai0;break; case 1:P0=P0&&shi0;break; case 0:P0=P0&&ge0;break; default:break; for(i=20000;i>0;i-); /延時(shí)大于1-2ms小于10ms 3.5.4顯示報(bào)警時(shí)間程序代碼該部分是在P3.7所對(duì)應(yīng)按鍵被按下后,在數(shù)碼管的前四位顯示系統(tǒng)所記錄的最近一次報(bào)警時(shí)間,程序代碼如下:void show(void) uchar ww; /依次掃描8位計(jì)數(shù),為保護(hù)w而重新定義一個(gè)

30、ww while(!lift) /判斷解除報(bào)警鍵是否按下 for(ww=7;ww>=0;ww-) P2=weiww; /從P20開始顯示 switch(ww) /根據(jù)位值給段位賦值 case 7:P0=P0&&polhourh;break; case 6:P0=P0&&polhourl;break; case 5:P0=P0&&polminh;break; case 4:P0=P0&&polminl;break; case 3:P0=P0&&qian0;break; case 2:P0=P0&&

31、;bai0;break; case 1:P0=P0&&shi0;break; case 0:P0=P0&&ge0;break; default:break; for(i=20000;i>0;i-); /延時(shí)大于1-2ms小于10ms 第六節(jié) 鍵盤掃描與系統(tǒng)設(shè)定子程序設(shè)計(jì)3.6.1去抖動(dòng)原理在對(duì)鍵盤鍵值的讀取過程中,讀取的鍵值理應(yīng)是一個(gè)穩(wěn)定的讀數(shù),而實(shí)際上,按鍵從最初接通到穩(wěn)定接通要經(jīng)過數(shù)毫秒的抖動(dòng)(彈跳時(shí)間),按鍵釋放時(shí)也同樣存在抖動(dòng)的問題,如圖4-1所示。抖動(dòng)會(huì)引起一次按鍵多次讀數(shù),直接影響按鍵的準(zhǔn)確率,因此鍵盤抖動(dòng)的削除顯得尤其重要。為了消除抖動(dòng)的影響

32、,可以采用軟件或硬件方法。圖4-1 抖動(dòng)產(chǎn)生示意圖硬件消抖是采用硬件電路的方法對(duì)鍵盤的按下抖動(dòng)及釋放抖動(dòng)進(jìn)行消抖,經(jīng)過消抖電路后使按鍵的電平信號(hào)只有兩種穩(wěn)定的狀態(tài)。常用的消抖電路有觸發(fā)器消抖電路,濾波消抖電路兩種。圖4-2給出濾波消抖電路:圖4-2濾波消抖電路軟件消抖的基本原理是當(dāng)檢測(cè)出有鍵閉合時(shí),先執(zhí)行一個(gè)延時(shí)子程序產(chǎn)生數(shù)毫秒的延時(shí)(通常為1020ms),待接通時(shí)的前沿抖動(dòng)消失后再判別是否有鍵按下。當(dāng)按鍵釋放時(shí),也要經(jīng)過數(shù)毫秒延時(shí),待后沿抖動(dòng)消失后再判別鍵是否釋放。3.6.2鍵盤掃描及系統(tǒng)設(shè)定流程鍵盤掃描及系統(tǒng)設(shè)定流程圖如圖4-3所示。圖4-3鍵盤掃描及系統(tǒng)設(shè)定流程圖3.6.3鍵盤掃描程序代

33、碼鍵盤掃描自程序如下:void keyjust(void) if(P3!=0xff) /是否有健按下 for(i=20000;i>0;i-); /去抖動(dòng) if(P3!=0xff) /確實(shí)有健按下 switch(P3) /判斷哪個(gè)鍵按下并調(diào)用相應(yīng)子程序 case 0x7f:show();break;case 0xbf:syset();break;default:break; 3.6.4系統(tǒng)設(shè)定程序代碼系統(tǒng)設(shè)定程序代碼如下:void syset(void) while(!set)display(); /set未松開則顯示數(shù)碼管 while(set) /set松開則判斷下級(jí)按鍵哪個(gè)被按下 if

34、(P3!=0xff) /是否有鍵按下 for(i=20000;i>0;i-); /去抖動(dòng) if(P3!=0xff) switch(P3) /判斷哪個(gè)鍵按下并調(diào)用相應(yīng)子程序 case 0xdf:if(ge0+)<=0xf9);else ge0=0xf0;break; case 0xef:if(shi0+)<=0xf9);else shi0=0xf0;break; case 0xf7:if(bai0+)<=0xf9);else bai0=0xf0;break; case 0xfb:if(qian0+)<=0xf9);else qian0=0xf0;break; cas

35、e 0xfd:if(minl0+)<=0xf9); else minl0=0xf0;if(minh0+)<=0xfb); else minh0=0xf0;break; case 0xfe:if(hourl0+)<=0xf3); else if(hourh0=0xf2)hourl0=0xf0;hourh0=0xf0; else if(hourl0<=0xf9); else hourl0=0xf0;hourh0+;break; default:break; display(); /數(shù)碼管顯示 for(i=20000;i>0;i-); while(!set)displa

36、y(); /鍵未松開則顯示,否則更新數(shù)碼管顯示內(nèi)容 ge00=ge0; shi00=shi0; bai00=bai0; qian00=qian0; minl00=minl0; minh00=minh0; hourl00=hourl0; hourh00=hourh0; 第七節(jié) 紅外信號(hào)判斷與各功能子程序設(shè)計(jì)3.7.1紅外信號(hào)接收與功能模塊流程 當(dāng)熱釋電紅外傳感器檢測(cè)到有人靠近時(shí),會(huì)自動(dòng)產(chǎn)生一個(gè)高電平的報(bào)警信號(hào)輸入到主控芯片,如果此時(shí)的時(shí)間在第一時(shí)段,則經(jīng)單片機(jī)控制發(fā)出聲光報(bào)警并記錄當(dāng)前時(shí)間;如果在第二時(shí)段,則對(duì)經(jīng)過人數(shù)進(jìn)行計(jì)數(shù);如果在第三時(shí)段,則自動(dòng)控制照明系統(tǒng)開啟,在人離開后自動(dòng)控制照明系統(tǒng)關(guān)

37、閉。當(dāng)接收到報(bào)警信號(hào)時(shí),首先查詢當(dāng)前時(shí)間,根據(jù)時(shí)段不同跳轉(zhuǎn)到相應(yīng)的功能自程序。紅外信號(hào)接收及功能流程圖如圖4-4所示。圖4-4 紅外信號(hào)接收及功能流程圖3.7.2程序代碼接收紅外信號(hào)及相關(guān)功能模塊程序代碼如下:1.紅外信號(hào)判斷void hongwai(void) if(P10) /是否有紅外信號(hào)產(chǎn)生 for(i=20000;i>0;i-); /去抖動(dòng) if(P10) /確實(shí)有紅外信號(hào)產(chǎn)生則判斷執(zhí)行不同功能 if(hourh00=0)&&(hourl00<=6)func1(); else if(hourh00=0)&&(hourl00>6)|(h

38、ourh00=1)&&(hourl00<=7)func2(); else func3(); 2.報(bào)警并記錄時(shí)間void func1(void) polhourh=hourh00; polhourl=hourl00; polminh=minh00; polminl=minl00; alarm();3.計(jì)數(shù)void func2(void) if(ge0+)<=0xf9); else ge0=0;if(shi0+)<=0xf9); else shi0=0;if(bai0+)<=0xf9); else bai0=0;if(qian0+)<=0xf9); e

39、lse ge0=0;shi0=0;bai0=0;qian0=0; if(qian0>qian00)alarm(); else if(bai0>bai00)alarm(); else if(shi0>shi00)alarm(); else if(ge0>ge00)alarm(); else ;4.照明void func3(void) while(P10)light=0;display(); light=1;5.聲光報(bào)警void alarm(void) rled=0;bled=1; while(lift) for(j=200;j>0;j-) beep=beep; delay500(); rled=rled;bled=bled; display(); for(j=200;j>0;j-) beep=beep; delay500(); delay500(); rled=rled;bled=bled; display(); while(!lift) rled=1;bled=1;display();結(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論