智能家居報(bào)警系統(tǒng)設(shè)計(jì)_第1頁(yè)
智能家居報(bào)警系統(tǒng)設(shè)計(jì)_第2頁(yè)
智能家居報(bào)警系統(tǒng)設(shè)計(jì)_第3頁(yè)
智能家居報(bào)警系統(tǒng)設(shè)計(jì)_第4頁(yè)
智能家居報(bào)警系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

前言以智能中控主機(jī)為核心,采用國(guó)際領(lǐng)先的室內(nèi)無(wú)線組網(wǎng)技術(shù),實(shí)現(xiàn)門(mén)禁、空調(diào)、地暖、燈光、熱水器、家庭影院、窗簾、各類報(bào)警器等家庭電子設(shè)備與控制主機(jī)之間的通訊組網(wǎng),用戶可以通過(guò)、座機(jī)、遙控面板以及互聯(lián)網(wǎng)通信終端等方式,一鍵搞定所有家電設(shè)備,隨時(shí)了解家中的實(shí)時(shí)信息,遠(yuǎn)程完成對(duì)家里各項(xiàng)設(shè)備的控制。只要手指輕輕一觸,家里所有電器都可以通過(guò)用平板電腦或者遙控面板一鍵操控,輕松對(duì)家居中的燈光、電視、空調(diào)、窗簾、攝像頭等進(jìn)行實(shí)時(shí)查看與控制,讓你提前享受未來(lái)生活,一切變化盡在你的指尖!1.總體設(shè)計(jì)方案1.1基于GSM平安系統(tǒng)簡(jiǎn)介GSM平安系統(tǒng)是基于移動(dòng)通信網(wǎng)絡(luò)的監(jiān)控報(bào)警技術(shù),徹底解決了普通防盜器、監(jiān)控器無(wú)法解決的遠(yuǎn)程報(bào)警和易于破解的難題。利用通信加密技術(shù),讓用戶的家居平安無(wú)憂,是繼單向防盜器、雙向防盜器后的新一代防盜產(chǎn)品。GSM智能防盜器,是利用最新材料技術(shù)、最新信息技術(shù)、最新人工智能設(shè)計(jì)讓防盜器具備智慧靈魂,使人與財(cái)產(chǎn)的平安保障突破時(shí)空限制。在性能上必須要在各種情況條件下的高可靠性,在功能上必須既要讓用戶有不可破解的最高平安等級(jí),又要讓用戶操作方便,甚至系統(tǒng)為用戶自動(dòng)效勞。GSM網(wǎng)絡(luò)智能防盜器符合全能的防盜技術(shù)特點(diǎn):及時(shí)通知:全球范圍最高平安:杜絕解碼操作方便:手動(dòng)自動(dòng)實(shí)用功能:防盜防火GSM防盜被喻為繼第一代機(jī)械鎖,第二代電子式防盜鎖,第三代芯片式數(shù)碼防盜器,第四代GPS防盜之后的第五代防盜器。本系統(tǒng)充分運(yùn)用GSM移動(dòng)通訊網(wǎng)絡(luò),結(jié)合數(shù)字通訊技術(shù),實(shí)現(xiàn)對(duì)家居進(jìn)行狀態(tài)監(jiān)控、調(diào)度、防盜報(bào)警、防火報(bào)警等功能。GSM網(wǎng)絡(luò)防盜主要是突破了無(wú)距離的限制。無(wú)效勞費(fèi)、無(wú)月租、房屋遇到入侵,5秒鐘通知到戶主,戶主可以第一時(shí)間制止盜竊行為的發(fā)生,防止火災(zāi)蔓延。1.2基于GSM平安系統(tǒng)現(xiàn)狀與開(kāi)展趨勢(shì)城市規(guī)模迅速擴(kuò)大,外來(lái)人口大量涌入,使本來(lái)就復(fù)雜的城市管理更加復(fù)雜。家庭被盜,住戶被搶,常有發(fā)生。對(duì)此,公安部門(mén)雖作了大量投入,仍不盡人意。其原因大體是:〔1〕有的家庭被盜,損失數(shù)目極少,公安部門(mén)沒(méi)有用常規(guī)的方法立案?jìng)刹??!?〕有的住戶雖然損失嚴(yán)重,但法律意識(shí)淺薄,不能將當(dāng)時(shí)的情況和線索作一個(gè)明確的表述,自然增加了破案難度。〔3〕作案人詭計(jì)多端,狡猾、飄忽不定,沒(méi)有固定的著落和去處?!?〕公安部門(mén)時(shí)時(shí)有很多大案要案要辦,使破案周期變長(zhǎng),破案率下降。綜上所述,GSM家庭防盜系統(tǒng)是一個(gè)尖端科技的安防產(chǎn)品,性能可靠操作簡(jiǎn)單,具有深遠(yuǎn)的開(kāi)展意義。2.設(shè)計(jì)正文隨著生活水平的提高,提別是物質(zhì)生活水平的不斷提高,人們對(duì)自己的個(gè)人平安和家庭財(cái)產(chǎn)平安越來(lái)越重視,平安已成為一種市場(chǎng)需求;同時(shí)經(jīng)濟(jì)的飛速開(kāi)展伴隨著城市流動(dòng)人口的急劇增加,給家庭防控增加了新的難題和提出了新的課題,傳統(tǒng)的人防物防的形式已難以適應(yīng)社會(huì)形式開(kāi)展的需求??茖W(xué)技術(shù)的進(jìn)步和普遍應(yīng)用,進(jìn)一步同動(dòng)了智能化家庭的建設(shè)步伐,家庭平安技術(shù)防范系統(tǒng)已經(jīng)從本地向遠(yuǎn)程監(jiān)控開(kāi)展,從社會(huì)的周邊防范向家庭內(nèi)部防控逐漸靠攏,家庭防盜報(bào)警系統(tǒng)在人們對(duì)美好生活的追求中迅速崛起。一個(gè)完善的職能家庭,具有便捷、平安、舒適、高檔的生活環(huán)境,確保每一個(gè)家庭住戶的聲明財(cái)產(chǎn)平安,是建設(shè)本系統(tǒng)的最大意義和根本目的。GSM模塊將GSM射頻芯片、基帶處理芯片、存儲(chǔ)器、功放器件等集成在一塊線路板上,具有獨(dú)立的操作系統(tǒng)、GSM射頻處理、基帶處理并提供標(biāo)準(zhǔn)接口的功能模塊。因此,GSM模塊具有發(fā)送SMS短信,語(yǔ)音通話,GPRS數(shù)據(jù)傳輸?shù)然贕SM網(wǎng)絡(luò)進(jìn)行通信的所有根本功能。簡(jiǎn)單來(lái)講,GSM模塊加上鍵盤(pán)、顯示屏和電池,就是一部。目前,GSM模塊依然在廣泛的工業(yè)應(yīng)用領(lǐng)域使用,在更行各業(yè)都能看到GSM模塊應(yīng)用的產(chǎn)品。例如,在車載監(jiān)控領(lǐng)域,使用GSM模塊將車輛行駛的GPS數(shù)據(jù)傳輸?shù)杰囕v管理中心;在電力、水務(wù)系統(tǒng),通過(guò)GSM模塊實(shí)現(xiàn)了遠(yuǎn)程智能抄表,可以實(shí)時(shí)監(jiān)控用戶的用電和用水量;在測(cè)繪行業(yè),為很多偏僻的測(cè)繪點(diǎn)安裝了GSM模塊實(shí)現(xiàn)了實(shí)時(shí)的監(jiān)控,不必再人工收集數(shù)據(jù);在家庭,可以安裝無(wú)線報(bào)警系統(tǒng),一旦發(fā)生火情或盜竊行為,可以立即通知戶主和報(bào)警;在國(guó)外,很多老人小孩帶了個(gè)人跟蹤器,防止老人和小孩走失或意外發(fā)生,里面也是集成了GSM模塊。可以說(shuō),隨著GSM的網(wǎng)絡(luò)建設(shè)的完善,GSM模塊的應(yīng)用范圍也越來(lái)越廣。通過(guò)終端接收?qǐng)?bào)警短信,并且可以發(fā)送命令短信異地遙控系統(tǒng)實(shí)現(xiàn)各種操作。利用各種傳感器對(duì)可能出現(xiàn)的煤氣泄露、火災(zāi)、家中門(mén)窗被翻開(kāi)并有人闖入等意外情況進(jìn)行,并通過(guò)短信發(fā)送特定報(bào)警信息于預(yù)先設(shè)定好的號(hào)碼,通知事主做出相應(yīng)措施。通過(guò)GSM網(wǎng)絡(luò),即使遠(yuǎn)在千里之外也能對(duì)家中發(fā)生的各種突發(fā)意外情況了如指掌,使生活更平安更智能。2.1基于GSM的平安系統(tǒng)簡(jiǎn)介GSM平安系統(tǒng)是基于移動(dòng)通信網(wǎng)絡(luò)的監(jiān)控報(bào)警技術(shù),徹底解決了普通防盜器、監(jiān)控器無(wú)法解決的遠(yuǎn)程報(bào)警和易于破解的難題。利用通信加密技術(shù),讓用戶的家居平安無(wú)憂,是繼單向防盜器、雙向防盜器后的新一代防盜產(chǎn)品。GSM智能防盜器,是利用最新材料技術(shù)、最新信息技術(shù)、最新人工智能設(shè)計(jì)讓防盜器具備智慧靈魂,使人與財(cái)產(chǎn)的平安保障突破時(shí)空限制。在性能上必須要在各種情況條件下的高可靠性,在功能上必須既要讓用戶有不可破解的最高平安等級(jí),又要讓用戶操作方便,甚至系統(tǒng)為用戶自動(dòng)效勞,系統(tǒng)設(shè)計(jì)如圖1圖1系統(tǒng)設(shè)計(jì)圖2.1單片機(jī)控制模塊單片機(jī)控制模塊主要采用STC89C52單片機(jī)作為主控制芯片。STC89C52作為普通51單片機(jī)已廣泛應(yīng)用于各種產(chǎn)品中,其接口簡(jiǎn)單STC89C52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲(chǔ)器。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、有效STC89C52具有以下標(biāo)準(zhǔn)功能:8K字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門(mén)狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,STC89C52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM圖2STC89C52引腳圖2.2傳感器模塊傳感器模塊主要由紅外傳感式集發(fā)射接收于一體的ITR9909。這是一種光電開(kāi)關(guān)。光電開(kāi)關(guān)〔光電傳感器〕是光電接近開(kāi)關(guān)的簡(jiǎn)稱,它是利用被檢測(cè)物對(duì)光束的遮擋或反射,由同步回路選通電路,從而檢測(cè)物體有無(wú)的。物體不限于金屬,所有能反射光線的物體均可被檢測(cè)。光電開(kāi)關(guān)將輸入電流在發(fā)射器上轉(zhuǎn)換為光信號(hào)射出,接收器再根據(jù)接收到的光線的強(qiáng)弱或有無(wú)對(duì)目標(biāo)物體進(jìn)行探測(cè)。2.3GSM模塊GSM模塊主要采用SIEMENS公司的TC35模塊,通過(guò)串口接入電路與單片機(jī)控制模塊相連,主要負(fù)責(zé)實(shí)現(xiàn)遠(yuǎn)距離報(bào)警的功能。采用GSM的短信功能,可以使某些控制到達(dá)“零距離”。由于短信息的費(fèi)用低廉,可以取代傳統(tǒng)的無(wú)線遙控。因此本系統(tǒng)采用單片機(jī)控制GSM模塊發(fā)送GSM短信,實(shí)現(xiàn)遠(yuǎn)距離報(bào)警的功能。TC35模塊是SIEMENS公司為嵌入式設(shè)備設(shè)計(jì)的GSM雙頻通訊核心模塊,TC35T內(nèi)含TC35/SIM卡座/電源/天線/RS232接口,是可獨(dú)立使用的通訊終端。TC35支持標(biāo)準(zhǔn)的AT命令集,通過(guò)AT指令可實(shí)現(xiàn)發(fā)送短信功能。模塊有AT命令集接口,支持文本和PDU模式的短消息、第三組的二類、以及2.4K、4.8K、9.6K的非透明模式。TC35模塊主要由GSM基帶處理器、GSM射頻模塊、供電模塊(ASIC)、閃存、ZIF連接器、天線接口六局部組成。作為T(mén)C35的核心,基帶處理器主要處理GSM終端內(nèi)的語(yǔ)音、數(shù)據(jù)信號(hào),并涵蓋了蜂窩射頻設(shè)備中的所有的模擬和數(shù)字功能。在不需要額外硬件電路的前提下,可支持FR、HR和EFR語(yǔ)音信道編碼。設(shè)置以下AT指令,GSM模塊可以發(fā)送短消息:AT+CMGF=1回車(采用文本格式發(fā)送,如用PDU格式,那么AT+CMGF=0)AT+CMGS=“+8613xxxxxxxxx”回車>輸入短消息。Crtl+Z結(jié)束并發(fā)送。2.4存儲(chǔ)器模塊為了實(shí)現(xiàn)對(duì)密碼的存儲(chǔ),防止不法分子切斷電源造成密碼喪失,本系統(tǒng)采用了AT24C02存儲(chǔ)器對(duì)密碼進(jìn)行存儲(chǔ)。AT24C02是一個(gè)2K位串行CMOSE2PROM,內(nèi)部含有256個(gè)8位字節(jié)。內(nèi)部有一個(gè)16字節(jié)頁(yè)寫(xiě)緩沖器,該器件通過(guò)I2CAT24C02支持I2C總線數(shù)據(jù)傳送協(xié)議。I2AT24C02通過(guò)8個(gè)引腳實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)功能,其引腳圖如下列圖3所示。圖3AT24C02引腳圖2.5液晶鍵盤(pán)模塊液晶鍵盤(pán)模塊主要由4*4矩陣鍵盤(pán)和LCD1602液晶顯示器組成。4*4矩陣鍵盤(pán)主要提供用戶操作輸入功能,是實(shí)現(xiàn)人機(jī)通信的主要控制局部;LCD1602液晶顯示器主要負(fù)責(zé)顯示系統(tǒng)信息,協(xié)助用戶操作系統(tǒng)。下面分別簡(jiǎn)單介紹矩陣鍵盤(pán)和LCD1602液晶顯示器的性能和工作原理。2.5.1LCD1602是一種字符型液晶顯示模塊,是一種專門(mén)用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式的LCD。該液晶顯示器使用方便,功耗小,因此本系統(tǒng)采用LCD1602作為系統(tǒng)的顯示局部。LCD1602包括4種工作狀態(tài),通過(guò)MCU設(shè)置RS、RW和E值,可使液晶工作在不同的狀態(tài)。讀狀態(tài):輸入:RS=0,RW=1,E=1輸出:D0~D7=狀態(tài)字寫(xiě)指令:輸入:RS=0,RW=0,D0…D7=指令碼,E=高脈沖輸出:無(wú)讀數(shù)據(jù):輸入:RS=1,RW=1,E=1輸出:D0~D7=數(shù)據(jù)寫(xiě)數(shù)據(jù):輸入:RS=0,RW=1,E=1輸出:無(wú)2.5.24*4矩陣鍵盤(pán)在矩陣式鍵盤(pán)中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口〔如P1口〕就可以構(gòu)成4*4=16個(gè)按鍵,從而節(jié)省I/O資源,因此在本設(shè)計(jì)中采用4*4矩陣鍵盤(pán)。矩陣式鍵盤(pán)中,行、列線分別連接到按鍵開(kāi)關(guān)的兩端,行線通過(guò)上拉電阻接到+5V上。當(dāng)無(wú)鍵按下時(shí),行線處于高電平狀態(tài);當(dāng)有鍵按下時(shí),行、列線將導(dǎo)通,此時(shí),行線電平將由與此行線相連的列線電平?jīng)Q定。對(duì)于矩陣式鍵盤(pán),按鍵的位置由行號(hào)和列號(hào)唯一確定,因此可分別對(duì)行號(hào)和列號(hào)進(jìn)行二進(jìn)制編碼,然后將兩值合成一個(gè)字節(jié),高4位是行號(hào),低4位是列號(hào)。編碼相互轉(zhuǎn)換可通過(guò)計(jì)算或查表的方法實(shí)現(xiàn)。3.硬件設(shè)計(jì)3.1系統(tǒng)硬件電路設(shè)計(jì)系統(tǒng)硬件電路主要由單片機(jī)控制模塊電路、報(bào)警模塊電路、GSM模塊電路、存儲(chǔ)器模塊電路、液晶鍵盤(pán)模塊電路和傳感器模塊電路組成。系統(tǒng)硬件電路如圖4所示。圖4系統(tǒng)電路圖3.2單片機(jī)控制模塊電路設(shè)計(jì)單片機(jī)電路主要包括晶振電路、復(fù)位電路、P0口的上拉電阻等組成,電路如圖7所示。接口P3為單片機(jī)P0引腳的上拉電阻,接口P2為矩陣鍵盤(pán)的接入口。在晶振電路中,晶振頻率選為11.0592MHz,原因是使初值為整數(shù),從而產(chǎn)生精確的波特率,如圖5圖5單片機(jī)控制模塊電路圖3.3傳感器模塊電路設(shè)計(jì)在本設(shè)計(jì)中,為了提高傳感器的精確度和方便性,傳感器都通過(guò)引線連接到相應(yīng)的接口上,而非直接焊接到電路板上。由于傳感器的信號(hào)為弱電平信號(hào),容易造成單片機(jī)的誤操作。為保證系統(tǒng)具有較高的靈敏度,故參加由LM324組成的放大電路,電路如圖8所示。接口P6為煙霧傳感器的接口;接口P7為人體感應(yīng)傳感器的接口。通過(guò)分別調(diào)整可變電阻R2和R7,可以改變煙霧傳感器和人體感應(yīng)傳感器信號(hào)的放大倍數(shù)。由于單片機(jī)的中斷方式為低電平中斷,所以經(jīng)放大器放大后的信號(hào)要先接入反相器,才能再連接到單片機(jī)的中斷引腳上如圖6。圖6傳感器模塊電路圖3.4報(bào)警模塊電路設(shè)計(jì)由于單片機(jī)STC89C52提供的工作電流只有20mA,而蜂鳴器正常工作電流一般比擬大,片機(jī)的I/O口是無(wú)法直接驅(qū)動(dòng)的,因此需要一個(gè)外部的驅(qū)動(dòng)電路,提供正常工作所需要的電流。報(bào)警模塊電路圖如圖7所示,在該電路中,speaker連接在單片機(jī)引腳上,接口P4為蜂鳴器,晶體管工作在飽和狀態(tài),相當(dāng)于一個(gè)開(kāi)關(guān)。圖7報(bào)警模塊電路圖3.5GSM模塊接口電路設(shè)計(jì)GSM模塊的工作主要由單片機(jī)通過(guò)串口將AT指令發(fā)送到GSM模塊。串口電路主要由芯片MAX232進(jìn)行電平轉(zhuǎn)換,實(shí)現(xiàn)串口電壓與單片機(jī)電壓的轉(zhuǎn)換,確保雙方可以相互通信,電路如圖8所示。單片機(jī)的TXD引腳接到MAX232的T2IN引腳,單片機(jī)的RXD引腳接到MAX232的T2OUT引腳。圖8GSM模塊接口電路圖3.6存儲(chǔ)器模塊電路設(shè)計(jì)存儲(chǔ)器模塊電路主要由芯片AT24C02構(gòu)成,存儲(chǔ)器模塊電路圖如圖9所示。在本設(shè)計(jì)中,只有一個(gè)AT24C02被總線尋址這三個(gè)地址,故輸入腳A0A1A2可懸空或連接到Vss圖9存儲(chǔ)器模塊電路圖3.7液晶模塊電路設(shè)計(jì)液晶模塊電路如圖10所示??烧{(diào)電阻R1調(diào)節(jié)液晶偏壓,RS、RW和EN分別接到單片機(jī)的P0.5、P0.6、P0.7引腳,通過(guò)單片機(jī)按相應(yīng)時(shí)序編程控制液晶顯示。Data0~Data7為液晶數(shù)據(jù)位,接到單片機(jī)P2引腳。圖10液晶模塊電路圖3.8PCB板設(shè)計(jì)在本設(shè)計(jì)中,硬件局部采用PCB板制作。首先,利用ProtelDXP軟件繪制電路圖并生成PCB板,利用人工布局,對(duì)PCB圖進(jìn)行布線。如果使用自動(dòng)布線,很容易出現(xiàn)飛線或者布線錯(cuò)誤。所以在布線時(shí),應(yīng)該先使用自動(dòng)布線,然后再手動(dòng)布線,對(duì)局部線路進(jìn)行修改。在布線過(guò)程中,調(diào)整元器件的位置和方向,可以改善電路板布線,減少飛線。生成的PCB圖如圖11所示。圖11PCB板圖焊接時(shí),需要特別注意防止造成短路。相距很近的引線要用萬(wàn)用表測(cè)量是否存在通路,假設(shè)通過(guò)可能會(huì)造成短路等嚴(yán)重的后果。電器元件焊接中應(yīng)防止?fàn)C壞元件.4.軟件設(shè)計(jì)該系統(tǒng)主要實(shí)現(xiàn)的功能是:輸入密碼,密碼正確那么進(jìn)入系統(tǒng)。當(dāng)輸入密碼錯(cuò)誤次數(shù)小于3次時(shí),可以重新輸入。當(dāng)錯(cuò)誤次數(shù)到達(dá)3次,系統(tǒng)便進(jìn)入自鎖狀態(tài)并通過(guò)GSM發(fā)送短信通知用戶。成功進(jìn)入系統(tǒng)后可以選擇不同的功能:開(kāi)門(mén)、修改系統(tǒng)密碼和開(kāi)啟報(bào)警系統(tǒng)。選擇開(kāi)門(mén)功能。那么開(kāi)門(mén)的指示燈會(huì)亮。選擇修改系統(tǒng)密碼功能,那么按照系統(tǒng)指引輸入舊密碼、新密碼和重復(fù)新密碼。假設(shè)輸入的密碼都正確,那么修改密碼成功。假設(shè)輸入的密碼錯(cuò)誤,那么需要重新輸入,當(dāng)錯(cuò)誤次數(shù)到達(dá)3次時(shí),系統(tǒng)也會(huì)進(jìn)入自鎖狀態(tài)和通過(guò)GSM發(fā)送短信通知用戶。選擇開(kāi)啟報(bào)警功能,煙霧傳感器和紅外熱釋能傳感器便開(kāi)始工作,一旦檢測(cè)到信號(hào),報(bào)警音響并通過(guò)GSM發(fā)送短信通知用戶。假設(shè)需要關(guān)閉報(bào)警功能,只要按關(guān)閉報(bào)警的按鍵,并正確輸入密碼后,報(bào)警功能就會(huì)關(guān)閉。主程序流程圖如圖17所示。4.1傳感器模塊軟件設(shè)計(jì)在本系統(tǒng)中,LCD1602液晶顯示是通過(guò)調(diào)用voiddisplay(ucharpos,uchar*q)函數(shù)實(shí)現(xiàn)的,其流程圖如圖12所示。在voiddisplay(ucharpos,uchar*q)函數(shù)中,pos是寫(xiě)入的位置,q指向要寫(xiě)入的數(shù)據(jù)所在的數(shù)組。該函數(shù)主要調(diào)用lcd_wcmd(),lcd_pos()兩個(gè)函數(shù),先寫(xiě)顯示地址,后寫(xiě)顯示數(shù)據(jù)。單片機(jī)P2口接LCD1602的數(shù)據(jù)引腳,P0^5、P0^6、P0^7分別接LCD1602的RS、RW、EP引腳,通過(guò)單片機(jī)控制液晶顯示圖12流程圖在本系統(tǒng)中,鍵盤(pán)的軟件實(shí)現(xiàn)通過(guò)分時(shí)掃描、鍵盤(pán)編碼的形式來(lái)實(shí)現(xiàn),其流程圖如圖13所示。P1口低4位作為鍵盤(pán)的行,高4位作為鍵盤(pán)的列。P1口低4位先循環(huán)輸出0,單片機(jī)掃描P1口高4位。如果有鍵按下,P1口高4位不會(huì)全為1。如果讀取不到P1口的值,比方是干擾,那么不做鍵值處理,返回繼續(xù)循環(huán)下次。圖13主程序流程圖4.2GSM模塊軟件設(shè)計(jì)圖14短信發(fā)送流程圖在GSM模塊和單片機(jī)的串行通信中,選用定時(shí)器T1在工作方式2設(shè)定波特率為9600,其初值計(jì)算公式如下:為11.00592MHz,設(shè)波特率控制位SMOD=0,那么有故在程序設(shè)計(jì)時(shí),定時(shí)器初值設(shè)置為0xFD。4.3存儲(chǔ)器模塊軟件設(shè)計(jì)在本系統(tǒng)中,AT24C02的存儲(chǔ)功能主要是通過(guò)I2C總線來(lái)實(shí)現(xiàn)串行讀寫(xiě),其流程圖如圖15所示。I2C總線在寫(xiě)入和讀取一個(gè)8位二進(jìn)制數(shù)時(shí),總是高位在前低位在后。在讀函數(shù)_24C02Read(unsignedcharl_address)中,先向I2C總線發(fā)出讀取24C02的寫(xiě)地址,在完成I2C串口協(xié)議后,寫(xiě)入24C02的讀地址,再讀取存儲(chǔ)器對(duì)應(yīng)位置的數(shù)據(jù)。在寫(xiě)函數(shù)_24C02Write(unsignedchardat,unsignedcharl_address)中,先向總線發(fā)出寫(xiě)24C02的地址,在完成I2C串口協(xié)議后,寫(xiě)入24C02的寫(xiě)地址,然后寫(xiě)入數(shù)據(jù)。程序見(jiàn)附錄。圖15AT24C02讀寫(xiě)流程圖4.4液晶鍵盤(pán)模塊軟件設(shè)計(jì)在本系統(tǒng)中,LCD1602液晶顯示是通過(guò)調(diào)用voiddisplay(ucharpos,uchar*q)函數(shù)實(shí)現(xiàn)的,其流程圖如圖16所示。在voiddisplay(ucharpos,uchar*q)函數(shù)中,pos是寫(xiě)入的位置,q指向要寫(xiě)入的數(shù)據(jù)所在的數(shù)組。該函數(shù)主要調(diào)用lcd_wcmd(),lcd_pos()兩個(gè)函數(shù),先寫(xiě)顯示地址,后寫(xiě)顯示數(shù)據(jù)。單片機(jī)P2口接LCD1602的數(shù)據(jù)引腳,P0^5、P0^6、P0^7分別接LCD1602的RS、RW、EP引腳,通過(guò)單片機(jī)控制液晶顯示。程序見(jiàn)附錄。圖16LCD1602顯示流程圖在本系統(tǒng)中,鍵盤(pán)的軟件實(shí)現(xiàn)通過(guò)分時(shí)掃描、鍵盤(pán)編碼的形式來(lái)實(shí)現(xiàn),其流程圖如圖17所示。P1口低4位作為鍵盤(pán)的行,高4位作為鍵盤(pán)的列。P1口低4位先循環(huán)輸出0,單片機(jī)掃描P1口高4位。如果有鍵按下,P1口高4位不會(huì)全為1。讀取P1口的值,查表獲得相應(yīng)的16進(jìn)制值存放l_key變量中,退出循環(huán)。如果讀取不到P1口的值,比方是干擾,那么不做鍵值處理,返回繼續(xù)循環(huán)下次。程序見(jiàn)附錄。圖17鍵盤(pán)掃描流程圖4.5密碼鎖軟件設(shè)計(jì)在本系統(tǒng)中,密碼鎖的軟件實(shí)現(xiàn)是通過(guò)比擬輸入密碼值和實(shí)際密碼值是否一樣來(lái)進(jìn)行的,其流程圖如圖18所示。如果密碼正確,那么進(jìn)入下一步操作。如果密碼錯(cuò)誤,那么需要重新輸入密碼,直到密碼正確為止。每輸錯(cuò)一次密碼,錯(cuò)誤次數(shù)記錄變量times就會(huì)加1。一旦times增加到3,那么調(diào)用GSM程序發(fā)短信,并且系統(tǒng)進(jìn)入死鎖狀態(tài)。程序見(jiàn)附錄。圖18密碼鎖設(shè)置流程圖5.調(diào)試與結(jié)果電路板焊接成功后就可以進(jìn)行調(diào)試,在調(diào)試之前,應(yīng)先將已編好的程序下載到芯片STC89C52。編寫(xiě)好程序后,將文件加載到工程中,然后“build”,生成“*.hex”文件,將AT89S52芯片插到下載開(kāi)發(fā)板中,然后翻開(kāi)下載軟件,通過(guò)它導(dǎo)入“*.hex”運(yùn)行編譯,載入到芯片即可。5.1密碼鎖調(diào)試系統(tǒng)上電后,液晶顯示“Pleaseinputthepassword:”字樣,如圖24所示。2秒后,系統(tǒng)進(jìn)入輸入狀態(tài),此時(shí)可通過(guò)鍵盤(pán)輸入6位密碼。在輸入狀態(tài),當(dāng)輸入錯(cuò)誤時(shí),可通過(guò)鍵盤(pán)上的“Delect”鍵刪除錯(cuò)誤位。當(dāng)輸入完成以后,按“Enter”鍵確認(rèn)輸入。假設(shè)輸入的密碼正確,那么進(jìn)入操作系統(tǒng),液晶顯示“Pleasepressthefunctionkey”字樣,此時(shí)可通過(guò)按不同的功能鍵選擇不同的功能。假設(shè)輸入的密碼錯(cuò)誤,蜂鳴器長(zhǎng)鳴同時(shí)液晶顯示“Error!”,如圖26所示。假設(shè)錯(cuò)誤次數(shù)小于3次,2秒后可重新輸入密碼。假設(shè)錯(cuò)誤次數(shù)到達(dá)三次,系統(tǒng)進(jìn)入死鎖狀態(tài),液晶顯示“Tryittomorrow!”,并通過(guò)GSM模塊發(fā)送短信通知用戶,5.2開(kāi)門(mén)功能調(diào)試在進(jìn)入操作系統(tǒng)后,按“Open”鍵進(jìn)入開(kāi)門(mén)功能。此時(shí),開(kāi)門(mén)燈亮,液晶顯示“Openthedoor.”。5.3修改密碼功能調(diào)試在進(jìn)入操作系統(tǒng)后,按“Change”鍵進(jìn)入修改密碼功能。按照液晶指示“Inputoldpassword”,輸入舊密碼;然后提示“Inputnewpassword”,輸入新密碼;最后在提示“Inputitagain!”后重復(fù)輸入新密碼。假設(shè)輸入的密碼都正確,那么修改密碼成功,顯示“Establishessuccessful!”,如圖28所示。假設(shè)密碼有一次錯(cuò)誤,那么需要從輸入舊密碼開(kāi)始重新操作,當(dāng)錯(cuò)誤次數(shù)到達(dá)3次時(shí),系統(tǒng)也會(huì)進(jìn)入死鎖狀態(tài)。5.4報(bào)警功能調(diào)試在進(jìn)入操作系統(tǒng)后,按“Alarm”鍵進(jìn)入開(kāi)啟報(bào)警功能,此時(shí)液晶顯示“Systemstartup.”。當(dāng)煙霧傳感器檢測(cè)到煙霧時(shí),啟動(dòng)中斷程序,蜂鳴器報(bào)警,液晶顯示“Alarm!”和“Onfire!”,并通過(guò)GSM發(fā)送短信通知用戶,當(dāng)紅外熱釋能傳感器檢測(cè)到人體時(shí),啟動(dòng)中斷程序,蜂鳴器報(bào)警,液晶顯示“Alarm!”和“Steal!”,并通過(guò)GSM發(fā)送短信通知用戶。5.5調(diào)試存在問(wèn)題整個(gè)設(shè)計(jì)的難點(diǎn)在于調(diào)試方面,因此在調(diào)試中也遇到了很多問(wèn)題,但經(jīng)過(guò)查看資料和細(xì)心分析后,最終都能順利解決。下面總結(jié)以下調(diào)試過(guò)程中出現(xiàn)的問(wèn)題及解決方法。在制板過(guò)程中,難免會(huì)出現(xiàn)各種過(guò)失而導(dǎo)致電路短路或斷路等現(xiàn)象。為防止此類情況的發(fā)生影響調(diào)試結(jié)果,在調(diào)試前,先用萬(wàn)用表二極管檔將電路板的線路都測(cè)一下,確保電路正常。調(diào)試過(guò)程首先驗(yàn)證LCD1602能否正常運(yùn)行。先編寫(xiě)簡(jiǎn)單的LCD1602顯示程序,然后通過(guò)串口下載HEX格式文件到單片機(jī)。上電后,液晶只亮但沒(méi)有顯示,初步疑心是RS、RW和E控制位設(shè)置錯(cuò)誤。但通過(guò)萬(wàn)用表測(cè)試控制引腳電平跳變情況,發(fā)現(xiàn)正常,故排除該可能。最后經(jīng)過(guò)反復(fù)檢查,發(fā)現(xiàn)原來(lái)是因?yàn)閱纹瑱C(jī)P2引腳為倒序排列,在畫(huà)板圖時(shí)沒(méi)有留意,導(dǎo)致接錯(cuò)數(shù)據(jù)引腳。采用飛線修改后,LCD1602能正常顯示。在設(shè)計(jì)程序時(shí),考慮到存儲(chǔ)器AT24C02全新時(shí)存儲(chǔ)內(nèi)容為0,此時(shí)才寫(xiě)入初始化密碼。但經(jīng)過(guò)驗(yàn)證,該設(shè)想不實(shí)際,故直接寫(xiě)入初始化密碼。在設(shè)計(jì)功能選擇時(shí),采用按鍵獲得鍵值,再根據(jù)鍵值選擇不同功能函數(shù)的方式來(lái)實(shí)現(xiàn)的。在調(diào)試時(shí),出現(xiàn)第一次按鍵有反響,之后都沒(méi)有反響的現(xiàn)象。經(jīng)過(guò)仔細(xì)分析后得知,在每次按鍵后,程序跳入不同功能函數(shù)時(shí)要將鍵值重設(shè)初值0xFF,否那么會(huì)進(jìn)入死循環(huán)。調(diào)試過(guò)程遇到的最大難題是中斷問(wèn)題。剛開(kāi)始時(shí),傳感器沒(méi)有檢測(cè)到信號(hào),但單片機(jī)卻運(yùn)行中斷程序。通過(guò)萬(wàn)用表測(cè)試中斷引腳,發(fā)現(xiàn)電平正常。試過(guò)更換單片機(jī)芯片和將中斷引腳接地,問(wèn)題依然存在。最后使用示波器測(cè)試中斷引腳,發(fā)現(xiàn)存在干擾信號(hào),使得單片機(jī)出現(xiàn)誤中斷現(xiàn)象。故在程序中參加延時(shí)檢測(cè)中斷信號(hào)局部后,干擾信號(hào)被排除掉,中斷正常。編程時(shí)要注意標(biāo)準(zhǔn)問(wèn)題。編程過(guò)程中要注意加注釋或分割線,否那么,在程序過(guò)長(zhǎng)時(shí)容易變得很亂,不便于查找或更改。程序的結(jié)構(gòu)要設(shè)計(jì)的合理,防止上下亂調(diào)用的現(xiàn)象,這樣會(huì)使程序更加清晰化。編程前要畫(huà)流程圖,這樣會(huì)使思路清晰。此外,使用循環(huán)結(jié)構(gòu)體時(shí)要注意有退出循環(huán)體的出口,防止程序進(jìn)入死循環(huán)。6.總結(jié)該設(shè)計(jì)在一定程度上解決了傳統(tǒng)機(jī)械式防盜的弊端,利用高科技將防盜報(bào)警智能化、自動(dòng)化,可以減少和防止戶主的損失。由于該系統(tǒng)主要利用現(xiàn)代移動(dòng)通信網(wǎng)絡(luò)作為承載,不需要考慮布線等因素,減少了環(huán)境因素對(duì)系統(tǒng)的影響,提高了該系統(tǒng)的可移動(dòng)性。由于時(shí)間的關(guān)系和考慮到元器件的價(jià)格等因素,該設(shè)計(jì)還存在一些缺乏的地方。例如,該設(shè)計(jì)存在不夠人性化的地方,可通過(guò)添加實(shí)時(shí)時(shí)鐘芯片增加時(shí)間功能,并在此根底上參加自動(dòng)開(kāi)啟和關(guān)閉系統(tǒng)的功能等等。除此以外,還可以通過(guò)增加斷電保護(hù)電路增強(qiáng)系統(tǒng)的平安性。在設(shè)計(jì)的這段時(shí)間里,我對(duì)這四年學(xué)習(xí)到的知識(shí)有了一個(gè)全面的認(rèn)識(shí),也因此學(xué)到了很多東西。這一次的實(shí)訓(xùn)設(shè)計(jì),從查找資料、方案確定、電路設(shè)計(jì)到PCB制作和調(diào)試,整個(gè)過(guò)程都是我自己親自去完成。在整個(gè)設(shè)計(jì)期間,我遇到了很多問(wèn)題,但經(jīng)過(guò)仔細(xì)的分析和其他同學(xué)的幫助后,最終都把問(wèn)題解決,我也從中學(xué)會(huì)了解決問(wèn)題的方法。7.參考文獻(xiàn)[1]祁偉,楊事.單片機(jī)C5l語(yǔ)言教程與實(shí)驗(yàn)[M].北京:北京航空航天大學(xué)出版社,2006.[2]林桂花.基于GSM模塊的數(shù)據(jù)傳輸及實(shí)時(shí)控制系統(tǒng)[J].計(jì)算機(jī)與現(xiàn)代化,2006(2):22~24.[3]李曉輝,等.基于GSM技術(shù)的汽車防盜系統(tǒng)的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2008(3):l9l~193.[4]劉字靜.基于GSM的遠(yuǎn)程監(jiān)控系統(tǒng)數(shù)據(jù)傳輸[J].科學(xué)技術(shù)與工程,2007(5):10-14.[5]師俊宏.智能家居中的平安防范系統(tǒng)[J].上海建設(shè)科技,2006,(05).[6]游燕,隨善坤.一種智能家居安防系統(tǒng)的設(shè)計(jì)[J].中國(guó)科技信息,2005,(12).[7]陳剛,李葉紫,胡輝.基于GSM的車輛防盜搶系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電氣自動(dòng)化,2005,(06)[8]丁元杰.單片微機(jī)原理及應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2001:56-69附錄:#include<reg52.h>#include<math.h>#include<stdio.h>#include"key.h"#include"lcd1602.h"#include"gsm.h"#include"at24c02.h"sbitdoor=P0^0; //定義P0^0為門(mén)鎖控制標(biāo)志位sbitspeaker=P0^1;//定義P0^1為喇叭控制標(biāo)志位sbitalarm=P0^3;//定義P0^3為人體熱釋能檢測(cè)標(biāo)志位sbitint1=P3^3;sbitint0=P3^2;ucharpswd[6]={0}; //存儲(chǔ)輸入鍵值ucharpswd_flash[6]={0}; //存儲(chǔ)密碼ucharpswd_new[6]={0}; //暫存新密碼ucharcorrect_old=0; //檢測(cè)舊密碼標(biāo)志位ucharcorrect_new=0; //檢測(cè)新密碼標(biāo)志位ucharcorrect_old_change=0; //檢測(cè)修改舊密碼標(biāo)志位uchartimes;//每次輸入密碼錯(cuò)誤次數(shù)uchartest;//存儲(chǔ)器檢測(cè)inti=0; //密碼位bitchange=0; //修改密碼控制標(biāo)志位bitset=0; //設(shè)定控制標(biāo)志位bitdelect; //刪除控制吧標(biāo)志位bitok; //確定控制標(biāo)志位bitcancle; //取消控制標(biāo)志位void

