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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

8、與單片機的一位I/O口相連;人體紅外感應(yīng)模塊與P1.1相連以實現(xiàn)紅外信號檢測模塊與微控制器之間的通信。第2節(jié) 主控模塊2.2.1主控芯片簡介AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(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 口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復(fù)位為止。其引腳結(jié)構(gòu)如圖2-1所示。圖2-1 AT89S52引腳結(jié)構(gòu)2.2.2 主控模塊電路的設(shè)計AT89S52單片機是雙列直插40引腳的集成電路芯片,MCS-51單片機共有4個8位的I/O口(P0、P1、P2、P3),每一條I/O線都能獨

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

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

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

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

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

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

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

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

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

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

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; /藍色警燈亮 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é) 定時器初始化及中斷3.4.1定時器概述AT89S52微控制器片內(nèi)有兩個16位定時/計數(shù)器,即定時器0(T0)和定時器1(T1)。它們都有定時和計數(shù)的功能,可用于定時控制、延時、對外部事件計數(shù)和檢測等。其中,T0由兩個8位特殊功能寄存器TH0和TL0構(gòu)成;T1由TH1

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

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

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

25、nterrupt 1 using 1 TR0=0; /關(guān)閉定時器 TH0=0x3C; /賦初值 TL0=0xB0; TR0=1; /啟動定時器 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; /將后臺寄存器值賦給顯示寄存器 hourl0=hourl00; minh0=minh00; minl0=minl00; 第五節(jié) 數(shù)碼管掃描子程序設(shè)計3.5.1動態(tài)掃描原理對于一組數(shù)碼管動態(tài)掃描顯示需要由兩組信號來控制:一組是字段輸出口輸出的字形代碼,用來控制顯示的字形,稱為段碼;另一組是位輸出口輸出的控制信號,用來選擇第幾位數(shù)碼管工作,稱為位碼。由于各位數(shù)碼管的段線并聯(lián),段碼的輸出對各位數(shù)碼管來說都是相同的。因此,在同一時刻如果各位數(shù)碼管的位選線都處于選通狀態(tài)的話,8位數(shù)碼管將顯示相同的字符。若要各位數(shù)碼管能夠顯示出與本位相應(yīng)的字符,就必須采用

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

28、管,并將段值以數(shù)組的形式事先定義好了,在掃描時只需調(diào)用即可。3.5.3數(shù)碼管掃描程序代碼數(shù)碼管掃描程序代碼如下:void display(void) uchar w; /依次掃描8位計數(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-); /延時大于1-2ms小于10ms 3.5.4顯示報警時間程序代碼該部分是在P3.7所對應(yīng)按鍵被按下后,在數(shù)碼管的前四位顯示系統(tǒng)所記錄的最近一次報警時間,程序代碼如下:void show(void) uchar ww; /依次掃描8位計數(shù),為保護w而重新定義一個

30、ww while(!lift) /判斷解除報警鍵是否按下 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-); /延時大于1-2ms小于10ms 第六節(jié) 鍵盤掃描與系統(tǒng)設(shè)定子程序設(shè)計3.6.1去抖動原理在對鍵盤鍵值的讀取過程中,讀取的鍵值理應(yīng)是一個穩(wěn)定的讀數(shù),而實際上,按鍵從最初接通到穩(wěn)定接通要經(jīng)過數(shù)毫秒的抖動(彈跳時間),按鍵釋放時也同樣存在抖動的問題,如圖4-1所示。抖動會引起一次按鍵多次讀數(shù),直接影響按鍵的準(zhǔn)確率,因此鍵盤抖動的削除顯得尤其重要。為了消除抖動的影響

32、,可以采用軟件或硬件方法。圖4-1 抖動產(chǎn)生示意圖硬件消抖是采用硬件電路的方法對鍵盤的按下抖動及釋放抖動進行消抖,經(jīng)過消抖電路后使按鍵的電平信號只有兩種穩(wěn)定的狀態(tài)。常用的消抖電路有觸發(fā)器消抖電路,濾波消抖電路兩種。圖4-2給出濾波消抖電路:圖4-2濾波消抖電路軟件消抖的基本原理是當(dāng)檢測出有鍵閉合時,先執(zhí)行一個延時子程序產(chǎn)生數(shù)毫秒的延時(通常為1020ms),待接通時的前沿抖動消失后再判別是否有鍵按下。當(dāng)按鍵釋放時,也要經(jīng)過數(shù)毫秒延時,待后沿抖動消失后再判別鍵是否釋放。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-); /去抖動 if(P3!=0xff) /確實有健按下 switch(P3) /判斷哪個鍵按下并調(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松開則判斷下級按鍵哪個被按下 if

34、(P3!=0xff) /是否有鍵按下 for(i=20000;i>0;i-); /去抖動 if(P3!=0xff) switch(P3) /判斷哪個鍵按下并調(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é) 紅外信號判斷與各功能子程序設(shè)計3.7.1紅外信號接收與功能模塊流程 當(dāng)熱釋電紅外傳感器檢測到有人靠近時,會自動產(chǎn)生一個高電平的報警信號輸入到主控芯片,如果此時的時間在第一時段,則經(jīng)單片機控制發(fā)出聲光報警并記錄當(dāng)前時間;如果在第二時段,則對經(jīng)過人數(shù)進行計數(shù);如果在第三時段,則自動控制照明系統(tǒng)開啟,在人離開后自動控制照明系統(tǒng)關(guān)

37、閉。當(dāng)接收到報警信號時,首先查詢當(dāng)前時間,根據(jù)時段不同跳轉(zhuǎn)到相應(yīng)的功能自程序。紅外信號接收及功能流程圖如圖4-4所示。圖4-4 紅外信號接收及功能流程圖3.7.2程序代碼接收紅外信號及相關(guān)功能模塊程序代碼如下:1.紅外信號判斷void hongwai(void) if(P10) /是否有紅外信號產(chǎn)生 for(i=20000;i>0;i-); /去抖動 if(P10) /確實有紅外信號產(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.報警并記錄時間void func1(void) polhourh=hourh00; polhourl=hourl00; polminh=minh00; polminl=minl00; alarm();3.計數(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.聲光報警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等.壓縮文件請下載最新的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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論