基于單片機(jī)控制的無線防盜系統(tǒng)(附原理圖及源代碼)_第1頁
基于單片機(jī)控制的無線防盜系統(tǒng)(附原理圖及源代碼)_第2頁
基于單片機(jī)控制的無線防盜系統(tǒng)(附原理圖及源代碼)_第3頁
基于單片機(jī)控制的無線防盜系統(tǒng)(附原理圖及源代碼)_第4頁
基于單片機(jī)控制的無線防盜系統(tǒng)(附原理圖及源代碼)_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGE37基于單片機(jī)控制的無線防盜系統(tǒng)摘要本設(shè)計主要目的是建立一個整體的家庭及倉庫等重要物品放置地的安防監(jiān)控系統(tǒng),主要功能是實時監(jiān)測一定區(qū)域的人體接近狀況,并把當(dāng)前監(jiān)測狀態(tài)無線傳輸?shù)骄嚯x在20-30M以內(nèi)的安裝主機(jī)的房間中,實現(xiàn)無線的監(jiān)控,降低了小區(qū)或者倉庫管理員的工作強(qiáng)度,借此希望小區(qū)或工廠的貴重物品安全問題得到有效解決。系統(tǒng)主要由二個模塊組成:一個人體接近動作模塊,主要負(fù)責(zé)實時監(jiān)控人體接近與否的狀態(tài),若人體接近則傳感器立即向CPU發(fā)送標(biāo)志數(shù)據(jù),CPU接收到傳感器數(shù)據(jù)后馬上響應(yīng),向模塊上的無線發(fā)送模塊發(fā)送數(shù)據(jù),無線發(fā)送模塊接收到數(shù)據(jù)后以高速的方式向主機(jī)模塊上的主機(jī)發(fā)送數(shù)據(jù),實現(xiàn)實時監(jiān)測人體接近與否的功能;一個主機(jī)模塊,主要負(fù)責(zé)接收從機(jī)監(jiān)測模塊發(fā)送來的數(shù)據(jù)并處理送至液晶顯示器顯示以及當(dāng)監(jiān)測模塊達(dá)到預(yù)設(shè)效果產(chǎn)生報警的功能,作為實時監(jiān)控系統(tǒng)。為了豐富系統(tǒng)的功能和有效的利用系統(tǒng)資源,在主機(jī)模塊還加入了一個掉電不丟失的精確時鐘顯示以及用紅外遙控控制時間修改和報警解除的功能??紤]到軟件的執(zhí)行效果和系統(tǒng)整體的穩(wěn)定性,本設(shè)計中的所有軟件均在整體和局部的事物電路上調(diào)試成功。因此,本次設(shè)計的方案具有可行性。[Ⅰ]關(guān)鍵字:單片機(jī);無線傳輸;人體接近;紅外遙控[Ⅱ]目錄摘要Ⅰ關(guān)鍵字Ⅱ前言21.功能概述32.總體方案42.1總體分析42.2方案框圖43.系統(tǒng)構(gòu)成53.1人體接近模塊53.1.1STC12C5410AD單片機(jī)介紹53.1.2人體感應(yīng)模塊63.1.3NRF24L01無線通信模塊83.2主機(jī)模塊123.2.11602液晶顯示器123.2.2STC89C52RC+單片機(jī)介紹143.2.3紅外接收頭及遙控153.2.4DS12C887174.軟件設(shè)計194.1人體接近動作模塊流程圖194.2主機(jī)模塊流程圖19結(jié)論20致謝20參考文獻(xiàn)21附錄221.程序代碼221.1人體接近模塊C代碼221.2主機(jī)模塊C代碼262.原理圖和實物圖46前言隨著現(xiàn)代電子技術(shù)計算通信技術(shù)的迅速發(fā)展,有關(guān)防盜報警方面的產(chǎn)品愈來愈豐富。尤其紅外技術(shù)得到了迅猛的發(fā)展,紅外探測技術(shù)已滲透到國民經(jīng)濟(jì)的各行各業(yè)和人們生活的方方面面。近年來,隨著改革開放的深入發(fā)展,電子電器的飛速發(fā)展,人民的生活水平有了很大提高。各種高檔家電產(chǎn)品和貴重物品為許多家庭所擁有。然而一些不法分子也是越來越多。這點就是看到了大部分人防盜意識還不夠強(qiáng).造成偷盜現(xiàn)象屢見不鮮。因此,越來越多的居民家庭對財產(chǎn)安全問題十分擔(dān)憂。防盜報警系統(tǒng)是在探測到防范現(xiàn)場有入侵者時能及時發(fā)出報警信號的專用電子系統(tǒng),一般由探測器(報警器)、傳輸系統(tǒng)和報警控制器組成。探測器檢測到意外情況就產(chǎn)生報警信號,通過傳輸系統(tǒng)送入報警控制器發(fā)出聲、光或其他報警信號。探測器(報警器)的種類很多,按所探測的物理量的不同,可分為微波、紅外、激光、超聲波和振動等方式;按電信號傳輸方式不同,又可分為無線傳輸和有線傳輸兩種方式。由于紅外線是不見光,有很強(qiáng)的隱蔽性和保密性,因此在防盜、警戒等安保裝置中得到了廣泛的應(yīng)用,這時紅外線報警器的簡易、靈敏度高為人們解決了不少問題。但是市場上的報警器大部分都是用于一些大公司財政機(jī)構(gòu),價格高昂,一般人們難以接受,如果再設(shè)計和生產(chǎn)一種價廉、性能靈敏可靠的防盜報警器,必將為大多數(shù)需求者所利用,在人們的防盜和保證財產(chǎn)安全方面發(fā)揮更加有效的作用。本次設(shè)計采用性價比較高的51單片機(jī)作為處理器,在加上1602字符型液晶作為顯示設(shè)備,采用NRF24L01無線傳輸模塊作為主要無線傳輸模塊,輔助采用雙元熱釋電傳感器作為檢測器件。在微控制器方面,51系列單片機(jī)雖然在處理速度上和AVR及ARM等系列單片機(jī)有一定差距,但作為8位單片機(jī),51單片機(jī)的簡單但實用的各種資源決定了它作為低速單片機(jī)的主流產(chǎn)品,而本次設(shè)計由于對單片機(jī)的速度沒有特殊的要求,也將此款單片機(jī)作為首選控制芯片。在顯示器選用方面,由于考慮到數(shù)碼管只能顯示數(shù)字和少數(shù)簡單的字母,達(dá)不到顯示要求,因此決定采用液晶顯示器。又考慮到本次設(shè)計中可以精簡到不用漢字顯示,遂決定選用1602的字符型液晶。此液晶雖不能顯示漢字但可以顯示全部的數(shù)字和英文字母及一些較復(fù)雜的字符,內(nèi)部還存有字符庫,編程上非常方便。而在無線傳輸設(shè)備的選用上,NRF24L01這款無線模塊內(nèi)部有6路無線通道,可以實現(xiàn)1對6的無線傳輸,而且可以低速傳入高速發(fā)送,非常適合和51系列低速單片機(jī)接口連接,而價格方面相對其他的無線模塊要低得多。通過對這些主要器件選用的嚴(yán)格控制,有效的減少了該系統(tǒng)的設(shè)計成本,雖然在性能上會弱于市面上的系統(tǒng),但無疑對于家庭和倉庫這些對靈敏要求不很高的地方使用,本系統(tǒng)是一個較好的選擇。功能概述人體接近模塊上的紅外熱釋電傳感器在通電后持續(xù)監(jiān)控外部紅外線熱信號,當(dāng)在其監(jiān)控區(qū)域范圍內(nèi)產(chǎn)生了一定范圍內(nèi)變化的紅外熱信號(人體紅外信號),熱釋電傳感器將熱信號轉(zhuǎn)換為電信號通過其模塊電路轉(zhuǎn)化成單片機(jī)能區(qū)分的電平信號。單片機(jī)檢測到信號后轉(zhuǎn)化為字符串發(fā)送到無線模塊上,無線模塊接收到數(shù)據(jù)后轉(zhuǎn)化成數(shù)據(jù)包高速發(fā)送出去并立即轉(zhuǎn)換為接收模式,等待主機(jī)發(fā)來確認(rèn)信號,接收到確認(rèn)信號后確認(rèn)發(fā)送成功,傳輸模塊進(jìn)入待機(jī)模式,等待下一個數(shù)據(jù)的到來。主機(jī)模塊功能由時間產(chǎn)生芯片、顯示時間和信號變化的顯示器(液晶屏)、報警器件(蜂鳴器)、信號接收裝置(無線模塊)組成、時間修改裝置(紅外接收頭和紅外遙控器)。其中時間芯片能內(nèi)部產(chǎn)生精準(zhǔn)的時間信號,并保存到其內(nèi)部的寄存器中,單片機(jī)讀取其寄存器時間數(shù)據(jù)然后經(jīng)過處理后發(fā)送至顯示器顯示。無線模塊接收到從機(jī)模塊發(fā)送過來的數(shù)據(jù)后,將人體接近模塊的數(shù)據(jù)存儲到無線數(shù)據(jù)模塊中,然后通過SPI總線將數(shù)據(jù)傳送到單片機(jī)中,單片機(jī)處理數(shù)據(jù)后送至液晶顯示器上顯示。如果接收到的數(shù)據(jù)超過或者達(dá)到預(yù)設(shè)的效果,則蜂蜜器產(chǎn)生報警。紅外接收頭主要接收紅外遙控器通過外部中斷發(fā)送過來的數(shù)據(jù)包,然后將數(shù)據(jù)包送至單片機(jī)中,單片機(jī)外部中斷檢測到數(shù)據(jù)后停止主程序的執(zhí)行,轉(zhuǎn)向執(zhí)行中斷程序,中斷執(zhí)行完畢后通過返回來的值實現(xiàn)時間的修改和蜂蜜器報警解除等功能。人體接近無線報警實現(xiàn)過程為:當(dāng)人體接近到熱釋電傳感器范圍內(nèi)時,傳感器檢測到信號動作并將信號傳入從機(jī)模塊的CPU中,CPU檢測到信號傳入便馬上通過SPI總線向無線傳輸模塊中發(fā)送預(yù)設(shè)標(biāo)志數(shù)據(jù)。傳輸完畢后,無線模塊自動加上地址位、檢驗位、開始位等打包成一個數(shù)據(jù)包并在加強(qiáng)模式下高速發(fā)送出去。主機(jī)模塊檢測到數(shù)據(jù)包并確認(rèn)數(shù)據(jù)正確后去除發(fā)送模塊添加的數(shù)據(jù)部分取出發(fā)送來的數(shù)據(jù)并發(fā)送至主機(jī)模塊的CPU中,CPU檢測是否是人體接近信號。判別無誤后,CPU向顯示器發(fā)送顯示'F'指令,刷新顯示屏的初始化設(shè)置的'N'顯示并控制蜂鳴器發(fā)聲,借以通知主機(jī)安裝房間有人進(jìn)入檢測區(qū)域。當(dāng)主機(jī)檢測房間監(jiān)控人員察覺后可以通過遙控鍵來解除報警,再去處理問題。另外,主機(jī)模塊上還附加了一個精確的萬年歷功能,主機(jī)開機(jī)后進(jìn)入顯示器自檢界面,進(jìn)入歡迎界面停留后進(jìn)入時鐘顯示界面,該界面顯示當(dāng)前年、月、日、時、分、秒、星期并根據(jù)當(dāng)前時間不斷進(jìn)行刷新。該時鐘具有兩個較為明顯的特點:一是采用DS12C887這款時鐘芯片來作為時間發(fā)生芯片,這款芯片的最大特點是它能在主機(jī)斷電后持續(xù)工作長達(dá)10年的時間,而且時間精確度很高;其二是在調(diào)節(jié)時間日期的功能上取消了原有的用主機(jī)鍵盤調(diào)節(jié)的模式,改用紅外遙控來修改時間,方便工作人員的同時也充分的利用了遙控的資源??傮w方案2.1總體分析本設(shè)計主要主要是實現(xiàn)通過對重要地區(qū)的人體接近檢測達(dá)到人體接近重要地帶時放置在重要地方附近的主機(jī)系統(tǒng)顯示并報警,以及主機(jī)系統(tǒng)精確顯示當(dāng)前時間并能通過紅外遙控修改當(dāng)前的時間的功能。整個系統(tǒng)采用單片機(jī)作為控制元件,輔助采用人體接近釋電模塊作為檢測人體接近并將信號傳入單片機(jī)作為檢測傳感器;用NRF24L01無線傳輸模塊作為兩系統(tǒng)間的無線傳輸設(shè)備;使用紅外接收頭作為紅外信號接收設(shè)備。整個過程通過傳感器不斷對外檢測信號并傳入到單片機(jī)實現(xiàn)對人體接近的實時監(jiān)控,通過紅外遙控的按鍵來修改當(dāng)前時間及日期值并可以作為人體接近報警的解除開關(guān)。2.2方案框圖1602液晶顯示器1602液晶顯示器74HC595鎖存芯片74HC595鎖存芯片STC89C52RC單片機(jī)NRF24L01無線STC89C52RC單片機(jī)NRF24L01無線發(fā)送模塊LED信號顯示燈NRF24L01無線接收模塊STC12C5410AD單片機(jī)人體接近檢測模塊人體蜂鳴器蜂鳴器DS12C887時鐘芯片DS12C887時鐘芯片紅外接收頭LED信號顯示燈帶有紅外發(fā)射電路的紅外遙控紅外接收頭LED信號顯示燈帶有紅外發(fā)射電路的紅外遙控 系統(tǒng)構(gòu)成3.1人體接近模塊3.1.1STC12C5410AD單片機(jī)介紹STC12C5410AD系列單片機(jī)是宏晶科技生產(chǎn)的單時鐘/機(jī)器周期(1T)的單片機(jī),是高速/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī)。指令代碼完全兼容傳統(tǒng)的8051單片機(jī),但速度快8-12倍,內(nèi)部集成MAX810專用復(fù)位電路。4路PWM,8路高速10位A/D,D/A轉(zhuǎn)換,針對電機(jī)控制,強(qiáng)干擾場合。1,增強(qiáng)型8051CPU,1T,單時鐘/機(jī)器周期,指令代碼完全兼容傳統(tǒng)的8051單片機(jī)。2,工作電壓:5.5-3.3V。3,工作頻率范圍為0-35MHZ,相當(dāng)于普通單片機(jī)8051的0-420MHZ,實際工作頻率可達(dá)到48MHZ。4,10Kflash存儲空間。5,片上集成512字節(jié)的RAM。6,15個普通I/O口,可設(shè)置成四種模式:準(zhǔn)雙向口/弱上拉,推免/強(qiáng)上拉,僅為輸入/高阻,開漏,每個I/O口驅(qū)動能力可達(dá)到20MA,但整個芯片最大不能超過55MA。7,ISP(在線系統(tǒng)編程)/IAP(在應(yīng)用可編程),無需專用編程器,無需專用仿真器,可通過串口直接下載用戶程序,數(shù)秒即可完成一片。8,EEPROM功能。9,看門狗。10,時鐘源:外部高精度時鐘,內(nèi)部R/C振蕩器。用戶在下載程序時可選擇使用內(nèi)部振蕩器還是外部時鐘。常溫下內(nèi)部振蕩器的頻率為5.2MHZ-6.8MHZ。精度要求不高時,可選用內(nèi)部時鐘。11,共2個16位定時/計數(shù)器,但可以用PCA模塊再產(chǎn)生4個定時器。12,2路外部中斷,可選擇下降沿觸發(fā)和低電平觸發(fā)兩種方式。13,4路PWM。14,8路10位高精度A/D,D/A轉(zhuǎn)換。15,通用全雙工異步串行口(UART),由于STC12系列是高速的,亦可以用定時器軟件實現(xiàn)多串口。16,SPI同步通信口,有主機(jī)/從機(jī)模式。17,工作溫度范圍:-40—+85。3.1.2人體感應(yīng)模塊基于紅外線技術(shù)的自動控制產(chǎn)品,靈敏度高,可靠性強(qiáng),超低電壓工作模式,廣泛應(yīng)用于各類自動感應(yīng)電器設(shè)備,尤其是干電池供電的自動控制產(chǎn)品。