send_message(void)//發(fā)送彩信函數(shù)

voidinput(void); //輸入函數(shù)voidpswd_error(void); //密碼錯(cuò)誤函數(shù)voidonfire(void); //火災(zāi)報(bào)警函數(shù)voidsteal(void); //盜竊報(bào)警函數(shù)voidfunction(void); //功能選擇函數(shù)voidchange_f(void); //修改密碼函數(shù)voidalarm_f(void); //報(bào)警功能函數(shù)#include<STC_NEW_8051.h>#include<string.h>#include<intrins.h>#include<UART1.h>#include<UART2.h>#include<Delay_ms.h>#include<Init_Timer0.h>#defineBuf1_Max500 //串口1緩存長(zhǎng)度sbitYellow_LED=P1^5; //LED1黃色指示燈sbitGreen_LED=P1^6; //LED2綠色指示燈sbitRed_LED=P1^7; //LED3紅色指示燈sbitIGT =P2^5; //啟動(dòng)TC35I信號(hào)sbitK1=0xC1; //繼電器unsignedcharBuf_First_Serial[Buf1_Max];unsignedcharrunxun_ser1=0,Flag_Buf1_Rec=0;unsignedintStart_weizi,End_weizi;unsignedintFirst_Int=0,Second_Int=0;unsignedcharTimer0_Start=0;unsignedintTimes=0,shijian=0,Count_time=0;//發(fā)送換行回車函數(shù)voidSend_LR(void){ Send_Hex(0x0D); Send_Hex(0x0A); }//去除串口1緩存數(shù)據(jù)函數(shù)voidCLR_Buf1(void){ unsignedintk;for(k=0;k<Buf1_Max;k++)//將緩存內(nèi)容清零{ Buf_First_Serial[k]=0x30; }First_Int=0;//接收字符串的起始存儲(chǔ)位置}//判斷緩存中是否含有指定的字符串函數(shù)unsignedcharHand(unsignedchar*a){if(strstr(Buf_First_Serial,a)!=NULL) return1; else return0;}//定位字串"+32"符位置voidFind_dw_TEXT(void){ unsignedintk; for(k=0;k<Buf1_Max;k++) { if(Buf_First_Serial[k]=='+'&&Buf_First_Serial[k+1]=='3'&&Buf_First_Serial[k+2]=='2') { Start_weizi=k+6; break; } } for(k=0;k<Buf1_Max;k++) { if(Buf_First_Serial[k]=='O'&&Buf_First_Serial[k+1]=='K') { End_weizi=k-5; break; } }}//送命令函數(shù)//不允許出錯(cuò)voidSecond_AT_Command(unsignedchar*b,unsignedintwait_time){ unsignedchari; unsignedchar*c; c=b; //保存字符串地址到c CLR_Buf1();i=0; while(i==0) { if(!Hand("OK")) { if(Timer0_Start==0) { b=c; //將字符串地址給b for(b;*b!='\0';b++) { Send_Hex(*b); } Send_LR(); Times=0; shijian=wait_time; Timer0_Start=1; }} else { i=1; Timer0_Start=0; } } CLR_Buf1();}//發(fā)送命令函數(shù)//允許出錯(cuò)voidSecond_AT_ERROR(unsignedchar*b,unsignedintwait_time){ unsignedchari; unsignedchar*c; c=b; //保存字符串地址到c CLR_Buf1();i=0; while(i==0) { if((!Hand("OK"))&&(!Hand("ERROR"))) { if(Timer0_Start==0) { b=c; //將字符串地址給b for(b;*b!='\0';b++) { Send_Hex(*b); } Send_LR(); Times=0; shijian=wait_time; Timer0_Start=1; }} else { i=1; Timer0_Start=0; } } CLR_Buf1();}voidSet_Text_Mode(void){ Second_AT_Command("ATE0",3); //取消回顯 Second_AT_Command("AT+CNMI=2,1",3); //新短信到來(lái)時(shí)提示 Second_AT_Command("AT+CMGF=1",3); //PDU模式 Second_AT_Command("AT+CSDH=0",3); //TEXT顯示模式 //Second_AT_Command("AT+CSCS=\"GSM\"",3); //使用GSM字符集 //Second_AT_Command("AT+CSMP=17,167,0,8",3); //設(shè)置PDU模式參數(shù) Second_AT_Command("AT+CPMS=\"SM\",\"SM\",\"SM\"",3); //所有操作都在MT(模塊終端)中進(jìn)行; Second_AT_ERROR("AT+CMGD=1",10); }voidCheck_Message_rec(void){ unsignedintk; if(strstr(Buf_First_Serial,"+CMTI")!=NULL) //假設(shè)緩存字符串中含有"+CMTI"就表示有新的短信 { Delay_ms(500); CLR_Buf1(); //while((!Hand("OK"))&&(!Hand("ERROR"))) //{ //CLR_Buf1(); Send_ASCII("AT+CMGR=1"); //發(fā)送讀取信息指令 Send_LR(); Delay_ms(10000); //} Find_dw_TEXT(); for(k=Start_weizi;k<=End_weizi;k++) { Second_Serial_Port_Send(Buf_First_Serial[k]); } if(strstr(Buf_First_Serial,"onled1")!=NULL) { Yellow_LED=0; } elseif(strstr(Buf_First_Serial,"offled1")!=NULL) { Yellow_LED=1; } elseif(strstr(Buf_First_Serial,"onled3")!=NULL) { Red_LED=0; }elseif(strstr(Buf_First_Serial,"offled3")!=NULL) { Red_LED=1; } elseif(strstr(Buf_First_Serial,"onrelay")!=NULL) { K1=1; } elseif(strstr(Buf_First_Serial,"offrelay")!=NULL) { K1=0; } //Second_AT_Command("AT+CMGD=1",10); Second_AT_ERROR("AT+CMGD=1",10); CLR_Buf1(); }}voidWait_CREG(void){ unsignedchari; unsignedintk; i=0; CLR_Buf1();while(i==0) { CLR_Buf1(); Send_ASCII("AT+CREG?"); Send_LR(); Delay_ms(5000); for(k=0;k<Buf1_Max;k++) { if(Buf_First_Serial[k]==':') { if((Buf_First_Serial[k+4]=='1')||(Buf_First_Serial[k+4]=='5')) { i=1; break; } } } }}voidmain(void){ P4M1=0x00; //P40-P43設(shè)置為推挽輸出 P4M0=0x0f; P4=0x00; Delay_ms(100); IGT=0; Delay_ms(5000); IGT=1; Timer0_init(); //定時(shí)器0初始化Serial_Init(); //第一個(gè)串口初始化 Second_Serial_Port_Initial(); Wait_CREG(); Set_Text_Mode(); Green_LED=0; while(1) { Check_Message_rec(); Delay_ms(1000); Green_LED=0; Delay_ms(1000); Green_LED=1; }}//定時(shí)器0中斷處理函數(shù)voidTimer0(void)interrupt1{ TR0=0; //停止定時(shí)器0 Count_time++; if(Count_time>=60000) { Count_time=0; } if(Timer0_Start==1) Times++; if(Times>(40*shijian)) { Timer0_Start=0; Times=0; } TH0=0x4C; //設(shè)置溢出一次為50ms TL0=0x00; TR0=1; //開(kāi)啟定時(shí)器0}//串口1中斷處理函數(shù)voidSerial_Int(void)interrupt4{ ES=0; //關(guān)串口中斷,防止中斷嵌套 if(TI) //如果是發(fā)送中斷,那么不做任何處理 { TI=0; //去除發(fā)送中斷標(biāo)志位 } if(RI) //如果是接送中斷,那么進(jìn)行處理 { RI=0; //去除接收中斷標(biāo)志位 Buf_First_Serial[First_Int]=SBUF; //將接收到的字符串存到緩存中 First_Int++; //緩存指針向后移動(dòng) if(First_Int>Buf1_Max) //如果緩存滿,將緩存指針指向緩存的首地址 { First_Int=0; } } ES=1; //開(kāi)啟串口中斷}/*****/voidinput(void){ intk=0; lcd_wcmd(0x01);//清屏while(k<6) {ReadKey();if(l_key<=9) //輸入數(shù)字0-9 {pswd[k]=l_key+0x30; display(0x00+k,"*"); l_key=0xff; k++; } if(l_key==12) //刪除 {delect=1; k--; display(0x00+k,""); l_key=0xff; } } while(k>=6) { ReadKey(); if(l_key==14) //確定 { ok=1; l_key=0xff; break; } }}voidpswd_error(void){codeucharsms[]={"Alarm!someonehasinputedwrongpasswordthreetimes."};intt,j;speaker=0;t=times;lcd_wcmd(0x01);display(0x00,"Error!");longdelay(10);if(t>=3) //錯(cuò)誤輸入3次后自鎖 {lcd_wcmd(0x01);display(0x00,"Tryittomorrow!"); gsm(sms); for(j=0;j>=0;j++) //自鎖 for(j=0;j>=0;j++);}return;}voidfunction(void){display(0x00,"Pleasepressthe");display(0x40,"functionkey");while(1){ReadKey();if(l_key==10)//開(kāi)門(mén) { lcd_wcmd(0x01); display(0x00,"Openthedoor."); door=0; longdelay(10); door=1; l_key=0xff; break; }elseif(l_key==11)//修改密碼 { l_key=0xff; change_f(); break; }elseif(l_key==13)//啟動(dòng)防盜系統(tǒng) { alarm_f(); break; }}}voidchange_f(void){lcd_wcmd(0x01);display(0x00,"Inputoldpasswo"); display(0x40,"rd:"); longdelay(10); input(); for(i=0,correct_old_change=0;i<6;i++) correct_old_change=pswd[i]-pswd_flash[i]+correct_old_change; if(correct_old_change==0) //舊密碼正確,輸入新密碼 { speaker=1; times=0; lcd_wcmd(0x01); display(0x00,"Inputnewpasswo"); display(0x40,"rd:"); longdelay(10); input(); for(i=0;i<=6;i++) pswd_new[i]=pswd[i]; lcd_wcmd(0x01); display(0x00,"Inputitagain!"); longdelay(10);input(); for(i=0,correct_new=0;i<6;i++) correct_new=pswd[i]-pswd_new[i]+correct_new; if(correct_new==0) //新密碼正確,修改密碼成功 { speaker=1; times=0; for(i=0;i<6;i++)_24C02Write(pswd_new[i],0x00+i);//將新的六位密碼寫(xiě)入E2PRAM,AT24C02 lcd_wcmd(0x01); display(0x00,"Establishessucc"); display(0x40,"essful!"); longdelay(10); change=0; } else //新密碼不正確 { times++; pswd_error(); } } else //舊密碼不正確 { times++; pswd_error(); } }voidalarm_f(void){l_key=0xff;lcd_wcmd(0x01);display(0x00,"Systemstartup.");longdelay(10);EX0=1;EX1=1;EA=1;while(1) { ReadKey(); if(l_key==15) //關(guān)閉防盜系統(tǒng) { lcd_wcmd(0x01); display(0x00,"Shutdownthesys"); display(0x40,"tem."); longdelay(10); EA=0; break; } }}voidmain(){InitCom();int1=0;//while(1);IT0=1;EX0=1;IT1=1;EX1=1;EA=0;times=0; //錯(cuò)誤次數(shù)清零_24C02Write('5',0x05); //寫(xiě)入初始密碼012345_24C02Write('4',0x04);_24C02Write('3',0x03);_24C02Write('2',0x02);_24C02Write('1',0x01);_24C02Write('0',0x00);while(1){lcd_init(); //lcd初始化display(0x00,"Pleaseinputthe");display(0x40,"password:");longdelay(10); for(i=0;i<6;i++)pswd_flash[i]=_24C02Read(0x00+i); delay(200);input(); for(i=0,correct_old=0;i<6;i++) //輸入密碼與實(shí)際密碼比擬correct_old=pswd[i]-pswd_flash[i]+correct_old; if(correct_old==0)//密碼正確 { speaker=1; times=0; lcd_wcmd(0x01); display(0x00,"Correct!"); longdelay(10); lcd_wcmd(0x01); while(1) { if(l_key==15) { l_key=0xff; break; } function(); } } else//密碼不正確 { times++; pswd_error(); }}}voidsteal()interrupt2{codeucharsms[]={"Alarm!Someonehasinterruptyourhouse!"};delay(200);if(int1==0){ speaker=0; lcd_wcmd(0x01); display(0x00,"Alarm!"); display(0x40,"Steal!"); gsm(sms); EX1=0;}}#define_at24c02_H#include<reg52.h>#include<intrins.h>#include"lcd1602.h"#define W24C02 0xA0 //存儲(chǔ)器的寫(xiě)地址#defineR24C02 0xA1 //存儲(chǔ)器的讀地址sbitSDA=P3^7; //AT24C02串行數(shù)據(jù) sbitSCL=P3^6; //AT24C02串行時(shí)鐘 unsignedchar_24C02Read(unsignedcharl_address);//24C02讀函數(shù)void_24C02Write(unsignedchardat,unsignedcharl_address);//24C02寫(xiě)函數(shù)voidI2C_write(unsignedchartmp)//I2C寫(xiě)入一個(gè)8位二進(jìn)制數(shù),高位在前低位在后{ unsignedchari; for(i=0;i<8;i++){ SCL=0; _nop_(); _nop_(); _nop_(); SDA=(bit)(tmp&0x80); tmp<<=1; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL=1; _nop_();_nop_();_nop_();_nop_();_nop_(); } SCL=0;}unsignedcharI2C_read(void)////I2C讀取一個(gè)8位二進(jìn)制數(shù),也是高位在前低位在后{ unsignedchari,tmp; tmp=0; for(i=0;i<8;i++){ SCL=0; _nop_(); _nop_(); _nop_(); //參加空指令增加穩(wěn)定性,這關(guān)系到頻率問(wèn)題 SDA=1; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL=1; _nop_();_nop_();_nop_();_nop_();_nop_(); tmp<<=1; if(SDA==1) tmp++; } SCL=0; returntmp; }voidI2C_ACK(bittmp) //根據(jù)tmp的1、0來(lái)決定應(yīng)答信號(hào){ SDA=tmp; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL=1; _nop_();_nop_();_nop_();_nop_();_nop_(); SCL=0; }voidI2C_start(void) //看看I2C開(kāi)始的波形,再對(duì)應(yīng)SDA、SCL的輸出{ SDA=1; _nop_(); SCL=1; _nop_(); SDA=0; _nop_(); SCL=0; _nop_();}voidI2C_stop(void) //I2C結(jié)束{ SDA=0; _nop_(); SCL=1; _nop_(); SDA=1; _nop_(); SCL=0; _nop_();}unsignedchar_24C02Read(unsignedcharl_address){ unsignedchartmp=0; I2C_start(); //I2C讀數(shù)據(jù)的開(kāi)始,到下面的結(jié)束是讀一地址的整個(gè)過(guò)程, I2C_write(W24C02); //向I2C總線發(fā)出讀取24C02的地址 I2C_ACK(0); //下面就得你們自己結(jié)合I2C串口協(xié)議進(jìn)行,先看看24C02數(shù)據(jù)手冊(cè)是怎么講I2C協(xié)議的 I2C_write(l_address);//先寫(xiě)入地址, I2C_ACK(1); I2C_stop(); I2C_start(); //再開(kāi)始讀取數(shù)據(jù) I2C_write(R24C02); I2C_ACK(0); tmp=I2C_read(); I2C_ACK(1); I2C_stop(); //讀取一個(gè)地址的數(shù)據(jù)結(jié)束 delay(20); returntmp;}void_24C02Write(unsignedchardat,unsignedcharl_address){ I2C_start(); //下面是寫(xiě)一地址數(shù)據(jù)的過(guò)程 I2C_write(W24C02); //先向總線發(fā)出寫(xiě)24C02的地址 I2C_ACK(0); I2C_write(l_address); //寫(xiě)入地址 I2C_ACK(0); I2C_write(dat); //然后寫(xiě)入數(shù)據(jù) I2C_ACK(1); I2C_stop(); delay(20);}#endif#define_gsm_H#include<reg52.h>#include"lcd1602.h"ucharsms1[]={"AT+CMGF=1\r"};ucharsms3=0x1A;voidInitCom(void);voidgsm(uchar*sms);//初始化串行口voidInitCom(void){ucharTHTL;THTL=0xFD;ET1=0;SCON=0x40;//串口方式1,TMOD=0x20;//定時(shí)器1定時(shí)方式2TH1=THTL;TL1=THTL;TI=0;TR1=1;//啟動(dòng)定時(shí)器} voidgsm(uchar*sms){ uchari=0,j=0,k=0; //InitCom(); longdelay(10); while(sms1[i]!='\0') {SBUF=sms1[i]; while(!TI); TI=0; i++; } longdelay(10); while(sms2[j]!='\0') { SBUF=sms2[j];

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論