智能家居系統(tǒng)畢業(yè)設(shè)計.doc
智能家居控制系統(tǒng)(軟件)設(shè)計摘 要 本文通過對現(xiàn)有的家居智能控制系統(tǒng)功能以及實際情況分析,設(shè)計了一種安全、實用、方便的智能家居控制系統(tǒng)。本文首先闡述了智能家居控制系統(tǒng)的研究狀況和發(fā)展現(xiàn)狀,以及一般家居控制系統(tǒng)所要檢測的物理量。根據(jù)家居控制系統(tǒng)常用的檢測信號類型,選取了紅外信號、溫度信號、光線強度信號和密碼輸入等作為本設(shè)計的檢測依據(jù)。本設(shè)計選取紅外信號、溫度信號和光線強度信號作為監(jiān)測信號。密碼驗證是否通過作為整個電路是否工作的依據(jù)。當(dāng)密碼驗證通過之后,整個系統(tǒng)同時監(jiān)測紅外信號、溫度信號和光線強度信號,紅外信號達(dá)到閾值則開始報警。溫度信號實時顯示。光線強度信號控制步進(jìn)電機的動作。關(guān)鍵字:智能控制;光強度;紅外;溫度;步進(jìn)電機Intelligent home control system (software) designAbstract Smart home control systems also emerged. This paper designs a practical and convenient smart home control system based on the existing smart home control system and the actual situation.This paper describes the intelligent home control system research and development, as well as detected physical signals of the home control system. This design chooses the infrared signal, the temperature signal, the light intensity signal and the password input signals as the detection signal types.The design selected infrared signal, the temperature signal and the light intensity signal as the monitoring signals. Password authentication is as the basis situation if the circuit works. When password authentication is passed, the entire system monitors the infrared signal, the temperature signal and the light intensity signal. The system alarms when the infrared signal reaches the threshold. Temperature signal real-time displays on the LCD1602. Light intensity signal controls the stepper motor movements.Keywords: intelligent control; light intensity; infrared technology; temperature control; stepper motor II 目 錄1 緒 論11.1 課題背景及研究意義11.2 智能家居控制系統(tǒng)的發(fā)展概況21.3 本設(shè)計研究的主要內(nèi)容22 智能家居控制系統(tǒng)的總體介紹32.1 整體系統(tǒng)的原理32.2 系統(tǒng)各個模塊介紹32.2.1 系統(tǒng)中ADC0832的介紹32.2.2 電機驅(qū)動電路介紹42.2.3 矩陣鍵盤電路介紹42.2.4 聲光報警電路介紹53 智能家居控制系統(tǒng)的軟件設(shè)計63.1 系統(tǒng)功能結(jié)構(gòu)圖63.2 軟件設(shè)計主程序63.3 軟件系統(tǒng)構(gòu)成83.4 顯示子程序83.5 溫度數(shù)據(jù)讀取程序93.6 中斷程序113.7 光線檢測與步進(jìn)電機控制子程序113.8 報警條件子程序124 智能家居控制系統(tǒng)軟件調(diào)試環(huán)境與分析結(jié)果144.1 開發(fā)環(huán)境簡介144.1.1 編程軟件介紹144.1.2 程序的工程建立144.2 程序的調(diào)試154.2.1 主程序的調(diào)試154.3 調(diào)試結(jié)果展示165 結(jié)論及展望18附錄一 程序清單19附錄二 實物圖43參考文獻(xiàn)44致 謝45IIII1 緒 論1.1 課題背景及研究意義 在信息化技術(shù)日益發(fā)展的21世紀(jì)的世紀(jì),各種電子和互聯(lián)網(wǎng)新技術(shù)是了人類文明的取得巨大進(jìn)步主要途徑。而智能化家居控制系統(tǒng)的出現(xiàn)使得人們可以通過手機或者互聯(lián)網(wǎng)互聯(lián)網(wǎng)絡(luò)在任何時候、任何地方遠(yuǎn)程的對家中的任何電器(空調(diào)、加熱器、電飯煲、燈光、音響、DVD影碟機)進(jìn)行控制;也可以在下班途中,讓熱水器提前燒好熱水、預(yù)先將家中的空調(diào)機打開、讓電飯煲煮好香噴噴的米飯而這一切都僅僅只需要輕輕的點幾下鼠標(biāo)鍵盤,或者打一個簡單的電話就能夠?qū)崿F(xiàn)。此外,還有些家庭可以通過智能家居系統(tǒng)對家里的東西具有遠(yuǎn)程監(jiān)聽、多途徑報警、數(shù)字留言等多種便捷功能?,F(xiàn)今追求舒適、時尚和便捷的家居生活是社會進(jìn)步的日趨表現(xiàn),因為系統(tǒng)可以能夠在不改變家中任何家電的情況下,遠(yuǎn)程的控制家中的電器、燈光、電源及家里環(huán)境,使人們可以方便的快捷的生活?,F(xiàn)今我們常用的密碼鎖是一種利用輸入密碼的正確與否判斷與他相聯(lián)系的機械開關(guān)的閉合的電子產(chǎn)品。由于他的嚴(yán)密性和可靠性,使它的種類很多。有基于芯片的性價 比較高的產(chǎn)品,也有簡易方便的電子產(chǎn)品。通過密碼鎖的加入可以防止一些設(shè)備被非法開啟。提供安全性。 隨著社會信息化技術(shù)的不斷更新,紅外傳感技術(shù)也隨之前進(jìn)。目前已在多個領(lǐng)域發(fā)揮它巨大的作用。紅外不是可見光,具有良好的隱蔽性,白天和夜里都能用,而且抗干擾能力強,我們利用紅外線的特性來制作功能性器件,所以主要被用來制作防盜報警系統(tǒng)。我們?yōu)榱朔乐股鐣先找娣簽E的偷盜現(xiàn)象,常將紅外技術(shù)運用各大商場、博物館及有關(guān)嚴(yán)密的場所。而本設(shè)計綜合研究了現(xiàn)有的光電防盜報警裝置的優(yōu)缺點,本身具有實用性強、安裝操作簡易,價格低廉,誤報率低等特點,并且在其原有基礎(chǔ)上進(jìn)行設(shè)計的。設(shè)計通過查找資料,采用紅外對沖管的無線發(fā)射與接收來控制是否進(jìn)入報警模式,通過紅外線判讀信號,通過電路傳輸給并由89C52單片機進(jìn)行處理,所以報警電路是否進(jìn)行觸發(fā)將由單片機根據(jù)檢測模塊輸入的信號來決定。 現(xiàn)代家居生活是追求舒適、方便的自動化的生活。而自動窗簾可是我們的生活發(fā)生實質(zhì)性變化,利用全自動窗簾的感應(yīng)基礎(chǔ)是根據(jù)日照光線和溫度來控制的,設(shè)計時可以預(yù)先設(shè)定的光線強度和溫度,用來自動開啟窗簾和關(guān)閉窗簾; 溫度是人們?nèi)粘I钪薪?jīng)常遇到的一個基礎(chǔ)變量,現(xiàn)今市場上能測量溫度值的傳感器有很多種,很多控制系統(tǒng)對溫度的測量也是的功能之一。而本設(shè)計中運用的是經(jīng)典的溫度傳感器DS18B20來檢測溫度。1.2 智能家居控制系統(tǒng)的發(fā)展概況 我國的智能家居技術(shù)共歷經(jīng)了概念、研發(fā)、實驗、推廣以及普及四個大階段,大概時間是從2000年的概念年到2007年普及年之間的7年左右的時間。由于硬件和軟件間的協(xié)調(diào)有很大的困難,所以我們中國在推行智能化家居的難度更加之大。這些問題在國外往往需要更長的時間來完成。而自2003年開始的實驗,一些國外的成熟的智能家居計算開始流向中國,這就給我的研發(fā)及實驗帶來了非常之大的幫助,極大地縮短了時間,是我們在追趕國外的步伐更加迅速。在隨后的兩年里,我國的智能家居技術(shù)與歐美國家相比差距并不大,只是國外的相關(guān)技術(shù)的種類非常多,這是我們國家所不能比的。例如:微軟公司開發(fā)的“夢幻之家”IBM公司開發(fā)的“家庭主任”等均以完善而且成熟的技術(shù)強占了大部分家居市場。自2008年奧運會開始,我國的智能化家居技術(shù)已經(jīng)在整個家具市場上占有很大的比重,而國外的智能化技術(shù)由于不適應(yīng)中國認(rèn)得生活方式所以占到的比例反而小了許多。相比較而言,智能化家居更能體現(xiàn)出科技的力量在我們生活中的重要性。很難再預(yù)測在2016年的時候,全球化的智能家居技術(shù)將達(dá)到怎樣的地步,但是可以清楚家居智能化正在走進(jìn)千家萬戶。1.3 本設(shè)計研究的主要內(nèi)容 本設(shè)計的內(nèi)容主要是基于89C51單片機的智能家居控制系統(tǒng),利用單片機獲取各個傳感器的數(shù)據(jù)并處理,從而執(zhí)行相應(yīng)的控制與有關(guān)功能。設(shè)計中采用模塊化設(shè)計原則,利用多種集成傳感器芯片,將硬件模塊和軟件系統(tǒng)相組合,初步設(shè)計了一個簡易的智能控制系統(tǒng),并可以完成簡單的防盜報警、溫度顯示、自動控制等功能。根據(jù)設(shè)計原則,設(shè)計中選用性能價格比較高的單片機STC89C52。溫度數(shù)據(jù)的采集系統(tǒng),本設(shè)計中選用DS18B20這一典型的溫度傳感器。而對于距離的感應(yīng),設(shè)計方案選用了紅外傳感器。本文通過對光線的檢測是采用光敏電阻與模數(shù)轉(zhuǎn)換ADC0832相結(jié)合的方案。之外還可以對步進(jìn)電機進(jìn)行控制。為了滿足密碼功能,用液晶屏LCD1602和矩陣鍵盤來完成密碼驗證功能。當(dāng)密碼輸入錯誤或是紅外的遮擋時間大于閾值時,啟動報警電路來報警。本文個章節(jié)安排如下: 第一章緒論,主要分析課題提出的背景意義,及智能家居系統(tǒng)的發(fā)展概況。 第二章是本文對系統(tǒng)硬件部分的簡單介紹。 第三章家居智能控制系統(tǒng)的軟件部分的設(shè)計,對系統(tǒng)主程序與子程序的流程圖的設(shè)計 進(jìn)行分析論述。第四章是調(diào)試部分,介紹編程環(huán)境與分析軟件可能出現(xiàn)的問題,進(jìn)一步提高軟件的操作行。第五章是結(jié)論部分,總結(jié)了本設(shè)計的成果意義,并對本課題的相關(guān)展望。2 智能家居控制系統(tǒng)的總體介紹2.1 整體系統(tǒng)的原理 一個完美的家居控制系統(tǒng)可以提供一個家用電器的控制,照明控制,窗簾控制,電話遠(yuǎn)程控制,室內(nèi)和室外的遠(yuǎn)程控制,防盜報警,并為你的各種編程時間控制功能和方法。本系統(tǒng)設(shè)計充分利用了已軟件代替有關(guān)硬件進(jìn)行設(shè)計的原理。在設(shè)計中為了簡化處理,對于家居系統(tǒng)中幾個關(guān)鍵的量進(jìn)行處理。家居室內(nèi)溫度和光線強度是舒適度的一個重要指標(biāo),本系統(tǒng)中對溫度進(jìn)行實時檢測和顯示,對光線值實時檢測并通過步進(jìn)電機來控制窗簾自動調(diào)整室內(nèi)的光線強度。除了溫度和光線強度的檢測為,本系統(tǒng)還可以滿足簡易的防盜防盜功能。通過密碼驗證避免非法啟用設(shè)備,通過紅外檢測可以避免人員非法進(jìn)入。整個系統(tǒng)的總體原理框圖如圖2-1所示。 圖2-1 智能控制系統(tǒng)總體原理框圖2.2 系統(tǒng)各個模塊介紹 2.2.1 系統(tǒng)中ADC0832的介紹經(jīng)過ADC0832模數(shù)轉(zhuǎn)換之后,單片機讀的數(shù)據(jù)就是光敏電阻上的分壓值。單片機對讀到的數(shù)據(jù)判斷就可以知道當(dāng)前光線強度的情況了從而提高轉(zhuǎn)換的寬度。因為ADC0832有兩個通道,本設(shè)計中只需要對分壓值進(jìn)行判斷,所以選用其中一路就可以了。有關(guān)資料表明,選用CH0通道,將CH1通道懸空,作為單通道模擬信號輸入時ADC0832的輸入電壓是05V且8位分辨率時的電壓精度為19.53mV。而如果是由IN+與IN-輸入的輸入時,可以將電壓值設(shè)定在某一個較大范圍之內(nèi),使其上下浮動。但值得注意的是,在進(jìn)行IN+與IN-的輸入時,如果IN+的電壓小于IN-的電壓則轉(zhuǎn)換后的數(shù)據(jù)結(jié)果始終是00H。從圖上可以看出,光敏電阻R9與電阻R8構(gòu)成分壓電路。光線強度會改變R9的阻值,當(dāng)R9的阻值發(fā)生變化之后,R9上的電壓值隨之改變,而模數(shù)轉(zhuǎn)換器ADC0832的2管腳CH0上的電壓值也跟著改變。光敏電阻控制電路部分的原理圖如圖2-2。 圖2-2 光敏電阻控制電路原理圖 2.2.2 電機驅(qū)動電路介紹由于驅(qū)動步進(jìn)電機需要較大的功率,所以單片機輸出接口需要通過ULN2003放大再連接到相應(yīng)的電機接口用于帶動電機的轉(zhuǎn)動。步進(jìn)電機的電路圖如圖2-3所示。圖2-3中,J2是步進(jìn)電機的接口。R4R7是串聯(lián)限流電阻。圖2-3 步進(jìn)電機驅(qū)動電路圖 2.2.3 矩陣鍵盤電路介紹在本設(shè)計中,當(dāng)處于密碼處于輸入狀態(tài)時,通過鍵盤輸入密碼,可以通過LCD顯示輸入時的密碼狀態(tài)。在正常工作狀態(tài)下,LCD顯示實時的溫度值和紅外值。矩陣鍵盤及顯示電路如圖2-4所示。圖2-4 矩陣鍵盤及顯示電路 2.2.4 聲光報警電路介紹當(dāng)達(dá)到報警條件時,要有報警信號發(fā)出。這種報警信號通常有三類:閃光報警,鳴音報警和語音報警。本設(shè)計的報警電路包括燈光報警和蜂鳴器報警兩種方式。實現(xiàn)聲光報警電路比較簡單,如圖2-5所示。 圖2-5 聲光報警電路3 智能家居控制系統(tǒng)的軟件設(shè)計3.1 系統(tǒng)功能結(jié)構(gòu)圖家居智能控制系統(tǒng)的軟件設(shè)計分為2個工作狀態(tài):等待密碼輸入狀態(tài)和正常工作狀態(tài)。在等待密碼輸入狀態(tài)下,電路等待矩陣鍵盤的數(shù)據(jù)輸入。當(dāng)輸入的數(shù)據(jù)和定義的密碼一致時,系統(tǒng)進(jìn)入到正常工作狀態(tài)。如果輸入的數(shù)據(jù)和密碼不一致,則提示密碼錯誤并報警1秒,然后轉(zhuǎn)入等待密碼輸入狀態(tài)。直到密碼輸入正確為止。 在正常工作狀態(tài)下,系統(tǒng)實時檢測溫度值、光線值、矩陣鍵盤值和紅外值。將檢測的值顯示到液晶屏上。如果光線值發(fā)生改變則相應(yīng)轉(zhuǎn)動電機,模擬自動窗簾。整個系統(tǒng)的功能結(jié)構(gòu)框圖如圖3-1所示。等待密碼輸入狀態(tài) 正 常 工 作 狀 態(tài)矩陣鍵盤溫度傳感器光敏電阻紅外傳感器步進(jìn)電機LED顯示 圖3-1系統(tǒng)功能結(jié)構(gòu)圖3.2 軟件設(shè)計主程序 系統(tǒng)的程序燒錄到STC89C52內(nèi)部的FLASH內(nèi)存中,有主程序、溫度讀取程序、中斷延時程序、紅外遮擋時間判定程序、光線強度判定程序、由光線強度值控制電機程序、鍵盤輸入、LCD顯示程序和報警子程序等組成。為了方便編程,使程序完成后條理清晰,就必須對數(shù)據(jù)存儲器的存儲空間進(jìn)行規(guī)劃。STC89C52提供用戶的RAM有256字節(jié)。 主程序的功能是完成開機界面和對單片機所進(jìn)行的初始化,初始化就是設(shè)置各個變量的初始值、進(jìn)行相關(guān)的中斷設(shè)置等。各部分的地址分配如下:LCD1602的數(shù)據(jù)端口:P0口;LCD1602的控制端口:P2.5P2.7;DS18B20溫度傳感器接口:P1.0;矩陣鍵盤接口:P1.1P1.7;紅外接口:P3.2;報警器接口:P3.3;步進(jìn)電機接口:P3.4P3.7。主程序的流程圖如圖3-2所示。初始化設(shè)置定時器0打開定時器中斷讀取密碼值讀取溫度值報警顯示密碼錯誤顯示溫度值讀取光線強度主程序密碼是否正確紅外值是否大于閥值YNYN圖3-2 主程序流程圖3.3 軟件系統(tǒng)構(gòu)成本系統(tǒng)的軟件部分主要包含五個文件即CLOCK.H文件、LCD1602.H文件、DS18B20.H文件、MOTOR.H文件、ULTRASONIC.H文件和MAIN.C文件。由于項目文件并不太大,所以用五個頭文件的形式將一些必要的時鐘設(shè)置、宏定義和一些簡單的驅(qū)動程序包含在主函數(shù)中,這樣,既可以實現(xiàn)程序設(shè)計的模塊化,又不影響程序編譯的效率。其中MAIN.C文件主要完成系統(tǒng)初始化以及紅外檢測、模數(shù)轉(zhuǎn)換功能,同時,它還包含了單片機應(yīng)用中最重要的定時器設(shè)置、定時器中斷、端口中斷等內(nèi)容。3.4 顯示子程序 LCD1602典型應(yīng)用和本設(shè)計一致,可以參看原理圖。其基本操作時序如下: 讀狀態(tài):輸入:RS=L,RW=H,E=H 輸出:D0D7=狀態(tài)字 寫指令:輸入:RS=L, RW=L,D0D7=指令,E=高脈沖 輸出:無 讀數(shù)據(jù):輸入:RS=H, RW=H, E=H 輸出:DOD7=數(shù)據(jù) 寫數(shù)據(jù):輸入:RS=H, RW=L,D0D7=數(shù)據(jù),E=高脈沖 輸出:無顯示子程序負(fù)責(zé)狀態(tài)的顯示,在輸入密碼狀態(tài)負(fù)責(zé)提示語的顯示,和輸入密碼過程的顯示,當(dāng)密碼輸入完畢之后將密碼判斷的結(jié)果顯示出來。在系統(tǒng)進(jìn)入正常工作狀態(tài)后,顯示當(dāng)前的溫度值和紅外值。(1)LCD1602的讀操作時序如圖3-5所示。圖3-3 1602讀操作時序(2) LCD1602的寫操作時序如圖3-6所示 圖3-4 1602寫操作時序 3.5 溫度數(shù)據(jù)讀取程序 溫度檢測模塊本設(shè)計選用了DS18B20元件。DS18B20元件是由DALLAS設(shè)計生產(chǎn)的一款單總線方式訪問的數(shù)字溫度計。該元件具有體積小,外圍電路簡單等特點。因此本設(shè)計選擇該元件為基礎(chǔ)組建一個溫度檢測系統(tǒng)。由于該元件遵循單總線協(xié)議,即只要使用一個引腳就可以進(jìn)行數(shù)據(jù)的傳輸,所以它對讀/寫操作的時序要求比較嚴(yán)格。在進(jìn)行此操作時為保證數(shù)據(jù)的可靠性,需要關(guān)閉總中斷。此外該元件上電后默認(rèn)精度為9位,在寫完讀取溫度指令后,會在該器件內(nèi)部的兩個8位的RAM中獲取有效數(shù)據(jù)。其中前8位用來表示測得數(shù)據(jù)的正負(fù),即為數(shù)據(jù)的符號位,后面的8位用于表示數(shù)據(jù)值。由于測量精度為9位,所以當(dāng)測得溫度為正數(shù)時,實際溫度值為數(shù)據(jù)值乘以0.5。當(dāng)測得值為負(fù)數(shù)時,實際溫度應(yīng)為數(shù)據(jù)值的補碼乘以0.5。例如,對應(yīng)于-25的數(shù)據(jù)格式為: MSB LSB1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 (符號位“-”) (溫度值“ ”) 11001110的補碼00110010,即,被測溫度值為: T=-(125 +124 +12)0.5=-25 表3-1 9位DS18B20溫度與數(shù)據(jù)的對應(yīng)關(guān)系溫度/二進(jìn)制數(shù)據(jù)輸出十六進(jìn)制數(shù)據(jù)輸出+12500000000 1111101000FAH+2500000000 001100100032H+0.500000000 000000010001H-0.511111111 11111111FFFFH-2511111111 11001110FFCEH-5511111111 10010010FF92H當(dāng)系統(tǒng)處于正常工作狀態(tài)時,要循環(huán)的對溫度數(shù)據(jù)采集、顯示和判定。對溫度值的讀取由DS18B20來完成。DS18B20是一線式的器件,數(shù)據(jù)的讀寫都通過一個數(shù)據(jù)端口來完成。所以對DS18B20的控制時序就要求比較高。讀取和寫入數(shù)據(jù)的過程中無法被中斷,所以在DS18B20的讀寫的情況下關(guān)閉中斷。 DS18B20的控制是典型的控制類程序。共享4個函數(shù)來完成。初始化、讀數(shù)據(jù)、寫數(shù)據(jù)和得到溫度4個函數(shù)。DS18B20控制程序的流程圖如圖3-7所示。初始化ds18b20寫溫度轉(zhuǎn)換命令等待溫度轉(zhuǎn)換命令讀取溫度值溫度程序結(jié)束圖3-5 DS18B20流程圖3.6 中斷程序在DS18B20的程序中,當(dāng)啟動DS18B20溫度轉(zhuǎn)換之后,需要等待750ms以上,才能從DS18B20端口上讀到當(dāng)前的溫度值。而紅外的數(shù)據(jù)什么時候到來是不確定的,為了平衡二者的關(guān)系。使用定時器中斷,來產(chǎn)生5ms的中斷。沒當(dāng)中斷到來讀取紅外的端口,當(dāng)紅外有輸出時,打開內(nèi)部計數(shù)器來記錄紅外被遮擋的時間。通過定時器中斷不僅滿足的DS18B20的讀取問題,也兼顧了紅外數(shù)據(jù)的讀取和顯示的問題。定時器中斷流程圖如圖3-9所示。進(jìn)入中斷、定時存數(shù)據(jù)保護(hù)現(xiàn)場取數(shù)據(jù)指向下一地址請標(biāo)志位開始退出現(xiàn)場結(jié)束圖3-6 定時器中斷子程序流程圖3.7 光線檢測與步進(jìn)電機控制子程序根據(jù)本設(shè)計的模擬量轉(zhuǎn)換要求,系統(tǒng)采用的ADC083是8位分辨率的A/D轉(zhuǎn)換芯片,其最高分辨可達(dá)256級,轉(zhuǎn)換時間僅為32S,轉(zhuǎn)換速度快且穩(wěn)定性能強,完全可以達(dá)到要求。因其內(nèi)部參考電壓的復(fù)用與電源的輸入,使得芯片的模擬電壓輸入保持在05V之間,達(dá)到穩(wěn)定的工作狀態(tài)。芯片還具有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗,能夠有效地減少數(shù)據(jù)誤差。選用獨立的芯片使能輸入,通過數(shù)據(jù)輸入,我們可以很容易地實現(xiàn)信道選擇功能。光線檢測主要是通過ADC0832來完成的。通過讀取ADC0832的值,并與上一個讀取的值相比較,來判斷光線是變暗了還是變亮了。根據(jù)本次讀取的值和上次讀取的值取差值,用差值來控制電機的正反轉(zhuǎn)以及電機的轉(zhuǎn)動幅度。光線檢測與步進(jìn)電機控制子程序的流程圖如圖3-10所示。初始化DS18B20開始讀取模數(shù)轉(zhuǎn)換值 保存檢測值,計算初始值或上一值的差值取反轉(zhuǎn)程序及轉(zhuǎn)動幅度 判斷差值的大小取正轉(zhuǎn)程序及轉(zhuǎn)動幅度結(jié)束小于0大于0等于0圖3-7 光線檢測與步進(jìn)電機控制程序流程圖3.8 報警條件子程序報警條件說明 :(1)密碼輸入:當(dāng)密碼輸入錯誤時報警,密碼輸入正確則進(jìn)行下一步操作;(2)紅外傳感器:紅外被遮擋5秒以上為達(dá)到報警條件,以下為未達(dá)到報警條件。因為所要監(jiān)測的傳感器主要是溫度傳感器和紅外傳感器,任何一個傳感器如果達(dá)到報警條件,都可以發(fā)出報警信號。在硬件設(shè)計方面已經(jīng)對每個傳感器的報警條件進(jìn)行了設(shè)置。程序流程圖如圖3-11所示。 讀取密碼值初始化進(jìn)入報警狀態(tài)讀取紅外值判斷密碼是否正確紅外值是否達(dá)到閥值報警是否解除開始結(jié)束YNNY 圖3-8 報警條件子程序流程圖434 智能家居控制系統(tǒng)軟件調(diào)試環(huán)境與分析結(jié)果本次系統(tǒng)調(diào)試,是以硬件模塊為準(zhǔn),先模塊后整合的方式進(jìn)行的。當(dāng)然,單片機的基本時鐘和引腳設(shè)置必不可少。在系統(tǒng)聯(lián)調(diào)時,出現(xiàn)了許多實際問題。現(xiàn)將主要方面闡述如下。4.1 開發(fā)環(huán)境簡介 4.1.1 編程軟件介紹 在本設(shè)計中,由于用的是C語言編程,所以我選用的軟件開發(fā)環(huán)境是美國Keil SOFTWARE公司出品的51系列兼容單片機。KEIL VISION可以方便的使用并且利用其強大的仿真功能進(jìn)行軟硬件的調(diào)試工作。目前最新版的KEIL系統(tǒng)提供了包括于C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的一整套完善的開發(fā)方案,并可以通過一個集成開發(fā)環(huán)境(UVISION)將這些部分嚴(yán)密的組合在一起共同工作。WIN98、NT、WIN2000、WINXP等操作系統(tǒng)都可以有效的運行KEIL軟件進(jìn)行編程。 實際使用KEIL 51時,干集成環(huán)境既可用于C語言開發(fā)也可用于匯編語言開發(fā)。它內(nèi)部集成了文件編輯、項目管理、編譯鏈接和仿真調(diào)試等多種功能。用戶可以在這里用文件編輯器編寫自己的程序,用多種方法來調(diào)試和修改程序。編譯程序也能幫助用戶檢查錯誤,提示用戶修改錯誤,直至程序無誤。 為了使軟件編程環(huán)境更加靈活多樣,所以在2009年2月發(fā)布了引入靈活的窗口管理系統(tǒng)的UVISION4編程環(huán)境,能夠使用更多的監(jiān)視器,視覺上可以對窗口位置的任何地方進(jìn)行完全控制是本次軟件更新的最大亮點,并且充分利用屏幕空間和更有效地組織多個窗口是新的用戶界面顯著地特點,它為我們提供一個整潔的、高效的環(huán)境來開發(fā)應(yīng)用程序以提高工作效果。 4.1.2 程序的工程建立 (1)先建立一個名為“hyx”的空文件夾,把工程文件放到里面,防止和其它文件相混。開始工作并啟動KEIL UVISION4軟件。 (2)點擊“PROJECT-NEW UVISION PROJECT”新建一個系統(tǒng)工程。 (3)在彈出的對話框中,選擇剛剛建立的“HYX”的文件夾,保存該項目的名稱,不需要填寫,默認(rèn)的工程后綴與UVISION3及UVISION2版本不同了,為UVPORJ。(4)彈出一個對話框后,就可以根據(jù)設(shè)計中所需要的單片機??梢栽谡业讲⑦x中“HYX”下的AT89C52,用于開始編譯程序。 (5)編程完畢之后,開始建立一個源程序文本: (6)找一個空白的文檔開始寫入源程序。 (7)輸入源程序文件名名稱,因為是C語言,則是“HYX.C”然后保存。 (8)在項目設(shè)置中,可以編譯、鏈接,選擇菜單項目建立目標(biāo),連接到單一的工程項目,生成代碼。如下圖3-3所示:圖4-1 基于Keil的編程說明圖4.2 程序的調(diào)試在對工程成功的進(jìn)行匯編、連接后,要進(jìn)入軟件調(diào)試狀態(tài),只要選擇菜單中的DEBUGSTART/STOP DEBUG SESSION即可,并建立了一個仿真CPU用來模擬執(zhí)行該程序。 4.2.1 主程序的調(diào)試 因為本設(shè)計中采用的模塊較多所以系統(tǒng)采用了實時多任務(wù)系統(tǒng),實行逐個分任務(wù)進(jìn)行調(diào)試。當(dāng)逐個子程序調(diào)試好以后,再觀察各個任務(wù)同時運行時操作系統(tǒng)中有沒有錯誤。等調(diào)試全部完成后,為了調(diào)試效果應(yīng)反復(fù)運行多次,其中如發(fā)現(xiàn)錯誤時部分程序作了適當(dāng)修正后系統(tǒng)才能夠正常運行。利用單步運行的的性質(zhì),可以對一些多次循環(huán)重復(fù)的程序進(jìn)行檢查。而這樣的調(diào)試可以選用KEIL VISION開發(fā)環(huán)境來進(jìn)行調(diào)試,既方便又快捷。從中找到程序出錯的環(huán)節(jié)及故障點進(jìn)行修改,直到程序完全正常。如下圖3-4所示: 圖4-2 Keil程序的調(diào)試 4.2.2 軟件抗干擾措施當(dāng)單片機受到干擾,不再按照一定的規(guī)律執(zhí)行,被改變了的程序指針(PC)的值后,使程序而跑飛到其它非程序區(qū),此后它不僅執(zhí)行了一系列毫無意義的指令,而且還可能破壞數(shù)據(jù)存儲器的內(nèi)容,造成難以預(yù)料的后果。激活看門狗的程序其工作指令如下程序: SFR WDTRST = 0XA6 _NOP_(); WDTRST = 0X1E ;先送1E WDTRST = 0XE1 ;后送E14.3 調(diào)試結(jié)果展示設(shè)計中的要求基本完成,如下圖4-1和4-2所示:(1) 開機畫面,需輸入正確密碼(2) 密碼正確后,會顯示當(dāng)前室內(nèi)溫度 (3)紅外,光敏,步進(jìn)電機都能實現(xiàn)且運行良好圖4-3 開機畫面圖4-4 溫度及其他顯示畫面5 結(jié)論及展望 智能家居控制系統(tǒng)的核心任務(wù)是數(shù)據(jù)的采集、運算和處理,對于實際物理量的采集必須要有傳感器。傳感器是一種檢測裝置,它能夠直接將物理量轉(zhuǎn)換為電信號的量,現(xiàn)今的傳感器還能直接將物理量轉(zhuǎn)換為單片機可以接收的數(shù)字量。傳感器的工作指標(biāo)與運行性能是能否圓滿完成檢測和控制的重要環(huán)節(jié),如果沒有對原始物理量精確可靠的反應(yīng),那么就無法進(jìn)行最佳檢測和控制。 本設(shè)計的控制系統(tǒng)是基于STC89C52單片機為核心,進(jìn)行必要的計算技術(shù),以軟件代替很多傳統(tǒng)的控制系統(tǒng)的硬件,多種功能完美的將多種系統(tǒng)功能集于一身。用本文設(shè)計的智能家居控制系統(tǒng)具有如下特點: (1)通過矩陣鍵盤輸入密碼,當(dāng)密碼正確電路進(jìn)入正常工作狀態(tài)。 (2)系統(tǒng)實時監(jiān)測紅外傳感器的值,可以對非法進(jìn)入的情況進(jìn)行報警。 (3)實時采集溫度值,將室內(nèi)的溫度值實時的顯示出來。 (4)實時采集光線強度值,通過光線強度值來控制窗簾的開合,來保持室內(nèi)光線的穩(wěn)定。 (5)單片機及接口電路的設(shè)計使I/O接口線利用率高。電路簡單、成本降低、外接器件少、性能可靠。 展望,家居環(huán)境的實際情況比較復(fù)雜,需要測量的參數(shù)一般都比較多,本設(shè)計主要采集了溫度參數(shù),紅外參數(shù)以及光線強度參數(shù)等。溫度是家庭室內(nèi)舒適度的一個重要參數(shù)。為了防止人員的非法進(jìn)入紅外參數(shù)也是一個比較重要的參數(shù),為了能夠控制室內(nèi)的光線強度,對光線強度的檢測和對窗簾電機的控制也是必不可少的。為了提高一些設(shè)備使用的安全性,進(jìn)行簡單的密碼認(rèn)證也是很必要的。本課題所設(shè)計的智能家居控制系統(tǒng)可以用來檢測非法進(jìn)入、溫度值、光線強度以及密碼認(rèn)證。 本設(shè)計也有許多不足之處,最明顯的是所涉及的家居家電太少,以及智能化的操作行不高,如果有可能我會在原方案上加入以下的系統(tǒng): (1)在原模塊上加上萬年歷以及煙霧報警系統(tǒng)。 (2)在原來的設(shè)計上加入遠(yuǎn)程控制系統(tǒng)(GSM),是整個設(shè)計更加體現(xiàn)智能化家具的價值。 現(xiàn)在基于各種因素限制,所以本系統(tǒng)設(shè)計只能做到這樣。附錄一 程序清單#include#include #include #definetime_length10000/us#defineinf_length5/s#definetemp_max40/度#defineL1602_DBP0sbit L1602_RS=P27;sbit L1602_RW=P26; sbit L1602_E=P25;sbit ds18b20_bit = P10;sbit Inf_bit= P32;sbit KEY_LA=P11;sbit KEY_LB=P12; sbit KEY_LC=P13;sbit KEY_LD=P14;sbit KEY_L1=P15; sbit KEY_L2=P16;sbit KEY_L3=P17;sbit ADC0832_CS=P20;sbit ADC0832_CLK=P21;sbit ADC0832_DI=P23; sbit ADC0832_DO=P22;sbit SETP_1=P34;sbit SETP_2=P35;sbit SETP_3=P36; sbit SETP_4=P37;sbit Beep_bit=P33;unsignedcharbdatastatus;sbitnormal_work= status0;sbitflag_alarm= status1;sbitflag_1820= status2;sbitflag_inf= status3;unsigned char code time_num_h = (unsigned char)(65536-time_length)/256);unsigned char code time_num_l = (unsigned char)(65536-time_length)%256);unsigned char code ticks_second = (unsigned char)(1000000/time_length);unsignedchartemperature=30;unsignedcharseconds=0;unsignedcharadc_value=0;unsignedcharworkstate = 0;unsigned char psd6;staticcode unsigned charDPY_TAB16 = 0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f,0X77,0X7c,0X39,0X5e,0X79,0X71,;static code unsigned char MOTOR_STEP8 = 0 x80,0 xc0,0 x40,0 x60,0 x20,0 x30,0 x10,0 x90;unsigned char lcd_data16=KEY: *;/*延時函數(shù) */voiddelayms(unsigned char ms)unsigned chari,j;while(ms-)for(i=0;i3;i+)for(j=0;j107;j+);/*延時函數(shù) */voiddelay100us(unsignedcharcnt)unsignedchari,j;for(i=0;icnt;i+)for(j=0;j22;j+)_nop_();/*延時函數(shù) */voiddelay10us(void)_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/*按鍵狀態(tài)判定函數(shù) */unsigned charkey_station(void)unsigned chari,key;KEY_LA=0;KEY_LB=0;KEY_LC=0;KEY_LD=0;i=P1;i&=0 xE0;if(i = 0 xE0)key=0;elsedelayms(10);i=P1;i&=0 xE0;if(i = 0 xE0)key=0;elseKEY_LA=0;KEY_LB=1;KEY_LC=1;KEY_LD=1;i=P1;i&=0 xE0;i=i;if(i & 0 x80)key = 0 x31;if(i & 0 x40)key = 0 x32;if(i & 0 x20)key = 0 x33;KEY_LA=1;KEY_LB=0;KEY_LC=1;KEY_LD=1;i=P1;i&=0 xE0;i=i;if(i & 0 x80)key = 0 x34;if(i & 0 x40)key = 0 x35;if(i & 0 x20)key = 0 x36;KEY_LA=1;KEY_LB=1;KEY_LC=0;KEY_LD=1;i=P1;i&=0 xE0;i=i;if(i & 0 x80)key = 0 x37;if(i & 0 x40)key = 0 x38;if(i & 0 x20)key = 0 x39;KEY_LA=1;KEY_LB=1;KEY_LC=1;KEY_LD=0;i=P1;i&=0 xE0;i=i;if(i & 0 x80)key = 0 x08;if(i & 0 x40)key = 0 x30;if(i & 0 x20)key = 0 x0D;KEY_LA=0;KEY_LB=0;KEY_LC=0;KEY_LD=0;while(1)i=P1;i&=0 xE0;if(i = 0 xE0)delayms(10);i=P1;i&=0 xE0;if(i = 0 xE0)break;KEY_LA=1;KEY_LB=1;KEY_LC=1;KEY_LD=1;returnkey;/* DS18B20 程序 *voidInit_DS18B20(void)unsignedchari;ds18b20_bit=1;_nop_();ds18b20_bit=0;delay100us(5);ds18b20_bit=1;delay10us();delay10us();delay10us();delay10us();delay10us();delay10us();if(ds18b20_bit=0)for(i=0;i250;i+)if(ds18b20_bit = 1)delay100us(3);flag_1820= 1;elseflag_1820=0; /*讀18B20函數(shù) */unsignedcharread_18b20(void)unsignedchari;unsigned charc;for(i=0;i=1; if(ds18b20_bit = 1) c |= 0 x80; else c &= 0 x7f; delay10us();delay10us();delay10us();delay10us();delay10us();ds18b20_bit = 1;returnc;/*寫18B20函數(shù) */voidwrite_18b20(unsigned char cnt)unsignedchari;for(i=0;i=1;/*得到溫度值函數(shù) */unsigned intget_number_18b20(void)unsigned char temp=0;unsignedchar h,l;Init_DS18B20();if(flag_1820 = 1)EA=0;write_18b20(0 xcc);write_18b20(0 x44);EA=1;delayms(200);delayms(200);delayms(200);delayms(200); Init_DS18B20();EA=0;write_18b20(0 xcc);write_18b20(0 xbe);l = read_18b20();h = read_18b20();EA=1;temp = h;temp = temp 4;temp += l;if(h & 0 xf0) !=0)temp -= 1;temp = temp;temp |= 0 x80;returntemp;/* DS18B20 程序 */* LCD1602 程序 *staticunsigned char L1602_read_status() unsigned char s;L1602_RW=1; L1602_RS=0;L1602_E=0; L1602_DB=0 xff;_nop_();_nop_();L1602_E=1;_nop_();_nop_();s=L1602_DB;L1602_RW=1;_nop_();return(s);void L1602_write_command( unsigned char com )unsigned char i;do i=L1602_read_status(); i&=0 x80; delayms(2);while(i!=0); L1602_DB=com;L1602_RW=0;/L1602_RS=0;L1602_E=1;/ _nop_();_nop_();L1602_E=0;/ _nop_();_nop_();L1602_RW=1; void L1602_write_data( unsigned char dat ) unsigned char i;do i=L1602_read_status(); i=i&0 x80; delayms( 2);while(i!=0); L1602_DB=dat;L1602_RW=0;L1602_RS=1;L1602_E=1;_nop_();_nop_();L1602_E=0;_nop_();_nop_();L1602_RW=1;void L1602_init( void ) L1602_write_command(0 x38);L1602_write_command(0 x0C);L1602_write_command(0 x06);L1602_write_command(0 x01);delayms(2); voidLCD_display_char(unsigned char x , unsigned char y , unsigned char dat)unsigned char add;if(x=1)add=0 x80+y;elseadd=0 xc0+y;L1602_write_command(add);L1602_write_data(dat);voidLCD_display_str(unsigned char x)unsigned char i;if(x = 0 x01)L1602_write_command(0 x80);elseL1602_write_command(0 xc0);for(i=0;i16;i+)if(lcd_datai = 0)break;L1602_write_data(lcd_datai);voidLCD_clear(void)unsigned char i;L1602_write_command(0 x80);for(i=0;i16;i+)L1602_write_data(0 x20);L1602_write_command(0 xc0);for(i=0;i16;i+)L1602_write_data(0 x20);voidpsd_clear(void)psd0=0;psd1=0;psd2=0;psd3=0;psd4=0;psd5=0;/*