模塊電氣參數(shù):電氣參數(shù)0丫廠-1^003人體感應(yīng)模塊工作電壓范圍004.5-20、靜態(tài)電流〈50以八電平輸出高3.3乂/低例觸發(fā)方式^不可重復(fù)觸發(fā)很重復(fù)觸發(fā)延時時間58(默認(rèn)〉可制作范圍零點幾秒-幾十分鐘封鎖時間1.58(默認(rèn)〉可制作范圍零點幾秒-幾十秒電路板外形尺寸感應(yīng)角度〈100度錐角感應(yīng)距離7米以內(nèi)工作溫度-15-+70度感應(yīng)透鏡尺寸直徑32MM默認(rèn))模塊功能特點:1.全自動感應(yīng):人進(jìn)入其感應(yīng)范圍則輸出高電平,人離開感應(yīng)范圍則自動延時關(guān)閉高電平,輸出低電平。2^光敏控制(可選擇,出廠時未設(shè)〉:可設(shè)置光敏控制,白天或光線強(qiáng)時不感應(yīng)。溫度補償(可選擇,出廠時未設(shè)、在夏天當(dāng)環(huán)境溫度升高至30?321:,探測距離稍變短,溫度補償可作一定的性能補償。4丨兩種觸發(fā)方式:〔可跳線選擇)^不可重復(fù)觸發(fā)方式:即感應(yīng)輸出高電平后,延時時間段一結(jié)束,輸出將自動從高電平變?yōu)榈碗娖剑籢可重復(fù)觸發(fā)方式:即感應(yīng)輸出高電平后,在延時時間段內(nèi),如果有人體在其感應(yīng)范圍活動,其輸出將一直保持高電平,直到人離開后才延時將高電平變?yōu)榈碗娖剑ǜ袘?yīng)模塊檢測到人體的每一次活動后會自動順延一個延時時間段,并且以最后一次活動的時間為延時時間的起始點〉。5^具有感應(yīng)封鎖時間(默認(rèn)設(shè)置:無封鎖時間、感應(yīng)模塊在每一次感應(yīng)輸出后(高電平變成低電平〉,可以緊跟著設(shè)置一個封鎖時間段,在此時間段內(nèi)感應(yīng)器不接受任何感應(yīng)信號。此功能可以實現(xiàn)“感應(yīng)輸出時間”和“封鎖時間”兩者的間隔工作,可應(yīng)用于間隔探測產(chǎn)品;同時此功能可有效抑制負(fù)載切換過程中產(chǎn)生的各種干擾。(此時間可設(shè)置在零點幾秒一幾十秒鐘)。6丨工作電壓范圍寬:默認(rèn)工作電壓0以』^-20乂。飛.微功耗:靜態(tài)電流〈50微安,特別適合干電池供電的自動控制產(chǎn)品。8丨輸出高電平信號:可方便與各類電路實現(xiàn)對接。模塊感應(yīng)范圍:3.1.3NRF24L01無線通信模塊概述:nRF24L01是一款工作在2.4~2.5GHz世界通用ISM頻段的單片無線收發(fā)器芯片。無線收發(fā)器包括:頻率發(fā)生器、增強(qiáng)型SchockBurstTM模式控制器、功率放大器、晶體振蕩器、調(diào)制器、解調(diào)器。輸出功率、頻道選擇和協(xié)議的設(shè)置可以通過SPI接口進(jìn)行設(shè)置。極低的電流消耗:當(dāng)工作在發(fā)射模式下發(fā)射功率為-6dBm時電流消耗為9mA,接收模式時為12.3mA。掉電模式和待機(jī)模式下電流消耗更低。原理圖:功能描述:工作模式:nRF24L01可以設(shè)置為以下幾種主要的模式,模式PWR_UPPRIM_RXCEFIFO寄存器狀態(tài)接收模式111-發(fā)送模式101數(shù)據(jù)在TXFIFO寄存器中發(fā)送模式101→0停留在發(fā)送模式,直至數(shù)據(jù)發(fā)送完待機(jī)模式II101TXFIFO為空待機(jī)模式I1-0無數(shù)據(jù)傳輸?shù)綦娔J?表6關(guān)于nRF24L01I/O腳更詳細(xì)的描述請參見下面的表7。nRF24L01在不同模式下的引腳功能引腳名稱方向發(fā)送模式接收模式待機(jī)模式掉電模式CE輸入高電平>10us高電平低電平-CSN輸入SPI片選使能,低電平使能SCK輸入SPI時鐘MOSI輸入SPI串行輸入MISO三態(tài)輸出SPI串行輸出IRQ輸出中斷,低電平使能表7、nRF24L01引腳功能待機(jī)模式:待機(jī)模式I在保證快速啟動的同時減少系統(tǒng)平均消耗電流。在待機(jī)模式I下,晶振正常工作。在待機(jī)模式II下部分時鐘緩沖器處在工作模式。當(dāng)發(fā)送端TXFIFO寄存器為空并且CE為高電平時進(jìn)入待機(jī)模式II。在待機(jī)模式期間,寄存器配置字內(nèi)容保持不變。掉電模式:在掉電模式下,nRF24L01各功能關(guān)閉,保持電流消耗最小。進(jìn)入掉電模式后,nRF24L01停止工作,但寄存器內(nèi)容保持不變。啟動時間見表格13。掉電模式由寄存器中PWR_UP位來控制數(shù)據(jù)包處理方式:nRF24L01有如下幾種數(shù)據(jù)包處理方式:ShockBurstTM(與nRF2401,nRF24E1,nRF2402,nRF24E2數(shù)據(jù)傳輸率為1Mbps時相同)增強(qiáng)型ShockBurstTM模式ShockBurstTM模式:ShockBurst模式下nRF24L01可以與成本較低的低速MCU相連。高速信號處理是由芯片內(nèi)部的射頻協(xié)議處理的,nRF24L01提供SPI接口,數(shù)據(jù)率取決于單片機(jī)本身接口速度。ShockBurst模式通過允許與單片機(jī)低速通信而無線部分高速通信,減小了通信的平均消耗電流。在ShockBurstTM接收模式下,當(dāng)接收到有效的地址和數(shù)據(jù)時IRQ通知MCU,隨后MCU可將接收到的數(shù)據(jù)從RXFIFO寄存器中讀出。在ShockBurstTM發(fā)送模式下,nRF24L01自動生成前導(dǎo)碼及CRC校驗,參見表格12。數(shù)據(jù)發(fā)送完畢后IRQ通知MCU。減少了MCU的查詢時間,也就意味著減少了MCU的工作量同時減少了軟件的開發(fā)時間。nRF24L01內(nèi)部有三個不同的RXFIFO寄存器(6個通道共享此寄存器)和三個不同的TXFIFO寄存器。在掉電模式下、待機(jī)模式下和數(shù)據(jù)傳輸?shù)倪^程中MCU可以隨時訪問FIFO寄存器。這就允許SPI接口可以以低速進(jìn)行數(shù)據(jù)傳送,并且可以應(yīng)用于MCU硬件上沒有SPI接口的情況下。增強(qiáng)型的ShockBurstTM模式:增強(qiáng)型ShockBurstTM模式可以使得雙向鏈接協(xié)議執(zhí)行起來更為容易、有效。典型的雙向鏈接為:發(fā)送方要求終端設(shè)備在接收到數(shù)據(jù)后有應(yīng)答信號,以便于發(fā)送方檢測有無數(shù)據(jù)丟失。一旦數(shù)據(jù)丟失,則通過重新發(fā)送功能將丟失的數(shù)據(jù)恢復(fù)。增強(qiáng)型的ShockBurstTM模式可以同時控制應(yīng)答及重發(fā)功能而無需增加MCU工作量。圖ⅠnRF24L01在星形網(wǎng)絡(luò)中的結(jié)構(gòu)圖圖ⅡnRF24L01接口圖nRF24L01在接收模式下可以接收6路不同通道的數(shù)據(jù),見圖4。每一個數(shù)據(jù)通道使用不同的地址,但是共用相同的頻道。也就是說6個不同的nRF24L01設(shè)置為發(fā)送模式后可以與同一個設(shè)置為接收模式的nRF24L01進(jìn)行通訊,而設(shè)置為接收模式的nRF24L01可以對這6個發(fā)射端進(jìn)行識別。數(shù)據(jù)通道0是唯一的一個可以配置為40位自身地址的數(shù)據(jù)通道。1~5數(shù)據(jù)通道都為8位自身地址和32位公用地址。所有的數(shù)據(jù)通道都可以設(shè)置為增強(qiáng)型ShockBurst模式。 3.2主機(jī)模塊3.2.11602液晶實物圖: 簡介1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。它由若干個5*7或者5*11的點陣組成,每個點陣字符位都可以顯示一個字符。每位之間都有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此,它不能顯示圖形。液晶能顯示兩行字符,每行可顯示16位。模塊編程簡便,刷新速度快,是一款低端的高性能顯示設(shè)備。管腳功能引腳說明1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,其中:引腳符號功能說明1VSS一般接地2VDD接電源(+5V)3V0液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度)。4RSRS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。5R/WR/W為讀寫信號線,高電平(1)時進(jìn)行讀操作,低電平(0)時進(jìn)行寫操作。6EE(或EN)端為使能(enable)端,下降沿使能。7DB0低4位三態(tài)、雙向數(shù)據(jù)總線0位(最低位)8DB1低4位三態(tài)、雙向數(shù)據(jù)總線1位9DB2低4位三態(tài)、雙向數(shù)據(jù)總線2位10DB3低4位三態(tài)、雙向數(shù)據(jù)總線3位11DB4高4位三態(tài)、雙向數(shù)據(jù)總線4位12DB5高4位三態(tài)、雙向數(shù)據(jù)總線5位13DB6高4位三態(tài)、雙向數(shù)據(jù)總線6位14DB7高4位三態(tài)、雙向數(shù)據(jù)總線7位(最高位)(也是busyflag)15BLA背光電源正極16BLK背光電源負(fù)極寄存器選擇控制表RSR/W操作說明00寫入指令寄存器(清除屏等)01讀busyflag(DB7),以及讀取位址計數(shù)器(DB0~DB6)值10寫入數(shù)據(jù)寄存器(顯示各字型等)11從數(shù)據(jù)寄存器讀取數(shù)據(jù)注:關(guān)于E=H脈沖——開始時初始化E為0,然后置E為1,再清0.busyflag(DB7):在此位為被清除為0時,LCD將無法再處理其他的指令要求。接口示意圖3.2.2STC89C52RC+單片機(jī)介紹STC89C52RC+單片機(jī)是宏晶科技推出的新一代超強(qiáng)抗干擾/高速/低功耗的單片機(jī),指令代碼完全兼容傳統(tǒng)的8051單片機(jī),12時鐘/機(jī)器周期、6時鐘/機(jī)器周期可任意選擇1,增強(qiáng)型12時鐘/機(jī)器周期、6時鐘/機(jī)器周期8051CPU。2,工作電壓5.5-3.4V。3,工作頻率范圍0-40MHZ,相當(dāng)于傳統(tǒng)8051單片機(jī)的0-80MHZ實際工作頻率可到達(dá)48MHZ。4,片上集成4Kflash存儲器。5,片上集成512字節(jié)的RAM。6,通用I/O口32個,復(fù)位后P1/P2/P3口為準(zhǔn)雙向口/弱上拉(普通8051傳統(tǒng)I/O口),P0口是開漏輸出,作為總線拓展用時,不用接上拉電阻;作為普通I/O口用時,需外加上拉電阻。7,ISP(在線系統(tǒng)編程)/IAP(在應(yīng)用可編程),無需專用編程器,無需專用仿真器,可通過串口直接下載用戶程序,數(shù)秒即可完成一片。8,EEPROM功能。9,看門狗。10,共3個16位定時/計數(shù)器,其中定時器0還可以當(dāng)為兩個8位定時器用。11,4路外部中斷,下降沿觸發(fā)或者低電平觸發(fā)。12,通用全雙工異步串行口(UART),由于STC12系列是高速的,亦可以用定時器軟件實現(xiàn)多串口。13,ISP(在線系統(tǒng)編程)/IAP(在應(yīng)用可編程),無需專用編程器,無需專用仿真器,可通過串口直接下載用戶程序,數(shù)秒即可完成一片。14,工作溫度范圍:-40—+85。15,封裝:PLCC-40,PIDP-44.16,管腳圖3.2.3紅外線接收頭及遙控紅外接收頭原理我們知道,人的眼睛能看到的可見光按波長從長到短排列,依次為紅、橙、黃、綠、青、藍(lán)、紫。其中紅光的波長范圍為0.62~0.76μm;紫光的波長范圍為0.38~0.46μm。比紫光波長還短的光叫紫外線,比紅光波長還長的光叫紅外線。紅外線遙控就是利用波長為0.76~1.5μm之間的近紅外線來傳送控制信號的。紅外遙控系統(tǒng)紅外遙控的概述:紅外線的光譜位于紅色光之外,波長是0.76~1.5μm,比紅光的波長還長。紅外遙控是利用紅外線進(jìn)行傳遞信息的一種控制方式,紅外遙控具有抗干擾,電路簡單,容易編碼和解碼,功耗小,成本低的優(yōu)點。紅外遙控幾乎適用所有家電的控制。紅外遙控系統(tǒng)的主要部分為調(diào)制、發(fā)射和接收,如圖所示:圖1紅外遙控系統(tǒng)1.調(diào)制紅外遙控是以調(diào)制的方式發(fā)射數(shù)據(jù),就是把數(shù)據(jù)和一定頻率的載波進(jìn)行“與”操作,這樣既可以提高發(fā)射效率又可以降低電源功耗。調(diào)制載波頻率一般在30khz到60khz之間,大多數(shù)使用的是38kHz,占空比1/3的方波,如圖2所示,這是由發(fā)射端所使用的455kHz晶振決定的。在發(fā)射端要對晶振進(jìn)行整數(shù)分頻,分頻系數(shù)一般取12,所以455kHz÷12≈37.9kHz≈38kHz。圖2載波波形2.發(fā)射系統(tǒng)目前有很多種芯片可以實現(xiàn)紅外發(fā)射,可以根據(jù)選擇發(fā)出不同種類的編碼。由于發(fā)射系統(tǒng)一般用電池供電,這就要求芯片的功耗要很低,芯片大多都設(shè)計成可以處于休眠狀態(tài),當(dāng)有按鍵按下時才工作,這樣可以降低功耗芯片所用的晶振應(yīng)該有足夠的耐物理撞擊能力,不能選用普通的石英晶體,一般是選用陶瓷共鳴器,陶瓷共鳴器準(zhǔn)確性沒有石英晶體高,但通常一點誤差可以忽略不計。紅外線通過紅外發(fā)光二極管(LED)發(fā)射出去,紅外發(fā)光二極管(紅外發(fā)射管)內(nèi)部構(gòu)造與普通的發(fā)光二極管基本相同,材料和普通發(fā)光二極管不同,在紅外發(fā)射管兩端施加一定電壓時,它發(fā)出的是紅外線而不是可見光。圖3b射極輸出驅(qū)動電路圖3a簡單驅(qū)動電路如圖3a和圖3b是LED的驅(qū)動電路,圖3a是最簡單電路,選用元件時要注意三極管的開關(guān)速度要快,還要考慮到LED的正向電流和反向漏電流,一般流過LED的最大正向電流為100mA,電流越大,其發(fā)射的波形強(qiáng)度越大。圖3a電路有一點缺陷,當(dāng)電池電壓下降時,流過LED的電流會降低,發(fā)射波形強(qiáng)度降低,遙控距離就會變小。圖3b所示的射極輸出電路可以解決這個問題,兩個二極管把三級管基極電壓鉗位在1.2V左右,因此三級管發(fā)射極電壓固定在0.6V左右,發(fā)射極電流IE基本不變,根據(jù)IE≈IC,所以流過LED的電流也基本不變,這樣保證了當(dāng)電池電壓降低時還可以保證一定的遙控距離。接口電路圖:3.2.4DS12C887時鐘芯片芯片特點7實時能直接替C鐘S7同它88BS7由于87夠動世、信加年問;27帶鋰部內(nèi)息持0久內(nèi)錄2制和4兩在2用M和PM上午表兩用一用D碼;S27中有8字節(jié)其中有1節(jié)儲,4字節(jié)AM用SC87的,存13通用M用此對DSC887程以波可三過引腳功能7的引圖1各能GNVC:其中CCV輸,GD地當(dāng)C輸入V時用訪問87內(nèi)M的可、當(dāng)VCC輸V,對部M進(jìn)、時正片當(dāng)C輸V27動電內(nèi)電保電工T式選87兩種即la和Intl式當(dāng)接CC,用式是trla當(dāng)T接ND,是l模本討論l(23)SW出電壓CC于4.25V,SW進(jìn),通存得到3波信AD~A7用線采用線半在A~D7上是信以通SC87內(nèi)的A總期在A~D7上數(shù)息。(14)AS地入行,S將A~AD7的到87,而沿除DD7上的有SC87都操:數(shù)讀該工當(dāng)T接VCCra工模工周分的S為被。,S使DS1C887部據(jù)線AAD7,供。,S使線D0D7上的存在7中當(dāng)T接GND用Itl式在,讀,即eadEabl。W:寫該有2式當(dāng)T接C時,Wra模此腳區(qū)讀寫當(dāng)W電,RW時;當(dāng)OT接ND時,作在l此許即Wrl。入效(19)中入效效對S87內(nèi)的和M中的有僅控有型,ESET接C樣可證27掉,制影在7有1字節(jié)AM儲,4用制4,軟件設(shè)計4.1人體接近動作模塊流程圖4.2主機(jī)模塊流程圖開始開始開始系統(tǒng)初始化系統(tǒng)初始化系統(tǒng)初始化系統(tǒng)初始化 M鍵是否按下偶數(shù)次M鍵是否按下偶數(shù)次定義發(fā)送字符數(shù)組定義發(fā)送字符數(shù)組光標(biāo)在首位置閃爍關(guān)閉信號LEDP3.4口是否為高時間和日期顯示光標(biāo)在首位置閃爍關(guān)閉信號LEDP3.4口是否為高時間和日期顯示 N光標(biāo)是否越界人體接近顯示 Y光標(biāo)是否越界人體接近顯示換行開信號LED Y換行開信號LED解除報警是否按下解除報警是否按下 N NZ鍵是否按下將數(shù)據(jù)發(fā)送到無線發(fā)送模塊Z鍵是否按下將數(shù)據(jù)發(fā)送到無線發(fā)送模塊光標(biāo)減1 Y光標(biāo)減1數(shù)據(jù)是否發(fā)送完成 N N數(shù)據(jù)是否發(fā)送完成Y鍵是否按下 YY鍵是否按下關(guān)閉蜂鳴器光標(biāo)加1 關(guān)閉蜂鳴器光標(biāo)加1 Y Y N數(shù)值鍵是否按下關(guān)閉信號LED數(shù)值鍵是否按下關(guān)閉信號LEDN清除發(fā)送標(biāo)志清除發(fā)送標(biāo)志 Y修改當(dāng)前時間和日期修改當(dāng)前時間和日期結(jié)論此次設(shè)計最難調(diào)試成功也是疑點最大的部分為無線傳輸模塊,該系統(tǒng)中采用了24L01這款無線芯片,該芯片支持最多6對1的雙向傳輸,起初設(shè)計時由于考慮到了1收2發(fā)的模式。這種模式上,先有兩個發(fā)送塊分別發(fā)送數(shù)據(jù)和不同的地址,接收塊收到數(shù)據(jù)后自動將接收到的地址發(fā)送出去,而將數(shù)據(jù)存入地址對應(yīng)的通道中。此步驟的實現(xiàn)可以是多對一實時傳輸,但當(dāng)數(shù)據(jù)卻一次只能一個通道的傳入,這就造成了數(shù)據(jù)處理上的先后,而這種實時上的差別反映到系統(tǒng)調(diào)試時的狀態(tài)就是:兩個傳感器模塊發(fā)送的數(shù)據(jù)不能及時處理,傳感器動作一段時間后,主機(jī)顯示器才顯示出變化,甚至蜂鳴器延時報警,而兩個模塊分別工作時又能恢復(fù)原狀,這種實時性上的差異造成了整個系統(tǒng)的靈敏度大大降低。當(dāng)然,這種現(xiàn)象的出現(xiàn)不完全在無線通信模塊與單片機(jī)上,也與單片機(jī)自身的處理速度有關(guān)。要解決這個問題就得考慮到無線模塊與單片機(jī)的通信問題,軟件設(shè)計上基于原有的單對單的通信模式必須得到較大的改動,采用連續(xù)讀取出兩個通道中的數(shù)據(jù)來改善,但由于兩個通道接收的識別問題以及接收后兩個通道的區(qū)分問題在調(diào)試的最后階段沒有得到有效解決。因此為了降低設(shè)計的復(fù)雜度以及考慮到系統(tǒng)整體的控制性能,最終放棄了累贅的溫度無線傳輸部分,大大提高了系統(tǒng)的穩(wěn)定程度。再者,STC系列單片機(jī)雖然在性能上相對于傳統(tǒng)的8051單片機(jī)有較大的提升,然而本次設(shè)計中由于加入了基于DS12C887時鐘芯片的實時時鐘,而時鐘的工作模式為每秒鐘更新一次數(shù)據(jù),這就要求主機(jī)能在每秒的末尾及時的讀取芯片數(shù)據(jù),然后送入液晶顯示。這種情況在單獨調(diào)試主機(jī)與芯片的時候時間顯示較為正常,然而當(dāng)聯(lián)調(diào)的時候由于單片機(jī)處理數(shù)據(jù)大大增加,while內(nèi)的指令全部執(zhí)行一遍的時間也大大增加,導(dǎo)致了不能及時的讀取出芯片中的數(shù)據(jù)而不能及時更新,從而顯示的時候每秒之間轉(zhuǎn)換的時間不等甚至大大超過了一秒,而整體時間又是精準(zhǔn)的。這個問題通過將芯片的中斷口接上可以得到有效的解決,但硬件已經(jīng)確定無法更改,只能通過更換處理速度快的單片機(jī)來解決,但這又增加了成本,背離了系統(tǒng)設(shè)計的初衷,因此解決這個問題的方法只有通過采取將while內(nèi)部指令的時間不斷精簡,直到達(dá)到一個理想效果的軟件方式來調(diào)節(jié),這也是本系統(tǒng)的一個較大的缺陷。最后就是液晶顯示的一些問題,系統(tǒng)調(diào)試中當(dāng)按“MODE”鍵退出時間調(diào)試時,液晶顯示上會出現(xiàn)不斷掃描的一些影子,影響了視覺效果。問題的產(chǎn)生可能在調(diào)節(jié)時鐘的時候閃爍點的移動導(dǎo)致退出后液晶顯示問題。調(diào)試的過程中通過在軟件上編寫退出時的清屏指令改善過這個問題,但效果不是很好,只有一部分機(jī)會液晶不會出現(xiàn)這種情況,也成為本系統(tǒng)的一個遺留問題。綜合以上結(jié)論,本系統(tǒng)仍存在很多缺陷,希望自己在以后對系統(tǒng)不斷的改良中能有效的解決掉這些問題,設(shè)計出一個性能更加優(yōu)良的系統(tǒng)。謝詞本次設(shè)計過程中多虧了本班上的段亞強(qiáng)同學(xué)不厭其煩的聽我講述設(shè)計過程中的問題,并討論解決辦法,正因為他有過使用此款無線芯片的經(jīng)驗才使得我能這么快的掌握無線通信模塊的工作方式。也幸好有幾個能在我曠課時為我簽到答到的同學(xué),沒有他們,我還在為了一個結(jié)業(yè)成績在我完全沒興趣的課程里浪費時間,不可能有將近一個月的時間靜心來做這個設(shè)計;再者,沒有單片機(jī)相關(guān)課程的專業(yè)老師在課堂上給與我一些必須的專業(yè)知識,我也不會具備這些能力。在這里,對這些給予我?guī)椭娜艘徊⒈硎靖兄x。參考文獻(xiàn)【1】郭天祥51單片機(jī)C語言教程:入門、提高、開發(fā)、拓展全攻略北京:電子工業(yè)出版社,2009,1:323-331【2】程利民,姜新橋,朱曉玲接口應(yīng)用實踐【武職內(nèi)部教材】60-70【3】阮艷電子CAD北京:中國勞動社會保障出版社,200716-32【4】余孟嘗模擬、數(shù)字及電力電子技術(shù)(上冊)北京:機(jī)械工業(yè)出版社,1999.10【5】譚浩強(qiáng)C語言程序設(shè)計北京:清華大學(xué)出版社,2010.6【6】童詩白,華成英模擬電子技術(shù)基礎(chǔ)(第四版)北京:高等教育出版社,2006.5【7】閻石數(shù)字電子技術(shù)基礎(chǔ)(第五版)北京:高等教育出版社,2006.5其他資料均來源于互聯(lián)網(wǎng)上,這里對提供者表示感謝,恕此處無法一一列出附錄1程序代碼1.1人體接近模塊C代碼//********************此部分為人體接近模塊發(fā)送模塊驅(qū)動**********************//********************存入function.h頭文件中***********************************//**************************************************************************#include"STC12C5410AD.h"#include<intrins.h>#defineuintunsignedint#defineucharunsignedchar#defineulongunsignedlong//**********************************12******IO端口定義***************************************sbit MISO =P1^6;sbit MOSI =P1^5;sbit SCK =P1^7;sbit CE =P1^2;sbit CSN =P1^4;//sbit IRQ =P1.1;sbitds1820_clk_hb=P3^7;//*********************************************NRF24L01*************************************#defineTX_ADR_WIDTH5 //5uintsTXaddresswidth#defineRX_ADR_WIDTH5 //5uintsRXaddresswidth#defineTX_PLOAD_WIDTH5 //5uintsTXpayload#defineRX_PLOAD_WIDTH5 //5uintsTXpayload//***************************************NRF24L01寄存器指令*******************************************************#defineREAD_REG0x00 //讀寄存器指令#defineWRITE_REG0x20 //寫寄存器指令#defineRD_RX_PLOAD0x61 //讀取接收數(shù)據(jù)指令#defineWR_TX_PLOAD0xA0 //寫待發(fā)數(shù)據(jù)指令#defineFLUSH_TX0xE1 //沖洗發(fā)送FIFO指令#defineFLUSH_RX0xE2 //沖洗接收FIFO指令#defineREUSE_TX_PL0xE3 //定義重復(fù)裝載數(shù)據(jù)指令#defineNOP0xFF //保留//*************************************SPI(nRF24L01)寄存器地址****************************************************#defineCONFIG0x00//配置收發(fā)狀態(tài),CRC校驗?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式#defineEN_AA0x01//自動應(yīng)答功能設(shè)置#defineEN_RXADDR0x02//可用信道設(shè)置#defineSETUP_AW0x03//收發(fā)地址寬度設(shè)置#defineSETUP_RETR0x04//自動重發(fā)功能設(shè)置#defineRF_CH0x05//工作頻率設(shè)置#defineRF_SETUP0x06//發(fā)射速率、功耗功能設(shè)置#defineSTATUS0x07//狀態(tài)寄存器#defineOBSERVE_TX0x08//發(fā)送監(jiān)測功能#defineCD0x09//地址檢測#defineRX_ADDR_P00x0A//頻道0接收數(shù)據(jù)地址#defineRX_ADDR_P10x0B//頻道1接收數(shù)據(jù)地址#defineRX_ADDR_P20x0C//頻道2接收數(shù)據(jù)地址#defineRX_ADDR_P30x0D//頻道3接收數(shù)據(jù)地址#defineRX_ADDR_P40x0E//頻道4接收數(shù)據(jù)地址#defineRX_ADDR_P50x0F//頻道5接收數(shù)據(jù)地址#defineTX_ADDR0x10//發(fā)送地址寄存器#defineRX_PW_P00x11//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P10x12//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P20x13//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P30x14//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P40x15//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P50x16//接收頻道0接收數(shù)據(jù)長度#defineFIFO_STATUS0x17//FIFO棧入棧出狀態(tài)寄存器設(shè)置//ucharTX_ADDRESS[TX_ADR_WIDTH]={0x01,0x20,0x20,0x20,0x20}; //本地地址//ucharRX_ADDRESS[RX_ADR_WIDTH]={0x01,0x20,0x20,0x20,0x20}; //接收地址ucharTX_ADDRESS1[RX_ADR_WIDTH]={0x02,0x20,0x20,0x20,0x20}; //本地地址1uchar bdatasta;//狀態(tài)標(biāo)志sbit RX_DR =sta^6;sbit TX_DS =sta^5;sbit MAX_RT =sta^4;/******************************************************************************************/*延時函數(shù)/******************************************************************************************/voidinerDelay_us(unsignedcharn){ for(;n>0;n--) _nop_();}/****************************************************************************************************/*函數(shù):uintSPI_RW(uintuchar)/*功能:NRF24L01的SPI寫時序/****************************************************************************************************/uintSPI_RW(uintucharx){ uintbit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr++)//output8-bit { MOSI=(ucharx&0x80);//output'uchar',MSBtoMOSI ucharx=(ucharx<<1);//shiftnextbitintoMSB.. SCK=1;//SetSCKhigh.. ucharx|=MISO; //capturecurrentMISObit SCK=0; //..thensetSCKlowagain }return(ucharx); //returnreaduchar}/*********************************************************************************************************/*函數(shù):uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars)/*功能:用于寫數(shù)據(jù):為寄存器地址,pBuf:為待寫入數(shù)據(jù)地址,uchars:寫入數(shù)據(jù)的個數(shù)/*********************************************************************************************************/uintSPI_Write_Buf(ucharreg,uchar*pBuf,ucharuchars){ uintstatus,uchar_ctr; CSN=0;//SPI使能 status=SPI_RW(reg); for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)// SPI_RW(*pBuf++); CSN=1;//關(guān)閉SPI return(status);//}/****************************************************************************************************//*功能:NRF24L01讀寫寄存器函數(shù)/****************************************************************************************************/uintSPI_RW_Reg(ucharreg,ucharvalue){ uintstatus; CSN=0;//CSNlow,initSPItransaction status=SPI_RW(reg);//selectregister SPI_RW(value);//..andwritevaluetoit.. CSN=1;//CSNhighagain return(status);//returnnRF24L01statusuchar}/***********************************************************************************************************/*函數(shù):voidnRF24L01_TxPacket(unsignedchar*tx_buf)/*功能:發(fā)送tx_buf中數(shù)據(jù)/**********************************************************************************************************/voidnRF24L01_TxPacket(uchar*tx_buf){ CE=0; //StandByI模式 SPI_Write_Buf(WRITE_REG+RX_ADDR_P1,TX_ADDRESS1,TX_ADR_WIDTH);//裝載接收端地址 SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH); //裝載數(shù)據(jù) // SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);CE=0; //IRQ收發(fā)完成中斷響應(yīng),16位CRC,主發(fā)送 CE=1; //置高CE,激發(fā)數(shù)據(jù)發(fā)送inerDelay_us(70); CE=0; CE=1;inerDelay_us(70);}voidinit_NRF24L01(void){inerDelay_us(100); CE=0;//chipenable CSN=1;//Spidisable SCK=0;//Spiclocklineinithigh SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS1,TX_ADR_WIDTH);//寫本地地址 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS1,TX_ADR_WIDTH);//寫接收端地址 SPI_RW_Reg(WRITE_REG+EN_AA,0x03);//頻道0和頻道1自動 ACK應(yīng)答允許 SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x03);//允許接收地址有頻道0和頻道1 SPI_RW_Reg(WRITE_REG+RF_CH,0);//設(shè)置信道工作為2.4GHZ,收發(fā)必須一致 SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//設(shè)置0通道接收數(shù)據(jù)長度,本次設(shè)置為5字節(jié) SPI_RW_Reg(WRITE_REG+RX_PW_P1,RX_PLOAD_WIDTH);//設(shè)置1通道接收數(shù)據(jù)長度,本次設(shè)置為5字節(jié) SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07); //設(shè)置發(fā)射速率為1MHZ,發(fā)射功率為最大值0dB SPI_RW_Reg(WRITE_REG+CONFIG,0x0e); //IRQ收發(fā)完成中斷響應(yīng),16位CRC ,主發(fā)送 CE=1;}//*************************此部分為人體接近模塊主函數(shù)************************//*****************************************************************************#include"function.h"sbitled=P3^7;sbithw=P3^4;#defineled_on()led=0#defineled_off()led=1voiddelay_ms(uintx){uchari,j;while(x--){for(i=0;i<4;i++) for(j=0;j<250;j++);}}voidmain(){uchartx_buf[]={1,1,1};//ucharTX[]={0,0,0};hw=1;led_off();init_NRF24L01();while(1){if(hw==1) { delay_ms(100); led_on(); nRF24L01_TxPacket(tx_buf); delay_ms(100); led_off(); SPI_RW_Reg(WRITE_REG+STATUS,0XFF);//清除標(biāo)志 } }}1.2主機(jī)模塊C代碼/************************************************////////////LCD顯示驅(qū)動函數(shù)存入LCD.C中////////////************************************************/#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint/********595引腳定義**********/sbitSCLK=P1^0;sbitRCK=P1^2;sbitSI=P1^1;/********LCD引腳定義*********/sbitrs =P1^5; sbitrw=P1^4;sbitep=P1^3;/********MS級延時函數(shù)*****************/delay_ms(ucharms){ //延時子程序 uchari; while(ms--) { for(i=0;i<250;i++) { _nop_(); _nop_(); _nop_(); _nop_(); } }}/***********74HC595驅(qū)動函數(shù)*******************/voidsend_HC595(ucharwrDat){uchari;for(i=0;i<8;i++){ SI=wrDat&0x80;//從數(shù)據(jù)的最高位開始輸入 wrDat<<=1; //輸入后左移以為,準(zhǔn)備輸入第二位 SCLK=0; _nop_(); _nop_(); SCLK=1;//時鐘產(chǎn)生高電平跳變,數(shù)據(jù)移位 } RCK=0; _nop_(); _nop_(); RCK=1; //鎖存產(chǎn)生高電平跳變,數(shù)據(jù)輸出 }/**************寫指令數(shù)據(jù)到LCD中*****************/lcd_wcmd(ucharcmd){ delay_ms(10); rs=0; rw=0; ep=0; _nop_(); _nop_(); send_HC595(cmd); _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; }/***************LCD顯示位置設(shè)定*********************/lcd_pos(ucharpos){ lcd_wcmd(pos|0x80);}/***************寫顯示數(shù)據(jù)到LCD************************/lcd_wdat(uchardat) { delay_ms(10); rs=1; rw=0; ep=0;send_HC595(dat); _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; }/***********LCD初始化設(shè)定*******************/lcd_init(){ lcd_wcmd(0x38); // delay_ms(1); lcd_wcmd(0x0c); // delay_ms(1); lcd_wcmd(0x06); // delay_ms(1); lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容 delay_ms(1);}//************LCD清屏*****************lcd_clr(){lcd_wcmd(0x01); //清除LCD的顯示內(nèi)容delay_ms(1);}/**********************************************************//****************LCD字符顯示函數(shù)***********************/LCD_DIS_CH(bitpos1,ucharpos2,ucharCH){if(pos1==0){lcd_pos(pos2); lcd_wdat(CH);//第一排pos2個顯示}else { lcd_pos(0x40+pos2); lcd_wdat(CH); //第二排pos2個顯示}}/***********************************************************//********************LCD字符串顯示函數(shù)*****************/voidLCD_DIS_STR(bitpos1,ucharpos2,uchar*s) //LCD字符串輸入顯示,pos1排、pos2列顯示{ if(pos1==0){lcd_pos(pos2); while(*s!=0) { lcd_wdat(*s); ++s; }}else{ lcd_pos(0x40+pos2); while(*s!=0) { lcd_wdat(*s); ++s; } }}/*******************閃爍函數(shù)*****************/voidLCD_BL(bita,bitb,bitc) //c=0時關(guān)光標(biāo)閃爍,c=1時開光標(biāo)閃爍{ucharkk=0x8;if(a!=0){kk+=4;}if(b!=0){kk+=2;}if(c!=0){kk+=1;}lcd_wcmd(kk); //寫數(shù)據(jù)到指令寄存器}//*********************此部分為時間顯示部分*********************************//********************存入dis_tim.c中**************************************//**************************************************************************#include<reg52.h>#include"function.h"sbitds=P1^7;sbitrw=P2^7;sbitas=P2^6;sbitcs=P2^5;#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlong#defineds_BUFP0ucharmiao,fen,shi,day,week,month,year;ucharcodenum[10]={'0','1','2','3','4','5','6','7','8','9'};ucharcodew[7][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"};voidwrite_ds(ucharadd,ucharDAT);ucharread_ds(ucharadd);voidfirst_init_ds();voiddis_date();voiddis_time();voiddis_week();//***************向DS12C887中寫入數(shù)據(jù)************************voidwrite_ds(ucharadd,ucharDAT){cs=0;as=1;ds=1;rw=1;ds_BUF=add;as=0;rw=0;ds_BUF=DAT;as=1;rw=1;cs=1;}//************讀DS12C887中的數(shù)據(jù)*****************************ucharread_ds(ucharadd){uchartime;cs=0;as=1;ds=1;rw=1;ds_BUF=add;as=0;ds=0;ds_BUF=0xff;time=ds_BUF;as=1;ds=1;cs=1;returntime;}/******首次操作輸入,以后不必再寫入//**********首次操作DS12C887**************************voidfirst_init_ds(){//write_ds(0x0A,0x20);//write_ds(0x0B,0x06);write_ds(0,0);write_ds(2,24);write_ds(4,19);write_ds(6,4);write_ds(7,17);write_ds(8,11);write_ds(9,11);}//**********日期顯示函數(shù)********************voiddis_date(){uchard[11];year=read_ds(9);month=read_ds(8);day=read_ds(7);d[0]='2';d[1]='0';d[2]=num[year/10];d[3]=num[year%10];d[4]='-';d[5]=num[month/10];d[6]=num[month%10];d[7]='-';d[8]=num[day/10];d[9]=num[day%10];d[10]=0;LCD_DIS_STR(0,1,d);}//***********時間顯示函數(shù)**********************voiddis_time(){uchart[9];shi=read_ds(4);fen=read_ds(2);miao=read_ds(0);t[0]=num[shi/10];t[1]=num[shi%10];t[2]=':';t[3]=num[fen/10];t[4]=num[fen%10];t[5]=':';t[6]=num[miao/10];t[7]=num[miao%10];t[8]=0;LCD_DIS_STR(1,0,t);}//************星期顯示函數(shù)********************voiddis_week(){week=read_ds(6);LCD_DIS_STR(0,12,w[week-1]);}//***********時間日期顯示函數(shù)***********************voiddis_dat_t(){//first_init_ds();dis_date();dis_week();dis_time();}//*****************無線人體接近顯示與報警模塊****************************//*******************存入tem_war.c中************************************//**************************************************************************#include<reg52.h>#include<intrins.h>#include<stdio.h>#include"function.h"http://*************24L01引腳定義****************sbit MISO =P2^0;sbit MOSI =P2^3;sbit SCK =P2^1;sbit CE =P2^2;sbit CSN =P2^4;sbitLED=P3^7;sbitfmq=P3^6;#definefmq_on()fmq=0#definefmq_off()fmq=1#defineled_on()LED=0#defineled_off()LED=1typedefunsignedcharuchar;typedefunsignedcharuint;uchari;ucharwar='N',sum[6];ucharrx_buf[5];//紅外釋電接收數(shù)組//*********************************************NRF24L01*************************************#defineTX_ADR_WIDTH5 //5uintsTXaddresswidth#defineRX_ADR_WIDTH5 //5uintsRXaddresswidth#defineTX_PLOAD_WIDTH5 //5uintsTXpayload#defineRX_PLOAD_WIDTH5 //5uintsTXpayloaduintconstTX_ADDRESS[TX_ADR_WIDTH]={0x01,0x20,0x20,0x20,0x20}; //本地地址uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x01,0x20,0x20,0x20,0x20}; //接收地址uintcodeRX_ADDRESS1[RX_ADR_WIDTH]={0x02,0x20,0x20,0x20,0x20}; //接收地址1//***************************************NRF24L01寄存器指令*******************************************************#defineREAD_REG0x00 //讀寄存器指令#defineWRITE_REG0x20 //寫寄存器指令#defineRD_RX_PLOAD0x61 //讀取接收數(shù)據(jù)指令#defineWR_TX

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論