![基于單片機(jī)控制的無(wú)線防盜系統(tǒng)(附原理圖及源代碼)_第1頁(yè)](http://file4.renrendoc.com/view/05f47dcc2eb06bb25a2a989299970e30/05f47dcc2eb06bb25a2a989299970e301.gif)
![基于單片機(jī)控制的無(wú)線防盜系統(tǒng)(附原理圖及源代碼)_第2頁(yè)](http://file4.renrendoc.com/view/05f47dcc2eb06bb25a2a989299970e30/05f47dcc2eb06bb25a2a989299970e302.gif)
![基于單片機(jī)控制的無(wú)線防盜系統(tǒng)(附原理圖及源代碼)_第3頁(yè)](http://file4.renrendoc.com/view/05f47dcc2eb06bb25a2a989299970e30/05f47dcc2eb06bb25a2a989299970e303.gif)
![基于單片機(jī)控制的無(wú)線防盜系統(tǒng)(附原理圖及源代碼)_第4頁(yè)](http://file4.renrendoc.com/view/05f47dcc2eb06bb25a2a989299970e30/05f47dcc2eb06bb25a2a989299970e304.gif)
![基于單片機(jī)控制的無(wú)線防盜系統(tǒng)(附原理圖及源代碼)_第5頁(yè)](http://file4.renrendoc.com/view/05f47dcc2eb06bb25a2a989299970e30/05f47dcc2eb06bb25a2a989299970e305.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGE37基于單片機(jī)控制的無(wú)線防盜系統(tǒng)摘要本設(shè)計(jì)主要目的是建立一個(gè)整體的家庭及倉(cāng)庫(kù)等重要物品放置地的安防監(jiān)控系統(tǒng),主要功能是實(shí)時(shí)監(jiān)測(cè)一定區(qū)域的人體接近狀況,并把當(dāng)前監(jiān)測(cè)狀態(tài)無(wú)線傳輸?shù)骄嚯x在20-30M以內(nèi)的安裝主機(jī)的房間中,實(shí)現(xiàn)無(wú)線的監(jiān)控,降低了小區(qū)或者倉(cāng)庫(kù)管理員的工作強(qiáng)度,借此希望小區(qū)或工廠的貴重物品安全問(wèn)題得到有效解決。系統(tǒng)主要由二個(gè)模塊組成:一個(gè)人體接近動(dòng)作模塊,主要負(fù)責(zé)實(shí)時(shí)監(jiān)控人體接近與否的狀態(tài),若人體接近則傳感器立即向CPU發(fā)送標(biāo)志數(shù)據(jù),CPU接收到傳感器數(shù)據(jù)后馬上響應(yīng),向模塊上的無(wú)線發(fā)送模塊發(fā)送數(shù)據(jù),無(wú)線發(fā)送模塊接收到數(shù)據(jù)后以高速的方式向主機(jī)模塊上的主機(jī)發(fā)送數(shù)據(jù),實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè)人體接近與否的功能;一個(gè)主機(jī)模塊,主要負(fù)責(zé)接收從機(jī)監(jiān)測(cè)模塊發(fā)送來(lái)的數(shù)據(jù)并處理送至液晶顯示器顯示以及當(dāng)監(jiān)測(cè)模塊達(dá)到預(yù)設(shè)效果產(chǎn)生報(bào)警的功能,作為實(shí)時(shí)監(jiān)控系統(tǒng)。為了豐富系統(tǒng)的功能和有效的利用系統(tǒng)資源,在主機(jī)模塊還加入了一個(gè)掉電不丟失的精確時(shí)鐘顯示以及用紅外遙控控制時(shí)間修改和報(bào)警解除的功能。考慮到軟件的執(zhí)行效果和系統(tǒng)整體的穩(wěn)定性,本設(shè)計(jì)中的所有軟件均在整體和局部的事物電路上調(diào)試成功。因此,本次設(shè)計(jì)的方案具有可行性。[Ⅰ]關(guān)鍵字:?jiǎn)纹瑱C(jī);無(wú)線傳輸;人體接近;紅外遙控[Ⅱ]目錄摘要Ⅰ關(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無(wú)線通信模塊83.2主機(jī)模塊123.2.11602液晶顯示器123.2.2STC89C52RC+單片機(jī)介紹143.2.3紅外接收頭及遙控153.2.4DS12C887174.軟件設(shè)計(jì)194.1人體接近動(dòng)作模塊流程圖194.2主機(jī)模塊流程圖19結(jié)論20致謝20參考文獻(xiàn)21附錄221.程序代碼221.1人體接近模塊C代碼221.2主機(jī)模塊C代碼262.原理圖和實(shí)物圖46前言隨著現(xiàn)代電子技術(shù)計(jì)算通信技術(shù)的迅速發(fā)展,有關(guān)防盜報(bào)警方面的產(chǎn)品愈來(lái)愈豐富。尤其紅外技術(shù)得到了迅猛的發(fā)展,紅外探測(cè)技術(shù)已滲透到國(guó)民經(jīng)濟(jì)的各行各業(yè)和人們生活的方方面面。近年來(lái),隨著改革開(kāi)放的深入發(fā)展,電子電器的飛速發(fā)展,人民的生活水平有了很大提高。各種高檔家電產(chǎn)品和貴重物品為許多家庭所擁有。然而一些不法分子也是越來(lái)越多。這點(diǎn)就是看到了大部分人防盜意識(shí)還不夠強(qiáng).造成偷盜現(xiàn)象屢見(jiàn)不鮮。因此,越來(lái)越多的居民家庭對(duì)財(cái)產(chǎn)安全問(wèn)題十分擔(dān)憂。防盜報(bào)警系統(tǒng)是在探測(cè)到防范現(xiàn)場(chǎng)有入侵者時(shí)能及時(shí)發(fā)出報(bào)警信號(hào)的專(zhuān)用電子系統(tǒng),一般由探測(cè)器(報(bào)警器)、傳輸系統(tǒng)和報(bào)警控制器組成。探測(cè)器檢測(cè)到意外情況就產(chǎn)生報(bào)警信號(hào),通過(guò)傳輸系統(tǒng)送入報(bào)警控制器發(fā)出聲、光或其他報(bào)警信號(hào)。探測(cè)器(報(bào)警器)的種類(lèi)很多,按所探測(cè)的物理量的不同,可分為微波、紅外、激光、超聲波和振動(dòng)等方式;按電信號(hào)傳輸方式不同,又可分為無(wú)線傳輸和有線傳輸兩種方式。由于紅外線是不見(jiàn)光,有很強(qiáng)的隱蔽性和保密性,因此在防盜、警戒等安保裝置中得到了廣泛的應(yīng)用,這時(shí)紅外線報(bào)警器的簡(jiǎn)易、靈敏度高為人們解決了不少問(wèn)題。但是市場(chǎng)上的報(bào)警器大部分都是用于一些大公司財(cái)政機(jī)構(gòu),價(jià)格高昂,一般人們難以接受,如果再設(shè)計(jì)和生產(chǎn)一種價(jià)廉、性能靈敏可靠的防盜報(bào)警器,必將為大多數(shù)需求者所利用,在人們的防盜和保證財(cái)產(chǎn)安全方面發(fā)揮更加有效的作用。本次設(shè)計(jì)采用性價(jià)比較高的51單片機(jī)作為處理器,在加上1602字符型液晶作為顯示設(shè)備,采用NRF24L01無(wú)線傳輸模塊作為主要無(wú)線傳輸模塊,輔助采用雙元熱釋電傳感器作為檢測(cè)器件。在微控制器方面,51系列單片機(jī)雖然在處理速度上和AVR及ARM等系列單片機(jī)有一定差距,但作為8位單片機(jī),51單片機(jī)的簡(jiǎn)單但實(shí)用的各種資源決定了它作為低速單片機(jī)的主流產(chǎn)品,而本次設(shè)計(jì)由于對(duì)單片機(jī)的速度沒(méi)有特殊的要求,也將此款單片機(jī)作為首選控制芯片。在顯示器選用方面,由于考慮到數(shù)碼管只能顯示數(shù)字和少數(shù)簡(jiǎn)單的字母,達(dá)不到顯示要求,因此決定采用液晶顯示器。又考慮到本次設(shè)計(jì)中可以精簡(jiǎn)到不用漢字顯示,遂決定選用1602的字符型液晶。此液晶雖不能顯示漢字但可以顯示全部的數(shù)字和英文字母及一些較復(fù)雜的字符,內(nèi)部還存有字符庫(kù),編程上非常方便。而在無(wú)線傳輸設(shè)備的選用上,NRF24L01這款無(wú)線模塊內(nèi)部有6路無(wú)線通道,可以實(shí)現(xiàn)1對(duì)6的無(wú)線傳輸,而且可以低速傳入高速發(fā)送,非常適合和51系列低速單片機(jī)接口連接,而價(jià)格方面相對(duì)其他的無(wú)線模塊要低得多。通過(guò)對(duì)這些主要器件選用的嚴(yán)格控制,有效的減少了該系統(tǒng)的設(shè)計(jì)成本,雖然在性能上會(huì)弱于市面上的系統(tǒng),但無(wú)疑對(duì)于家庭和倉(cāng)庫(kù)這些對(duì)靈敏要求不很高的地方使用,本系統(tǒng)是一個(gè)較好的選擇。功能概述人體接近模塊上的紅外熱釋電傳感器在通電后持續(xù)監(jiān)控外部紅外線熱信號(hào),當(dāng)在其監(jiān)控區(qū)域范圍內(nèi)產(chǎn)生了一定范圍內(nèi)變化的紅外熱信號(hào)(人體紅外信號(hào)),熱釋電傳感器將熱信號(hào)轉(zhuǎn)換為電信號(hào)通過(guò)其模塊電路轉(zhuǎn)化成單片機(jī)能區(qū)分的電平信號(hào)。單片機(jī)檢測(cè)到信號(hào)后轉(zhuǎn)化為字符串發(fā)送到無(wú)線模塊上,無(wú)線模塊接收到數(shù)據(jù)后轉(zhuǎn)化成數(shù)據(jù)包高速發(fā)送出去并立即轉(zhuǎn)換為接收模式,等待主機(jī)發(fā)來(lái)確認(rèn)信號(hào),接收到確認(rèn)信號(hào)后確認(rèn)發(fā)送成功,傳輸模塊進(jìn)入待機(jī)模式,等待下一個(gè)數(shù)據(jù)的到來(lái)。主機(jī)模塊功能由時(shí)間產(chǎn)生芯片、顯示時(shí)間和信號(hào)變化的顯示器(液晶屏)、報(bào)警器件(蜂鳴器)、信號(hào)接收裝置(無(wú)線模塊)組成、時(shí)間修改裝置(紅外接收頭和紅外遙控器)。其中時(shí)間芯片能內(nèi)部產(chǎn)生精準(zhǔn)的時(shí)間信號(hào),并保存到其內(nèi)部的寄存器中,單片機(jī)讀取其寄存器時(shí)間數(shù)據(jù)然后經(jīng)過(guò)處理后發(fā)送至顯示器顯示。無(wú)線模塊接收到從機(jī)模塊發(fā)送過(guò)來(lái)的數(shù)據(jù)后,將人體接近模塊的數(shù)據(jù)存儲(chǔ)到無(wú)線數(shù)據(jù)模塊中,然后通過(guò)SPI總線將數(shù)據(jù)傳送到單片機(jī)中,單片機(jī)處理數(shù)據(jù)后送至液晶顯示器上顯示。如果接收到的數(shù)據(jù)超過(guò)或者達(dá)到預(yù)設(shè)的效果,則蜂蜜器產(chǎn)生報(bào)警。紅外接收頭主要接收紅外遙控器通過(guò)外部中斷發(fā)送過(guò)來(lái)的數(shù)據(jù)包,然后將數(shù)據(jù)包送至單片機(jī)中,單片機(jī)外部中斷檢測(cè)到數(shù)據(jù)后停止主程序的執(zhí)行,轉(zhuǎn)向執(zhí)行中斷程序,中斷執(zhí)行完畢后通過(guò)返回來(lái)的值實(shí)現(xiàn)時(shí)間的修改和蜂蜜器報(bào)警解除等功能。人體接近無(wú)線報(bào)警實(shí)現(xiàn)過(guò)程為:當(dāng)人體接近到熱釋電傳感器范圍內(nèi)時(shí),傳感器檢測(cè)到信號(hào)動(dòng)作并將信號(hào)傳入從機(jī)模塊的CPU中,CPU檢測(cè)到信號(hào)傳入便馬上通過(guò)SPI總線向無(wú)線傳輸模塊中發(fā)送預(yù)設(shè)標(biāo)志數(shù)據(jù)。傳輸完畢后,無(wú)線模塊自動(dòng)加上地址位、檢驗(yàn)位、開(kāi)始位等打包成一個(gè)數(shù)據(jù)包并在加強(qiáng)模式下高速發(fā)送出去。主機(jī)模塊檢測(cè)到數(shù)據(jù)包并確認(rèn)數(shù)據(jù)正確后去除發(fā)送模塊添加的數(shù)據(jù)部分取出發(fā)送來(lái)的數(shù)據(jù)并發(fā)送至主機(jī)模塊的CPU中,CPU檢測(cè)是否是人體接近信號(hào)。判別無(wú)誤后,CPU向顯示器發(fā)送顯示'F'指令,刷新顯示屏的初始化設(shè)置的'N'顯示并控制蜂鳴器發(fā)聲,借以通知主機(jī)安裝房間有人進(jìn)入檢測(cè)區(qū)域。當(dāng)主機(jī)檢測(cè)房間監(jiān)控人員察覺(jué)后可以通過(guò)遙控鍵來(lái)解除報(bào)警,再去處理問(wèn)題。另外,主機(jī)模塊上還附加了一個(gè)精確的萬(wàn)年歷功能,主機(jī)開(kāi)機(jī)后進(jìn)入顯示器自檢界面,進(jìn)入歡迎界面停留后進(jìn)入時(shí)鐘顯示界面,該界面顯示當(dāng)前年、月、日、時(shí)、分、秒、星期并根據(jù)當(dāng)前時(shí)間不斷進(jìn)行刷新。該時(shí)鐘具有兩個(gè)較為明顯的特點(diǎn):一是采用DS12C887這款時(shí)鐘芯片來(lái)作為時(shí)間發(fā)生芯片,這款芯片的最大特點(diǎn)是它能在主機(jī)斷電后持續(xù)工作長(zhǎng)達(dá)10年的時(shí)間,而且時(shí)間精確度很高;其二是在調(diào)節(jié)時(shí)間日期的功能上取消了原有的用主機(jī)鍵盤(pán)調(diào)節(jié)的模式,改用紅外遙控來(lái)修改時(shí)間,方便工作人員的同時(shí)也充分的利用了遙控的資源??傮w方案2.1總體分析本設(shè)計(jì)主要主要是實(shí)現(xiàn)通過(guò)對(duì)重要地區(qū)的人體接近檢測(cè)達(dá)到人體接近重要地帶時(shí)放置在重要地方附近的主機(jī)系統(tǒng)顯示并報(bào)警,以及主機(jī)系統(tǒng)精確顯示當(dāng)前時(shí)間并能通過(guò)紅外遙控修改當(dāng)前的時(shí)間的功能。整個(gè)系統(tǒng)采用單片機(jī)作為控制元件,輔助采用人體接近釋電模塊作為檢測(cè)人體接近并將信號(hào)傳入單片機(jī)作為檢測(cè)傳感器;用NRF24L01無(wú)線傳輸模塊作為兩系統(tǒng)間的無(wú)線傳輸設(shè)備;使用紅外接收頭作為紅外信號(hào)接收設(shè)備。整個(gè)過(guò)程通過(guò)傳感器不斷對(duì)外檢測(cè)信號(hào)并傳入到單片機(jī)實(shí)現(xiàn)對(duì)人體接近的實(shí)時(shí)監(jiān)控,通過(guò)紅外遙控的按鍵來(lái)修改當(dāng)前時(shí)間及日期值并可以作為人體接近報(bào)警的解除開(kāi)關(guān)。2.2方案框圖1602液晶顯示器1602液晶顯示器74HC595鎖存芯片74HC595鎖存芯片STC89C52RC單片機(jī)NRF24L01無(wú)線STC89C52RC單片機(jī)NRF24L01無(wú)線發(fā)送模塊LED信號(hào)顯示燈NRF24L01無(wú)線接收模塊STC12C5410AD單片機(jī)人體接近檢測(cè)模塊人體蜂鳴器蜂鳴器DS12C887時(shí)鐘芯片DS12C887時(shí)鐘芯片紅外接收頭LED信號(hào)顯示燈帶有紅外發(fā)射電路的紅外遙控紅外接收頭LED信號(hào)顯示燈帶有紅外發(fā)射電路的紅外遙控 系統(tǒng)構(gòu)成3.1人體接近模塊3.1.1STC12C5410AD單片機(jī)介紹STC12C5410AD系列單片機(jī)是宏晶科技生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),是高速/低功耗/超強(qiáng)抗干擾的新一代8051單片機(jī)。指令代碼完全兼容傳統(tǒng)的8051單片機(jī),但速度快8-12倍,內(nèi)部集成MAX810專(zhuān)用復(fù)位電路。4路PWM,8路高速10位A/D,D/A轉(zhuǎn)換,針對(duì)電機(jī)控制,強(qiáng)干擾場(chǎng)合。1,增強(qiáng)型8051CPU,1T,單時(shí)鐘/機(jī)器周期,指令代碼完全兼容傳統(tǒng)的8051單片機(jī)。2,工作電壓:5.5-3.3V。3,工作頻率范圍為0-35MHZ,相當(dāng)于普通單片機(jī)8051的0-420MHZ,實(shí)際工作頻率可達(dá)到48MHZ。4,10Kflash存儲(chǔ)空間。5,片上集成512字節(jié)的RAM。6,15個(gè)普通I/O口,可設(shè)置成四種模式:準(zhǔn)雙向口/弱上拉,推免/強(qiáng)上拉,僅為輸入/高阻,開(kāi)漏,每個(gè)I/O口驅(qū)動(dòng)能力可達(dá)到20MA,但整個(gè)芯片最大不能超過(guò)55MA。7,ISP(在線系統(tǒng)編程)/IAP(在應(yīng)用可編程),無(wú)需專(zhuān)用編程器,無(wú)需專(zhuān)用仿真器,可通過(guò)串口直接下載用戶程序,數(shù)秒即可完成一片。8,EEPROM功能。9,看門(mén)狗。10,時(shí)鐘源:外部高精度時(shí)鐘,內(nèi)部R/C振蕩器。用戶在下載程序時(shí)可選擇使用內(nèi)部振蕩器還是外部時(shí)鐘。常溫下內(nèi)部振蕩器的頻率為5.2MHZ-6.8MHZ。精度要求不高時(shí),可選用內(nèi)部時(shí)鐘。11,共2個(gè)16位定時(shí)/計(jì)數(shù)器,但可以用PCA模塊再產(chǎn)生4個(gè)定時(shí)器。12,2路外部中斷,可選擇下降沿觸發(fā)和低電平觸發(fā)兩種方式。13,4路PWM。14,8路10位高精度A/D,D/A轉(zhuǎn)換。15,通用全雙工異步串行口(UART),由于STC12系列是高速的,亦可以用定時(shí)器軟件實(shí)現(xiàn)多串口。16,SPI同步通信口,有主機(jī)/從機(jī)模式。17,工作溫度范圍:-40—+85。3.1.2人體感應(yīng)模塊基于紅外線技術(shù)的自動(dòng)控制產(chǎn)品,靈敏度高,可靠性強(qiáng),超低電壓工作模式,廣泛應(yīng)用于各類(lèi)自動(dòng)感應(yīng)電器設(shè)備,尤其是干電池供電的自動(dòng)控制產(chǎn)品。
模塊電氣參數(shù):電氣參數(shù)0丫廠-1^003人體感應(yīng)模塊工作電壓范圍004.5-20、靜態(tài)電流〈50以八電平輸出高3.3乂/低例觸發(fā)方式^不可重復(fù)觸發(fā)很重復(fù)觸發(fā)延時(shí)時(shí)間58(默認(rèn)〉可制作范圍零點(diǎn)幾秒-幾十分鐘封鎖時(shí)間1.58(默認(rèn)〉可制作范圍零點(diǎn)幾秒-幾十秒電路板外形尺寸感應(yīng)角度〈100度錐角感應(yīng)距離7米以內(nèi)工作溫度-15-+70度感應(yīng)透鏡尺寸直徑32MM默認(rèn))模塊功能特點(diǎn):1.全自動(dòng)感應(yīng):人進(jìn)入其感應(yīng)范圍則輸出高電平,人離開(kāi)感應(yīng)范圍則自動(dòng)延時(shí)關(guān)閉高電平,輸出低電平。2^光敏控制(可選擇,出廠時(shí)未設(shè)〉:可設(shè)置光敏控制,白天或光線強(qiáng)時(shí)不感應(yīng)。溫度補(bǔ)償(可選擇,出廠時(shí)未設(shè)、在夏天當(dāng)環(huán)境溫度升高至30?321:,探測(cè)距離稍變短,溫度補(bǔ)償可作一定的性能補(bǔ)償。4丨兩種觸發(fā)方式:〔可跳線選擇)^不可重復(fù)觸發(fā)方式:即感應(yīng)輸出高電平后,延時(shí)時(shí)間段一結(jié)束,輸出將自動(dòng)從高電平變?yōu)榈碗娖?;^可重復(fù)觸發(fā)方式:即感應(yīng)輸出高電平后,在延時(shí)時(shí)間段內(nèi),如果有人體在其感應(yīng)范圍活動(dòng),其輸出將一直保持高電平,直到人離開(kāi)后才延時(shí)將高電平變?yōu)榈碗娖剑ǜ袘?yīng)模塊檢測(cè)到人體的每一次活動(dòng)后會(huì)自動(dòng)順延一個(gè)延時(shí)時(shí)間段,并且以最后一次活動(dòng)的時(shí)間為延時(shí)時(shí)間的起始點(diǎn)〉。5^具有感應(yīng)封鎖時(shí)間(默認(rèn)設(shè)置:無(wú)封鎖時(shí)間、感應(yīng)模塊在每一次感應(yīng)輸出后(高電平變成低電平〉,可以緊跟著設(shè)置一個(gè)封鎖時(shí)間段,在此時(shí)間段內(nèi)感應(yīng)器不接受任何感應(yīng)信號(hào)。此功能可以實(shí)現(xiàn)“感應(yīng)輸出時(shí)間”和“封鎖時(shí)間”兩者的間隔工作,可應(yīng)用于間隔探測(cè)產(chǎn)品;同時(shí)此功能可有效抑制負(fù)載切換過(guò)程中產(chǎn)生的各種干擾。(此時(shí)間可設(shè)置在零點(diǎn)幾秒一幾十秒鐘)。6丨工作電壓范圍寬:默認(rèn)工作電壓0以』^-20乂。飛.微功耗:靜態(tài)電流〈50微安,特別適合干電池供電的自動(dòng)控制產(chǎn)品。8丨輸出高電平信號(hào):可方便與各類(lèi)電路實(shí)現(xiàn)對(duì)接。模塊感應(yīng)范圍:3.1.3NRF24L01無(wú)線通信模塊概述:nRF24L01是一款工作在2.4~2.5GHz世界通用ISM頻段的單片無(wú)線收發(fā)器芯片。無(wú)線收發(fā)器包括:頻率發(fā)生器、增強(qiáng)型SchockBurstTM模式控制器、功率放大器、晶體振蕩器、調(diào)制器、解調(diào)器。輸出功率、頻道選擇和協(xié)議的設(shè)置可以通過(guò)SPI接口進(jìn)行設(shè)置。極低的電流消耗:當(dāng)工作在發(fā)射模式下發(fā)射功率為-6dBm時(shí)電流消耗為9mA,接收模式時(shí)為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無(wú)數(shù)據(jù)傳輸?shù)綦娔J?表6關(guān)于nRF24L01I/O腳更詳細(xì)的描述請(qǐng)參見(jiàn)下面的表7。nRF24L01在不同模式下的引腳功能引腳名稱(chēng)方向發(fā)送模式接收模式待機(jī)模式掉電模式CE輸入高電平>10us高電平低電平-CSN輸入SPI片選使能,低電平使能SCK輸入SPI時(shí)鐘MOSI輸入SPI串行輸入MISO三態(tài)輸出SPI串行輸出IRQ輸出中斷,低電平使能表7、nRF24L01引腳功能待機(jī)模式:待機(jī)模式I在保證快速啟動(dòng)的同時(shí)減少系統(tǒng)平均消耗電流。在待機(jī)模式I下,晶振正常工作。在待機(jī)模式II下部分時(shí)鐘緩沖器處在工作模式。當(dāng)發(fā)送端TXFIFO寄存器為空并且CE為高電平時(shí)進(jìn)入待機(jī)模式II。在待機(jī)模式期間,寄存器配置字內(nèi)容保持不變。掉電模式:在掉電模式下,nRF24L01各功能關(guān)閉,保持電流消耗最小。進(jìn)入掉電模式后,nRF24L01停止工作,但寄存器內(nèi)容保持不變。啟動(dòng)時(shí)間見(jiàn)表格13。掉電模式由寄存器中PWR_UP位來(lái)控制數(shù)據(jù)包處理方式:nRF24L01有如下幾種數(shù)據(jù)包處理方式:ShockBurstTM(與nRF2401,nRF24E1,nRF2402,nRF24E2數(shù)據(jù)傳輸率為1Mbps時(shí)相同)增強(qiáng)型ShockBurstTM模式ShockBurstTM模式:ShockBurst模式下nRF24L01可以與成本較低的低速M(fèi)CU相連。高速信號(hào)處理是由芯片內(nèi)部的射頻協(xié)議處理的,nRF24L01提供SPI接口,數(shù)據(jù)率取決于單片機(jī)本身接口速度。ShockBurst模式通過(guò)允許與單片機(jī)低速通信而無(wú)線部分高速通信,減小了通信的平均消耗電流。在ShockBurstTM接收模式下,當(dāng)接收到有效的地址和數(shù)據(jù)時(shí)IRQ通知MCU,隨后MCU可將接收到的數(shù)據(jù)從RXFIFO寄存器中讀出。在ShockBurstTM發(fā)送模式下,nRF24L01自動(dòng)生成前導(dǎo)碼及CRC校驗(yàn),參見(jiàn)表格12。數(shù)據(jù)發(fā)送完畢后IRQ通知MCU。減少了MCU的查詢時(shí)間,也就意味著減少了MCU的工作量同時(shí)減少了軟件的開(kāi)發(fā)時(shí)間。nRF24L01內(nèi)部有三個(gè)不同的RXFIFO寄存器(6個(gè)通道共享此寄存器)和三個(gè)不同的TXFIFO寄存器。在掉電模式下、待機(jī)模式下和數(shù)據(jù)傳輸?shù)倪^(guò)程中MCU可以隨時(shí)訪問(wèn)FIFO寄存器。這就允許SPI接口可以以低速進(jìn)行數(shù)據(jù)傳送,并且可以應(yīng)用于MCU硬件上沒(méi)有SPI接口的情況下。增強(qiáng)型的ShockBurstTM模式:增強(qiáng)型ShockBurstTM模式可以使得雙向鏈接協(xié)議執(zhí)行起來(lái)更為容易、有效。典型的雙向鏈接為:發(fā)送方要求終端設(shè)備在接收到數(shù)據(jù)后有應(yīng)答信號(hào),以便于發(fā)送方檢測(cè)有無(wú)數(shù)據(jù)丟失。一旦數(shù)據(jù)丟失,則通過(guò)重新發(fā)送功能將丟失的數(shù)據(jù)恢復(fù)。增強(qiáng)型的ShockBurstTM模式可以同時(shí)控制應(yīng)答及重發(fā)功能而無(wú)需增加MCU工作量。圖ⅠnRF24L01在星形網(wǎng)絡(luò)中的結(jié)構(gòu)圖圖ⅡnRF24L01接口圖nRF24L01在接收模式下可以接收6路不同通道的數(shù)據(jù),見(jiàn)圖4。每一個(gè)數(shù)據(jù)通道使用不同的地址,但是共用相同的頻道。也就是說(shuō)6個(gè)不同的nRF24L01設(shè)置為發(fā)送模式后可以與同一個(gè)設(shè)置為接收模式的nRF24L01進(jìn)行通訊,而設(shè)置為接收模式的nRF24L01可以對(duì)這6個(gè)發(fā)射端進(jìn)行識(shí)別。數(shù)據(jù)通道0是唯一的一個(gè)可以配置為40位自身地址的數(shù)據(jù)通道。1~5數(shù)據(jù)通道都為8位自身地址和32位公用地址。所有的數(shù)據(jù)通道都可以設(shè)置為增強(qiáng)型ShockBurst模式。 3.2主機(jī)模塊3.2.11602液晶實(shí)物圖: 簡(jiǎn)介1602液晶也叫1602字符型液晶,它是一種專(zhuān)門(mén)用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5*7或者5*11的點(diǎn)陣組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符。每位之間都有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱耍荒茱@示圖形。液晶能顯示兩行字符,每行可顯示16位。模塊編程簡(jiǎn)便,刷新速度快,是一款低端的高性能顯示設(shè)備。管腳功能引腳說(shuō)明1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來(lái)的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,其中:引腳符號(hào)功能說(shuō)明1VSS一般接地2VDD接電源(+5V)3V0液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。4RSRS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。5R/WR/W為讀寫(xiě)信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫(xiě)操作。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操作說(shuō)明00寫(xiě)入指令寄存器(清除屏等)01讀busyflag(DB7),以及讀取位址計(jì)數(shù)器(DB0~DB6)值10寫(xiě)入數(shù)據(jù)寄存器(顯示各字型等)11從數(shù)據(jù)寄存器讀取數(shù)據(jù)注:關(guān)于E=H脈沖——開(kāi)始時(shí)初始化E為0,然后置E為1,再清0.busyflag(DB7):在此位為被清除為0時(shí),LCD將無(wú)法再處理其他的指令要求。接口示意圖3.2.2STC89C52RC+單片機(jī)介紹STC89C52RC+單片機(jī)是宏晶科技推出的新一代超強(qiáng)抗干擾/高速/低功耗的單片機(jī),指令代碼完全兼容傳統(tǒng)的8051單片機(jī),12時(shí)鐘/機(jī)器周期、6時(shí)鐘/機(jī)器周期可任意選擇1,增強(qiáng)型12時(shí)鐘/機(jī)器周期、6時(shí)鐘/機(jī)器周期8051CPU。2,工作電壓5.5-3.4V。3,工作頻率范圍0-40MHZ,相當(dāng)于傳統(tǒng)8051單片機(jī)的0-80MHZ實(shí)際工作頻率可到達(dá)48MHZ。4,片上集成4Kflash存儲(chǔ)器。5,片上集成512字節(jié)的RAM。6,通用I/O口32個(gè),復(fù)位后P1/P2/P3口為準(zhǔn)雙向口/弱上拉(普通8051傳統(tǒng)I/O口),P0口是開(kāi)漏輸出,作為總線拓展用時(shí),不用接上拉電阻;作為普通I/O口用時(shí),需外加上拉電阻。7,ISP(在線系統(tǒng)編程)/IAP(在應(yīng)用可編程),無(wú)需專(zhuān)用編程器,無(wú)需專(zhuān)用仿真器,可通過(guò)串口直接下載用戶程序,數(shù)秒即可完成一片。8,EEPROM功能。9,看門(mén)狗。10,共3個(gè)16位定時(shí)/計(jì)數(shù)器,其中定時(shí)器0還可以當(dāng)為兩個(gè)8位定時(shí)器用。11,4路外部中斷,下降沿觸發(fā)或者低電平觸發(fā)。12,通用全雙工異步串行口(UART),由于STC12系列是高速的,亦可以用定時(shí)器軟件實(shí)現(xiàn)多串口。13,ISP(在線系統(tǒng)編程)/IAP(在應(yīng)用可編程),無(wú)需專(zhuān)用編程器,無(wú)需專(zhuān)用仿真器,可通過(guò)串口直接下載用戶程序,數(shù)秒即可完成一片。14,工作溫度范圍:-40—+85。15,封裝:PLCC-40,PIDP-44.16,管腳圖3.2.3紅外線接收頭及遙控紅外接收頭原理我們知道,人的眼睛能看到的可見(jiàn)光按波長(zhǎng)從長(zhǎng)到短排列,依次為紅、橙、黃、綠、青、藍(lán)、紫。其中紅光的波長(zhǎng)范圍為0.62~0.76μm;紫光的波長(zhǎng)范圍為0.38~0.46μm。比紫光波長(zhǎng)還短的光叫紫外線,比紅光波長(zhǎng)還長(zhǎng)的光叫紅外線。紅外線遙控就是利用波長(zhǎng)為0.76~1.5μm之間的近紅外線來(lái)傳送控制信號(hào)的。紅外遙控系統(tǒng)紅外遙控的概述:紅外線的光譜位于紅色光之外,波長(zhǎng)是0.76~1.5μm,比紅光的波長(zhǎng)還長(zhǎng)。紅外遙控是利用紅外線進(jìn)行傳遞信息的一種控制方式,紅外遙控具有抗干擾,電路簡(jiǎn)單,容易編碼和解碼,功耗小,成本低的優(yōu)點(diǎn)。紅外遙控幾乎適用所有家電的控制。紅外遙控系統(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ā)射端要對(duì)晶振進(jìn)行整數(shù)分頻,分頻系數(shù)一般取12,所以455kHz÷12≈37.9kHz≈38kHz。圖2載波波形2.發(fā)射系統(tǒng)目前有很多種芯片可以實(shí)現(xiàn)紅外發(fā)射,可以根據(jù)選擇發(fā)出不同種類(lèi)的編碼。由于發(fā)射系統(tǒng)一般用電池供電,這就要求芯片的功耗要很低,芯片大多都設(shè)計(jì)成可以處于休眠狀態(tài),當(dāng)有按鍵按下時(shí)才工作,這樣可以降低功耗芯片所用的晶振應(yīng)該有足夠的耐物理撞擊能力,不能選用普通的石英晶體,一般是選用陶瓷共鳴器,陶瓷共鳴器準(zhǔn)確性沒(méi)有石英晶體高,但通常一點(diǎn)誤差可以忽略不計(jì)。紅外線通過(guò)紅外發(fā)光二極管(LED)發(fā)射出去,紅外發(fā)光二極管(紅外發(fā)射管)內(nèi)部構(gòu)造與普通的發(fā)光二極管基本相同,材料和普通發(fā)光二極管不同,在紅外發(fā)射管兩端施加一定電壓時(shí),它發(fā)出的是紅外線而不是可見(jiàn)光。圖3b射極輸出驅(qū)動(dòng)電路圖3a簡(jiǎn)單驅(qū)動(dòng)電路如圖3a和圖3b是LED的驅(qū)動(dòng)電路,圖3a是最簡(jiǎn)單電路,選用元件時(shí)要注意三極管的開(kāi)關(guān)速度要快,還要考慮到LED的正向電流和反向漏電流,一般流過(guò)LED的最大正向電流為100mA,電流越大,其發(fā)射的波形強(qiáng)度越大。圖3a電路有一點(diǎn)缺陷,當(dāng)電池電壓下降時(shí),流過(guò)LED的電流會(huì)降低,發(fā)射波形強(qiáng)度降低,遙控距離就會(huì)變小。圖3b所示的射極輸出電路可以解決這個(gè)問(wèn)題,兩個(gè)二極管把三級(jí)管基極電壓鉗位在1.2V左右,因此三級(jí)管發(fā)射極電壓固定在0.6V左右,發(fā)射極電流IE基本不變,根據(jù)IE≈IC,所以流過(guò)LED的電流也基本不變,這樣保證了當(dāng)電池電壓降低時(shí)還可以保證一定的遙控距離。接口電路圖:3.2.4DS12C887時(shí)鐘芯片芯片特點(diǎn)7實(shí)時(shí)能直接替C鐘S7同它88BS7由于87夠動(dòng)世、信加年問(wèn);27帶鋰部?jī)?nèi)息持0久內(nèi)錄2制和4兩在2用M和PM上午表兩用一用D碼;S27中有8字節(jié)其中有1節(jié)儲(chǔ),4字節(jié)AM用SC87的,存13通用M用此對(duì)DSC887程以波可三過(guò)引腳功能7的引圖1各能GNVC:其中CCV輸,GD地當(dāng)C輸入V時(shí)用訪問(wèn)87內(nèi)M的可、當(dāng)VCC輸V,對(duì)部M進(jìn)、時(shí)正片當(dāng)C輸V27動(dòng)電內(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:寫(xiě)該有2式當(dāng)T接C時(shí),Wra模此腳區(qū)讀寫(xiě)當(dāng)W電,RW時(shí);當(dāng)OT接ND時(shí),作在l此許即Wrl。入效(19)中入效效對(duì)S87內(nèi)的和M中的有僅控有型,ESET接C樣可證27掉,制影在7有1字節(jié)AM儲(chǔ),4用制4,軟件設(shè)計(jì)4.1人體接近動(dòng)作模塊流程圖4.2主機(jī)模塊流程圖開(kāi)始開(kāi)始開(kāi)始系統(tǒng)初始化系統(tǒng)初始化系統(tǒng)初始化系統(tǒng)初始化 M鍵是否按下偶數(shù)次M鍵是否按下偶數(shù)次定義發(fā)送字符數(shù)組定義發(fā)送字符數(shù)組光標(biāo)在首位置閃爍關(guān)閉信號(hào)LEDP3.4口是否為高時(shí)間和日期顯示光標(biāo)在首位置閃爍關(guān)閉信號(hào)LEDP3.4口是否為高時(shí)間和日期顯示 N光標(biāo)是否越界人體接近顯示 Y光標(biāo)是否越界人體接近顯示換行開(kāi)信號(hào)LED Y換行開(kāi)信號(hào)LED解除報(bào)警是否按下解除報(bào)警是否按下 N NZ鍵是否按下將數(shù)據(jù)發(fā)送到無(wú)線發(fā)送模塊Z鍵是否按下將數(shù)據(jù)發(fā)送到無(wú)線發(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)閉信號(hào)LED數(shù)值鍵是否按下關(guān)閉信號(hào)LEDN清除發(fā)送標(biāo)志清除發(fā)送標(biāo)志 Y修改當(dāng)前時(shí)間和日期修改當(dāng)前時(shí)間和日期結(jié)論此次設(shè)計(jì)最難調(diào)試成功也是疑點(diǎn)最大的部分為無(wú)線傳輸模塊,該系統(tǒng)中采用了24L01這款無(wú)線芯片,該芯片支持最多6對(duì)1的雙向傳輸,起初設(shè)計(jì)時(shí)由于考慮到了1收2發(fā)的模式。這種模式上,先有兩個(gè)發(fā)送塊分別發(fā)送數(shù)據(jù)和不同的地址,接收塊收到數(shù)據(jù)后自動(dòng)將接收到的地址發(fā)送出去,而將數(shù)據(jù)存入地址對(duì)應(yīng)的通道中。此步驟的實(shí)現(xiàn)可以是多對(duì)一實(shí)時(shí)傳輸,但當(dāng)數(shù)據(jù)卻一次只能一個(gè)通道的傳入,這就造成了數(shù)據(jù)處理上的先后,而這種實(shí)時(shí)上的差別反映到系統(tǒng)調(diào)試時(shí)的狀態(tài)就是:兩個(gè)傳感器模塊發(fā)送的數(shù)據(jù)不能及時(shí)處理,傳感器動(dòng)作一段時(shí)間后,主機(jī)顯示器才顯示出變化,甚至蜂鳴器延時(shí)報(bào)警,而兩個(gè)模塊分別工作時(shí)又能恢復(fù)原狀,這種實(shí)時(shí)性上的差異造成了整個(gè)系統(tǒng)的靈敏度大大降低。當(dāng)然,這種現(xiàn)象的出現(xiàn)不完全在無(wú)線通信模塊與單片機(jī)上,也與單片機(jī)自身的處理速度有關(guān)。要解決這個(gè)問(wèn)題就得考慮到無(wú)線模塊與單片機(jī)的通信問(wèn)題,軟件設(shè)計(jì)上基于原有的單對(duì)單的通信模式必須得到較大的改動(dòng),采用連續(xù)讀取出兩個(gè)通道中的數(shù)據(jù)來(lái)改善,但由于兩個(gè)通道接收的識(shí)別問(wèn)題以及接收后兩個(gè)通道的區(qū)分問(wèn)題在調(diào)試的最后階段沒(méi)有得到有效解決。因此為了降低設(shè)計(jì)的復(fù)雜度以及考慮到系統(tǒng)整體的控制性能,最終放棄了累贅的溫度無(wú)線傳輸部分,大大提高了系統(tǒng)的穩(wěn)定程度。再者,STC系列單片機(jī)雖然在性能上相對(duì)于傳統(tǒng)的8051單片機(jī)有較大的提升,然而本次設(shè)計(jì)中由于加入了基于DS12C887時(shí)鐘芯片的實(shí)時(shí)時(shí)鐘,而時(shí)鐘的工作模式為每秒鐘更新一次數(shù)據(jù),這就要求主機(jī)能在每秒的末尾及時(shí)的讀取芯片數(shù)據(jù),然后送入液晶顯示。這種情況在單獨(dú)調(diào)試主機(jī)與芯片的時(shí)候時(shí)間顯示較為正常,然而當(dāng)聯(lián)調(diào)的時(shí)候由于單片機(jī)處理數(shù)據(jù)大大增加,while內(nèi)的指令全部執(zhí)行一遍的時(shí)間也大大增加,導(dǎo)致了不能及時(shí)的讀取出芯片中的數(shù)據(jù)而不能及時(shí)更新,從而顯示的時(shí)候每秒之間轉(zhuǎn)換的時(shí)間不等甚至大大超過(guò)了一秒,而整體時(shí)間又是精準(zhǔn)的。這個(gè)問(wèn)題通過(guò)將芯片的中斷口接上可以得到有效的解決,但硬件已經(jīng)確定無(wú)法更改,只能通過(guò)更換處理速度快的單片機(jī)來(lái)解決,但這又增加了成本,背離了系統(tǒng)設(shè)計(jì)的初衷,因此解決這個(gè)問(wèn)題的方法只有通過(guò)采取將while內(nèi)部指令的時(shí)間不斷精簡(jiǎn),直到達(dá)到一個(gè)理想效果的軟件方式來(lái)調(diào)節(jié),這也是本系統(tǒng)的一個(gè)較大的缺陷。最后就是液晶顯示的一些問(wèn)題,系統(tǒng)調(diào)試中當(dāng)按“MODE”鍵退出時(shí)間調(diào)試時(shí),液晶顯示上會(huì)出現(xiàn)不斷掃描的一些影子,影響了視覺(jué)效果。問(wèn)題的產(chǎn)生可能在調(diào)節(jié)時(shí)鐘的時(shí)候閃爍點(diǎn)的移動(dòng)導(dǎo)致退出后液晶顯示問(wèn)題。調(diào)試的過(guò)程中通過(guò)在軟件上編寫(xiě)退出時(shí)的清屏指令改善過(guò)這個(gè)問(wèn)題,但效果不是很好,只有一部分機(jī)會(huì)液晶不會(huì)出現(xiàn)這種情況,也成為本系統(tǒng)的一個(gè)遺留問(wèn)題。綜合以上結(jié)論,本系統(tǒng)仍存在很多缺陷,希望自己在以后對(duì)系統(tǒng)不斷的改良中能有效的解決掉這些問(wèn)題,設(shè)計(jì)出一個(gè)性能更加優(yōu)良的系統(tǒng)。謝詞本次設(shè)計(jì)過(guò)程中多虧了本班上的段亞強(qiáng)同學(xué)不厭其煩的聽(tīng)我講述設(shè)計(jì)過(guò)程中的問(wèn)題,并討論解決辦法,正因?yàn)樗羞^(guò)使用此款無(wú)線芯片的經(jīng)驗(yàn)才使得我能這么快的掌握無(wú)線通信模塊的工作方式。也幸好有幾個(gè)能在我曠課時(shí)為我簽到答到的同學(xué),沒(méi)有他們,我還在為了一個(gè)結(jié)業(yè)成績(jī)?cè)谖彝耆珱](méi)興趣的課程里浪費(fèi)時(shí)間,不可能有將近一個(gè)月的時(shí)間靜心來(lái)做這個(gè)設(shè)計(jì);再者,沒(méi)有單片機(jī)相關(guān)課程的專(zhuān)業(yè)老師在課堂上給與我一些必須的專(zhuān)業(yè)知識(shí),我也不會(huì)具備這些能力。在這里,對(duì)這些給予我?guī)椭娜艘徊⒈硎靖兄x。參考文獻(xiàn)【1】郭天祥51單片機(jī)C語(yǔ)言教程:入門(mén)、提高、開(kāi)發(fā)、拓展全攻略北京:電子工業(yè)出版社,2009,1:323-331【2】程利民,姜新橋,朱曉玲接口應(yīng)用實(shí)踐【武職內(nèi)部教材】60-70【3】阮艷電子CAD北京:中國(guó)勞動(dòng)社會(huì)保障出版社,200716-32【4】余孟嘗模擬、數(shù)字及電力電子技術(shù)(上冊(cè))北京:機(jī)械工業(yè)出版社,1999.10【5】譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì)北京:清華大學(xué)出版社,2010.6【6】童詩(shī)白,華成英模擬電子技術(shù)基礎(chǔ)(第四版)北京:高等教育出版社,2006.5【7】閻石數(shù)字電子技術(shù)基礎(chǔ)(第五版)北京:高等教育出版社,2006.5其他資料均來(lái)源于互聯(lián)網(wǎng)上,這里對(duì)提供者表示感謝,恕此處無(wú)法一一列出附錄1程序代碼1.1人體接近模塊C代碼//********************此部分為人體接近模塊發(fā)送模塊驅(qū)動(dòng)**********************//********************存入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 //寫(xiě)寄存器指令#defineRD_RX_PLOAD0x61 //讀取接收數(shù)據(jù)指令#defineWR_TX_PLOAD0xA0 //寫(xiě)待發(fā)數(shù)據(jù)指令#defineFLUSH_TX0xE1 //沖洗發(fā)送FIFO指令#defineFLUSH_RX0xE2 //沖洗接收FIFO指令#defineREUSE_TX_PL0xE3 //定義重復(fù)裝載數(shù)據(jù)指令#defineNOP0xFF //保留//*************************************SPI(nRF24L01)寄存器地址****************************************************#defineCONFIG0x00//配置收發(fā)狀態(tài),CRC校驗(yàn)?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式#defineEN_AA0x01//自動(dòng)應(yīng)答功能設(shè)置#defineEN_RXADDR0x02//可用信道設(shè)置#defineSETUP_AW0x03//收發(fā)地址寬度設(shè)置#defineSETUP_RETR0x04//自動(dòng)重發(fā)功能設(shè)置#defineRF_CH0x05//工作頻率設(shè)置#defineRF_SETUP0x06//發(fā)射速率、功耗功能設(shè)置#defineSTATUS0x07//狀態(tài)寄存器#defineOBSERVE_TX0x08//發(fā)送監(jiān)測(cè)功能#defineCD0x09//地址檢測(cè)#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ù)長(zhǎng)度#defineRX_PW_P10x12//接收頻道0接收數(shù)據(jù)長(zhǎng)度#defineRX_PW_P20x13//接收頻道0接收數(shù)據(jù)長(zhǎng)度#defineRX_PW_P30x14//接收頻道0接收數(shù)據(jù)長(zhǎng)度#defineRX_PW_P40x15//接收頻道0接收數(shù)據(jù)長(zhǎng)度#defineRX_PW_P50x16//接收頻道0接收數(shù)據(jù)長(zhǎng)度#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í)函數(shù)/******************************************************************************************/voidinerDelay_us(unsignedcharn){ for(;n>0;n--) _nop_();}/****************************************************************************************************/*函數(shù):uintSPI_RW(uintuchar)/*功能:NRF24L01的SPI寫(xiě)時(shí)序/****************************************************************************************************/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)/*功能:用于寫(xiě)數(shù)據(jù):為寄存器地址,pBuf:為待寫(xiě)入數(shù)據(jù)地址,uchars:寫(xiě)入數(shù)據(jù)的個(gè)數(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讀寫(xiě)寄存器函數(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);//寫(xiě)本地地址 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS1,TX_ADR_WIDTH);//寫(xiě)接收端地址 SPI_RW_Reg(WRITE_REG+EN_AA,0x03);//頻道0和頻道1自動(dòng) 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ù)長(zhǎng)度,本次設(shè)置為5字節(jié) SPI_RW_Reg(WRITE_REG+RX_PW_P1,RX_PLOAD_WIDTH);//設(shè)置1通道接收數(shù)據(jù)長(zhǎng)度,本次設(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ū)動(dòng)函數(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級(jí)延時(shí)函數(shù)*****************/delay_ms(ucharms){ //延時(shí)子程序 uchari; while(ms--) { for(i=0;i<250;i++) { _nop_(); _nop_(); _nop_(); _nop_(); } }}/***********74HC595驅(qū)動(dòng)函數(shù)*******************/voidsend_HC595(ucharwrDat){uchari;for(i=0;i<8;i++){ SI=wrDat&0x80;//從數(shù)據(jù)的最高位開(kāi)始輸入 wrDat<<=1; //輸入后左移以為,準(zhǔn)備輸入第二位 SCLK=0; _nop_(); _nop_(); SCLK=1;//時(shí)鐘產(chǎn)生高電平跳變,數(shù)據(jù)移位 } RCK=0; _nop_(); _nop_(); RCK=1; //鎖存產(chǎn)生高電平跳變,數(shù)據(jù)輸出 }/**************寫(xiě)指令數(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);}/***************寫(xiě)顯示數(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個(gè)顯示}else { lcd_pos(0x40+pos2); lcd_wdat(CH); //第二排pos2個(gè)顯示}}/***********************************************************//********************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時(shí)關(guān)光標(biāo)閃爍,c=1時(shí)開(kāi)光標(biāo)閃爍{ucharkk=0x8;if(a!=0){kk+=4;}if(b!=0){kk+=2;}if(c!=0){kk+=1;}lcd_wcmd(kk); //寫(xiě)數(shù)據(jù)到指令寄存器}//*********************此部分為時(shí)間顯示部分*********************************//********************存入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中寫(xiě)入數(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;}/******首次操作輸入,以后不必再寫(xiě)入//**********首次操作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í)間顯示函數(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í)間日期顯示函數(shù)***********************voiddis_dat_t(){//first_init_ds();dis_date();dis_week();dis_time();}//*****************無(wú)線人體接近顯示與報(bào)警模塊****************************//*******************存入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 //寫(xiě)寄存器指令#defineRD_RX_PLOAD0x61 //讀取接收數(shù)據(jù)指令#defineWR_TX
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村房屋建房合同范例
- 保姆和家政合同范本
- 兒童樂(lè)園實(shí)施合同范本
- 前期工程門(mén)窗合同范本
- 公地共用合同范本
- 傳媒主播合同范本
- 農(nóng)業(yè)抵押合同范本
- 義診合作協(xié)議合同范本
- 2025年標(biāo)準(zhǔn)鍵盤(pán)行業(yè)深度研究分析報(bào)告
- 寫(xiě)結(jié)婚合同范例
- 《行政倫理學(xué)教程(第四版)》課件 第7、8章?行政人格、行政組織倫理
- 2024年江蘇蘇??毓杉瘓F(tuán)有限公司招聘筆試沖刺題(帶答案解析)
- 2023年4月自考00504藝術(shù)概論試題及答案含解析
- 美麗的大自然(教案)2023-2024學(xué)年美術(shù)一年級(jí)下冊(cè)
- 2024年低壓電工考試題庫(kù)(試題含答案)
- 成都特色民俗課件
- 地質(zhì)勘探行業(yè)分析
- 花城版音樂(lè)四下-第四課-認(rèn)知音樂(lè)節(jié)奏(教案)
- 寵物醫(yī)院?jiǎn)T工手冊(cè)
- 2024年高考英語(yǔ)讀后續(xù)寫(xiě)高分寶典專(zhuān)題08讀后續(xù)寫(xiě)肢體動(dòng)作描寫(xiě)積累1(詞-句-文)講義
- 商業(yè)與公積金貸款政策
評(píng)論
0/150
提交評(píng)論