版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、單片機遙控系統(tǒng)是將紅外遙控技術和單片機應用技術相結(jié)合的一種方案。本系統(tǒng)為紅外遙控電子密碼鎖的控制管理部分,只要再連接上不同用途的電磁鎖即可成為一個完整的紅外遙控電子密碼鎖系統(tǒng)應用到各種領域中。而且本系統(tǒng)還設計有學習NEC紅外編碼遙控器的功能,通過紅外接收解碼電路,把遙控器的鍵碼還原并儲存起來,再利用查找對比的方法便能夠識別不同的遙控器,大大提高了系統(tǒng)的靈活性和實用性。本系統(tǒng)以單片機作為核心元件將電子密碼鎖和無線遙控技術結(jié)合起來,使其具有修改密碼、報警鎖定等功能,不僅能進行遠距離遙控解鎖,還能實現(xiàn)近距離按鍵密碼初始化及復位解除報警。同時采用E2PROM作為存儲單元,方便用戶存儲、修改密碼和遙控器
2、鍵碼;采用LCD顯示令使用更加方便直觀。紅外線遙控電子密碼鎖能實現(xiàn)多種控制功能,改善了傳統(tǒng)機械鎖的各種缺點,有較好的市場發(fā)展前景和技術應用價值。而且本系統(tǒng)的紅外接收解碼部分延時計數(shù)準確,并且有錯誤校驗,所以整個接收解碼的準確性非常高。設計電路主要由紅外線解碼學習電路、密碼修改和存儲電路、聲光提示報警電路、LCD顯示電路組成。系統(tǒng)能完成輸入密碼開鎖、出錯報警、超次鎖定、修改用戶密碼等基本的密碼鎖的功能,并且還能實現(xiàn)遠距離遙控、按鍵密碼初始化、掉電存儲、聲光提示、遙控器學習識別等附加功能。關鍵詞:電子密碼鎖紅外遙控單片機NEC編碼遙控器學習目 錄1 設計目的意義 . . . . . . . . .
3、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 在線編程電路和實物圖. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.
4、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53 設計方案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5、 . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124硬件分析及設計. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . . . . . . . . . . . . . . . .
6、. . . . . . . . . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124.1.2 NEC編碼格式介紹. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7、. . . . . . . . . . . . . . . . . . . . . . .14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8、 . . . . . . . . . . . . . . . . .14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155 軟件設計. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15. . . . . . . . . . . . . . . . . . . . . . . .
9、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13. . . . . . . . . . . . . . . . . . . .
10、. . . . . . . . . . . . . . . . . . . . . . . . . . . .145.2.3密碼判斷、報警及修改程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136功能分析及總結(jié). . . . . . . . . . . . . . . . .
11、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137具體操作流程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13參考文獻. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12、 . . 16附錄. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 設計目的意義隨著人們生活水平的提高,如何實現(xiàn)家庭防盜這一問題也變得尤其重要。目前國內(nèi),大部分人使用的還是傳統(tǒng)的機械鎖。傳統(tǒng)的機械鎖由于其構造的簡單,被撬的事件屢見不鮮。即使是一把質(zhì)量過關的機械鎖,通過急開鎖,甚至可以在不損壞鎖的前提下將鎖打開。而且,在日常的生活和工作中,若使用傳統(tǒng)的機械式鑰匙開鎖,人們常需攜帶多把鑰匙,
13、使用極不方便,且鑰匙丟失后安全性即大打折扣。為此,本系統(tǒng)試著設計具有防盜報警功能的紅外線遙控電子密碼鎖來代替?zhèn)鹘y(tǒng)的機械式密碼鎖,克服了機械式密碼鎖密碼量少、安全性能差的缺點。而且還添加了紅外遙控、遙控器學習識別和LCD顯示等功能,可以實現(xiàn)遠距離開關鎖、修改密碼等,系統(tǒng)靈活性強,操作簡單直觀、使用非常方便。由于這是一次學生的實習項目,本產(chǎn)品未必能盡善盡美,但基本的要求還是可以滿足。2 在線編程電路和實物圖(詳見附錄1)2.2實物圖復位鍵LED燈指示蜂鳴器STC89C52RCLCD對比度調(diào)節(jié)電阻一體化紅外接收頭SM0038圖1 實物圖3設計方案3.1 發(fā)射模塊的方案使用NEC編碼格式紅外線遙控編碼
14、芯片uPD6122G等作為主芯片再加上外圍電路完成發(fā)射部分,或直接購買紅外線遙控編碼芯片的遙控器成品作為系統(tǒng)的發(fā)射部分。因為是紅外線遙控編碼專用芯片,其內(nèi)部已經(jīng)集成了按鍵檢測、處理和紅外編碼模塊。而且無須編程,使用十分方便。故市面上的絕大多數(shù)的紅外遙控器都是使用類似的方案,可見這方面的技術已經(jīng)相當成熟。在抗干擾能力上,因為沒有涉及到軟件,故其抗干擾能力強。3.2 接收模塊的方案發(fā)射模塊使用型號為HZ-FT007的20鍵車載MP3紅外遙控器和創(chuàng)維RC-585型DVD遙控器,因為它們都是采用NEC編碼格式的紅外遙控芯片作為主要芯片;使用一體化紅外接收頭SM0038和單片機STC89C52RC結(jié)合的
15、方式完成接收解碼模塊,學習識別NEC編碼格式的不同遙控器;使用單片機內(nèi)部eeprom作為存儲模塊;使用LCD1602A實現(xiàn)系統(tǒng)的顯示模塊。系統(tǒng)的總框圖如圖3所示。這樣的選擇使系統(tǒng)在較低成本的情況下較好地實現(xiàn)系統(tǒng)的功能,而且系統(tǒng)有著較高的抗干擾性和穩(wěn)定性。按鍵uPD6122GSM0038MCULCD1602電磁鎖NEC編碼遙控器圖2 選用方案系統(tǒng)框圖4硬件分析及設計4.1 發(fā)射模塊原理4.1.1紅外發(fā)送系統(tǒng)原理紅外遙控信號是一連串的二進制脈沖碼。為了使其在無線傳輸過程中免受其他紅外信號的干擾,通常都是先將其調(diào)制在特定的載波頻率上,然后再經(jīng)紅外發(fā)光二極管發(fā)射出去,紅外線接收裝置則會濾除其它雜波只接
16、收該特定頻率的信號并將其還原成二進制脈沖碼。在本紅外遙控系統(tǒng)中,紅外信號的載波頻率為38KHz。通常,紅外遙控系統(tǒng)中所采用的編碼方式有兩種:通過脈沖寬度來實現(xiàn)信號調(diào)制的脈寬調(diào)制(PWM)和通過脈沖串之間的時間間隔來實現(xiàn)信號調(diào)制的脈時調(diào)制(PPM)。本系統(tǒng)是采用PPM方法,即用兩個脈沖之間的時間間隔來表示二進制信息。為了確保發(fā)送端和接收端之間數(shù)據(jù)傳輸?shù)臏蚀_無誤,紅外線信號還要按照特定的傳輸協(xié)議來進行信號傳輸。常用的紅外線信號傳輸協(xié)議有NEC協(xié)議、RC-5協(xié)議、RC-6協(xié)議、Sharp協(xié)議等。4.1.2NEC編碼格式介紹本系統(tǒng)使用的型號為HZ-FT007的20鍵車載MP3紅外遙控器和創(chuàng)維RC-58
17、5型DVD遙控器請參看附錄2中的實物圖,它們主要芯片都是NEC編碼格式的紅外遙控芯片。NEC編碼廣泛應用于電視機,DVD,PC電腦,音響等,是比較常用的一種紅外編碼格式。下面以NEC編碼標準的紅外編碼芯片uPD6122G作為例子介紹。NEC遙控編碼是連續(xù)的32位二進制碼組,其中的前十六位是用戶碼,后16位為8位的數(shù)據(jù)碼及其反碼。在每次編碼之前還會發(fā)送9ms高電平和4.5ms低電平組成的引導碼(或稱起始碼)。而且第二段的用戶碼也可以在遙控應用電路中被設置為第一段用戶碼的反碼。它的幀結(jié)構如下圖所示。圖3 幀結(jié)構NEC編碼標準是以用不同脈沖的時間間隔來區(qū)分0和1的,uPD6122Gmsmsms的組合
18、表示二進制的0msms,周期為的組合表示二進制的1。其波形如下圖所示。圖4 脈沖波形圖使用455KHz晶振時各代碼所占的時間如下圖所示:圖5 晶振時各代碼所占時間uPD6122G按鍵輸出有兩種方式:一種是每次按鍵都輸出完整的一幀數(shù)據(jù);另一種是按下按鍵不松開時,發(fā)送完整的一幀數(shù)據(jù)后再發(fā)送重復碼,直到按鍵被松開。其波形如下圖所示。圖6 按鍵輸出波形4.2接收模塊原理4.2.1接收解碼原理接收解碼的關鍵是如何識別0和1,本系統(tǒng)使用的是一體化紅外接收頭進行紅外信號接收,在沒有信號的時候其輸出端是高電平,而有信號的時候是低電平,所以其輸出信號電平正好和遙控發(fā)射端相反。從上面的討論可以發(fā)現(xiàn)在遙控發(fā)射端0和
19、1均以0.56ms的高電平開始,不同的是低電平的寬度,0ms,1ms,所以必須根據(jù)低電平的寬度區(qū)別0和1。本系統(tǒng)用中斷的方式實現(xiàn)從接收頭到MCU的信號傳輸。如圖9所示,紅外接收頭的輸出端連接到單片機的INT0腳。接收頭輸出端有低電平信號輸出時引起單片機的中斷。單片機響應中斷并進行信號的接收解碼。解碼后的信號就變成相應的遙控器按鍵代碼,從而可以成為密碼鎖的密碼。接收頭SM0038MCUINT0圖7中斷接收示意圖4.2.2該模塊的硬件電路接收解碼電路由一體化紅外接收頭SM0038和單片機STC89C52RC組成。 STC系列單片機具有在系統(tǒng)中直接可編程特性,其好處是:省去購買通用編程器,單片機在用
20、戶系統(tǒng)上即可下載/燒錄用戶程序,而無須將單片機從已生產(chǎn)好的產(chǎn)品上拆下,再用通用編程器將程序代碼燒錄進單片機內(nèi)部。有些程序尚未定型的產(chǎn)品可以一邊生產(chǎn),一邊完善,加快了產(chǎn)品進入市場的速度,減小了新產(chǎn)品由于軟件缺陷帶來的風險。由于可以在用戶的目標系統(tǒng)上將程序直接下載進單片機看運行結(jié)果對錯,故無須仿真器,因此選擇使用這款單片機。一體化紅外接收頭SM0038是集信號放大、濾波、檢波、整形于一體的紅外接收器,電路內(nèi)置PIN二極管和前置放大器,采用可以紅外濾波的環(huán)氧樹脂材料封裝,可靠性高,不易受環(huán)境影響并可以防止非控制信號的輸出脈沖出現(xiàn)。它的內(nèi)部電路如圖10所示。圖8SM0038內(nèi)部結(jié)構圖SM0038內(nèi)置帶
21、通濾波器、積分器、和自動增益控制電路以抑制各種干擾和噪音。數(shù)據(jù)信號和干擾信號的主要區(qū)別在于載波頻率、脈沖波長和工作周期上。所以數(shù)據(jù)信號應該滿足載波信號的頻率盡量接近帶通濾波器的中心頻率(38KHZ);脈沖長度在300us以上;數(shù)據(jù)的編碼類型相兼容。而本系統(tǒng)選用的SM0038在這三方面和NEC編碼格式是相配的。4.3 存儲模塊原理STC89C51、52內(nèi)部都自帶有2K字節(jié)的EEPROM,54、55和58都自帶有16K字節(jié)的EEPROM,STC單片機是利用IAP技術實現(xiàn)的EEPROM,內(nèi)部Flash擦寫次數(shù)可達100,000 次以上,先來介紹下ISP與IAP的區(qū)別和特點。STC單片機內(nèi)部有幾個專門
22、的特殊功能寄存器負責管理ISP/IAP功能的,見表1。表1ISP/IAP相關寄存器列表名稱地址功能描述D7D6D5D4D3D2D1D0復位值ISP_DATAE2hFlash數(shù)據(jù)寄存器1111 1111ISP_ADDRHE3hFlash高字節(jié)地址寄存器0000 0000ISP_ADDRLE4hFlash低字節(jié)地址寄存器0000 0000ISP_CMDE5hFlash命令模式寄存器-MS2MS1MS0xxxx x000ISP_TRIGE6hFlash命令觸發(fā)寄存器xxxx xxxxISP_CONTRE7hISP/IAP 控制寄存器ISPENSWBSSWRST-WT2WT1WT0000x x000I
23、SP_DATA:ISP/IAP操作時的數(shù)據(jù)寄存器。ISP/IAP從Flash讀出的數(shù)據(jù)放在此處,向Flash寫入的數(shù)據(jù)也需放在此處。ISP_ADDRH:ISP/IAP操作時的地址寄存器高八位。ISP_ADDRL:ISP/IAP操作時的地址寄存器低八位。ISP_CMD:ISP/IAP操作時的命令模式寄存器,須命令觸發(fā)寄存器觸發(fā)方可生效。命令模式如表2所示。表2 ISP_CMD寄存器模式設置D7D6D5D4D3D2D1D0模式選擇保留命令選擇-000待機模式,無ISP操作-001對用戶的應用程序flash區(qū)及數(shù)據(jù)flash區(qū)字節(jié)讀-010對用戶的應用程序flash區(qū)及數(shù)據(jù)flash區(qū)字節(jié)編程-01
24、1對用戶的應用程序flash區(qū)及數(shù)據(jù)flash區(qū)扇區(qū)擦除程序在系統(tǒng)ISP程序區(qū)時可以對用戶應用程序區(qū)/數(shù)據(jù)Flash區(qū)(EEPROM)進行字節(jié)讀/字節(jié)編程/扇區(qū)擦除;程序在用戶應用程序區(qū)時,僅可以對數(shù)據(jù)Flash區(qū)(EEPROM)進行字節(jié)讀/字節(jié)編程/扇區(qū)擦除。STC89C51RC/RD+系列單片機出廠時已經(jīng)固化有ISP引導碼,并設置為上電復位進入ISP程序區(qū),并且出廠時就已完全加密。ISP_TRIG:ISP/IAP操作時的命令觸發(fā)寄存器。在ISPEN(ISP_CONTR.7) =1時,對ISP_TRIG 先寫入46h,再寫入B9h,ISP/IAP命令才會生效。STC89C52RC,STC89
25、LE52RC單片機內(nèi)部可用Data Flash(EEPROM)的地址如表3所示,其它型號單片機請查閱相關資料。表3 STC89C52RC、STC89LE52RC單片機內(nèi)部EEPROM地址表第一扇區(qū)第二扇區(qū)第三扇區(qū)第四扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2000H21FFH2200H23FFH2400H25FFH2600H27FFH第五扇區(qū)第六扇區(qū)第七扇區(qū)第八扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2800H29FFH2A00H2BFFH2C00H2DFFH2E00H2FFFH每個扇區(qū)為512字節(jié),建議大家在寫程序時,將同一次修改的數(shù)據(jù)
26、放在同一個扇區(qū), 方便修改,因為在執(zhí)行擦除命令時,一次最少要擦除一個扇區(qū)的數(shù)據(jù),每次在更新數(shù)據(jù)前都必須要擦除原數(shù)據(jù)方可重新寫入新數(shù)據(jù),不能直接在原來數(shù)據(jù)基礎上更新內(nèi)容。4.4液晶顯示模塊原理系統(tǒng)中采用LCD1602作為顯示器件輸出信息。與傳統(tǒng)的LED數(shù)碼管顯示器件相比,液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富等優(yōu)點,而且不需要外加驅(qū)動電路,現(xiàn)在液晶顯示模塊已經(jīng)是單片機應用設計中最常用的顯示器件了。LCD1602可以顯示2行×16個字符,具有8位數(shù)據(jù)總線D0-D7,和RS、R/W、E三個控制端口,工作電壓為5V,并且?guī)в凶址麑Ρ榷日{(diào)節(jié)和背光設置。LCD1602與單片機的連接電路圖參
27、考附錄3。其管腳功能簡介如下:VL:LCD對比度調(diào)節(jié)端,電壓調(diào)節(jié)范圍為05V。接正電源時對比度最弱,接地電源時對比度最高,可以用一個10K的電位器來調(diào)整對比度;RS:數(shù)據(jù)或者指令選擇端。處理器寫入指令時,RS為低電平,寫入數(shù)據(jù)時,RS為高電平;R/W:讀寫控制端。R/W為高電平時,讀取數(shù)據(jù);R/W為低電平時,寫入數(shù)據(jù);E:LCD模塊使能信號控制端。寫數(shù)據(jù)時,需要下降沿觸發(fā)模塊;D0D7:8位數(shù)據(jù)總線,三態(tài)雙向;BLA: LED背光正極。需要背光時,BLA串接一個限流電阻接VCC;BLK: LED背光負極。5軟件設計5.1編程語言目前,對單片機的編程主要采用匯編和C語言。匯編語言有執(zhí)行效率高、速
28、度快、與硬件結(jié)合緊密等特點。尤其在進行I/O端口管理時,使用匯編語言有快捷、直觀的優(yōu)點。但是使用匯編語言相對于使用高級語言編程難度要大一些,且程序可讀性低,開放性差,從系統(tǒng)開發(fā)時間來看,效率不是很高。 C語言是一種結(jié)構化語言,可產(chǎn)生緊湊代碼。C語言可以用許多機器級函數(shù)直接控制操作8051硬件。與匯編語言相比,C語言有如下的優(yōu)點: 不要求了解單片機的指令系統(tǒng),僅要求對8051的存儲結(jié)構有初步了解; 寄存器分配,不同存儲器的尋址及數(shù)據(jù)類型等細節(jié)可由編譯器管理; 程序有規(guī)范的結(jié)構,可分為不同的函數(shù),這種方式可使程序結(jié)構化; 具有將可變的選擇與特殊操作組合在一起的能力,改善了程序的可讀性; 關鍵字及運
29、算符可用近似人的思維方式使用; 編程及程序調(diào)試時間顯著縮短,從而提高效率; 提供的庫包含許多標準子程序,具有較強的數(shù)據(jù)處理能力; 已編好的程序可容易地植入新程序,因為它具有方便的模塊化編程技術。當然,采用混編模式,就能結(jié)合兩者的優(yōu)點。本著學習的目的,本系統(tǒng)均采用C51語言編寫。5.2主要程序說明及流程圖本系統(tǒng)的軟件程序主要包括主程序、接收解碼程序、密碼判斷和報警程序、密碼修改程序、遙控器學習識別程序幾個大的模塊程序。5.2.1主程序主程序首先是初始化程序,然后就等待紅外接收頭輸出端的低電平,低電平出現(xiàn)說明遙控有鍵按下,外部中斷設定為下降沿觸發(fā),故單片機進入中斷服務程序進行信號的接收解碼。當接收
30、到遙控器識別按鍵時,單片機查找AT24C02并判斷此遙控器ID是否已存在。當ID不存在時,系統(tǒng)進入遙控器學習模式,保存新ID及其鍵碼;當遙控器ID已存在時,系統(tǒng)進入密碼輸入界面,并且接收到八位的密碼以后就開始運行密碼核對程序,當密碼輸入正確后,就可以進行開鎖、上鎖或修改密碼的操作。當密碼輸入錯誤的時候就會進入密碼輸入提醒程序提醒用戶重新輸入密碼,密碼輸入累積到3次時系統(tǒng)會報警并鎖定。初始化等待遙控識別按鍵遙控學習模式密碼核對報警鎖定開鎖上鎖密碼修改N錯誤正確遙控ID存在?密碼鎖模式Y(jié)圖9主程序流程圖5.2.2接收解碼程序紅外接收解碼的關鍵是如何識別0和1碼,我的做法是根據(jù)0和1碼的高電平寬度不
31、一樣的特點來進行識別。接收程序的流程圖如圖10所示。進入紅外接收程序后先關閉中斷。接著的工作是避開9msms的低電平的引導碼,并且判斷是否干擾信號或者重復信號。正如前面所說,一體化紅外接收頭的輸出端電平跟遙控發(fā)射端電平相反。如圖14所示。所以只要遙控有鍵按下單片機就會馬上產(chǎn)生中斷接收數(shù)據(jù)。跟在引導碼后面的是32位用戶碼和數(shù)據(jù)碼,也就是我們想要的數(shù)據(jù),單片機把它接收并保存。當接收完8位的數(shù)據(jù)時要更換另外一個數(shù)據(jù)緩沖區(qū),當32位的鍵碼都接收完的時候就意味這一幀的數(shù)據(jù)已經(jīng)接收完畢。然后根據(jù)接收到的數(shù)據(jù)碼和數(shù)據(jù)反碼是否對應位相反來確定接收的這一幀數(shù)據(jù)是否正確,最后退出接收解碼程序。發(fā)射模塊MCU9ms
32、接收頭9ms圖10 接收頭前導碼信號變相圖而單片機的接收端的01波形圖如圖15所示。在保存0碼和1msms以后若讀到為低電平,說明該位為0,反之則為1msms,否則如果該位為0讀到的已是下一位的高電平,因此取(ms + 0ms左右均可。圖11 單片機接收端的01波形圖接收解碼中斷程序:void IR_IN() interrupt 0 using 0 unsigned char j,k,N=0; EX0 = 0; delay(15); if (IRIN=1) EX0 =1; return; /確認IR信號出現(xiàn) while (!IRIN) /等IR變?yōu)楦唠娖?,跳過9ms的前導低電平信號。 dela
33、y(1);for (j=0;j<4;j+) /收集四組數(shù)據(jù) for (k=0;k<8;k+) /每組數(shù)據(jù)有8位 while (IRIN) /等 IR 變?yōu)榈碗娖?,跳過4.5ms的前導高電平信號。 delay(1); while (!IRIN) /等 IR 變?yōu)楦唠娖?delay(1); while (IRIN) /計算IR高電平時長 delay(1); N+; if (N>=30) EX0=1; return; /0.14ms計數(shù)過長自動離開。 /高電平計數(shù)完畢 IRCOMj=IRCOMj >> 1; /數(shù)據(jù)最高位補“0” if (N>=8) IRCOMj
34、= IRCOMj | 0x80; /數(shù)據(jù)最高位補“1” N=0; /end for k /end for j if (IRCOM2!=IRCOM3) EX0=1; return; IRCOM5=IRCOM2 & 0x0F; /取鍵碼的低四位 IRCOM6=IRCOM2 >> 4; /右移4次,高四位變?yōu)榈退奈?if(IRCOM5>9) IRCOM5=IRCOM5+0x37; else IRCOM5=IRCOM5+0x30; if(IRCOM6>9) IRCOM6=IRCOM6+0x37; else IRCOM6=IRCOM6+0x30; LED3=0; beep
35、(); LED3=1; ir_data=IRCOM2; ir_flag=1; /信號接收成功標志位 EX0 = 1; 5.2.3密碼判斷、報警及修改程序電子密碼鎖的軟件編程主要分為兩方面,分別是接收密碼后判斷及報警部分和密碼修改控制部分。首先介紹密碼判斷及報警程序。顯示收到的鍵碼并保存到接收緩存receive_code8,直到8位鍵碼接收完畢。然后和原密碼緩存origin_code8比較,判斷密碼是否正確。若密碼正確則將標志位code_right=1;若不正確則報警并使密碼輸入錯誤次數(shù)wrong_num+,再判斷錯誤次數(shù)是否已達3次,若是則程序進入死循環(huán)鎖定。程序流程圖所示。輸入密碼接收了6位
36、鍵碼?code_right=1密碼是否正確wrong_num+wrong_num=3?錯誤警告報警鎖定NNNYYY輸入密碼接收了8位鍵碼?code_right=1密碼是否正確wrong_num+wrong_num=3?錯誤警告報警鎖定NNNYYY圖12 密碼判斷、報警大致程序流程 接著介紹密碼修改控制程序。當密碼輸入正確以后用戶按下“密碼修改鍵”就會進入密碼修改操作,單片機也就會運行密碼修改程序。code_right=1修改密碼?保存新密碼新密碼接收完畢?返回NNNNYYYY新密碼確認完畢?兩次密碼相同?顯示錯誤圖13 密碼修改流程圖進入密碼修改程序首先等待新密碼的第一次輸入。第一次輸入的新密
37、碼放在接收緩存receive_code8中,當輸入完第八個密碼后系統(tǒng)會提示再次輸入密碼,第二次輸入的新密碼放在密碼比較緩存com_code8中。第二次輸入密碼完成后就檢驗兩次輸入的新密碼是否相同,如果相同的話就更換密碼,將新密碼儲存到芯片的eeprom中。Eeprom存儲子程序:/* = 打開 ISP,IAP 功能 = */void ISP_IAP_enable(void) EA = 0; /* 關中斷 */ ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */ ISP_CONTR = ISP_CONTR | WaitTime; /* 寫入硬件延時
38、 */ ISP_CONTR = ISP_CONTR | 0x80; /* ISPEN=1 */* = 關閉 ISP,IAP 功能 = */void ISP_IAP_disable(void) ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */ ISP_TRIG = 0x00; EA = 1; /* 開中斷 */* = 公用的觸發(fā)代碼 = */void ISPgoon(void) ISP_IAP_enable(); /* 打開 ISP,IAP 功能 */ ISP_TRIG = 0x46; /* 觸發(fā)ISP_IAP命令字節(jié)1 */ ISP_TRIG
39、= 0xb9; /* 觸發(fā)ISP_IAP命令字節(jié)2 */ _nop_();/* = 字節(jié)讀 = */unsigned char byte_read(unsigned int byte_addr) ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址賦值 */ ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff); ISP_CMD = ISP_CMD & 0xf8; /* 清除低3位 */ ISP_CMD = ISP_CMD | RdCommand; /* 寫入讀命令 */ ISP
40、goon(); /* 觸發(fā)執(zhí)行 */ ISP_IAP_disable(); /* 關閉ISP,IAP功能 */ return (ISP_DATA); /* 返回讀到的數(shù)據(jù) */* = 扇區(qū)擦除 = */void SectorErase(unsigned int sector_addr) unsigned int iSectorAddr; iSectorAddr = (sector_addr & 0xfe00); /* 取扇區(qū)地址 */ ISP_ADDRH = (unsigned char)(iSectorAddr >> 8); ISP_ADDRL = 0x00; ISP_C
41、MD = ISP_CMD & 0xf8; /* 清空低3位 */ ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3 */ ISPgoon(); /* 觸發(fā)執(zhí)行 */ ISP_IAP_disable(); /* 關閉ISP,IAP功能 */* = 字節(jié)寫 = */void byte_write(unsigned int byte_addr, unsigned char original_data) ISP_ADDRH = (unsigned char)(byte_addr >> 8); /* 取地址 */ ISP_ADDRL = (unsi
42、gned char)(byte_addr & 0x00ff); ISP_CMD = ISP_CMD & 0xf8; /* 清低3位 */ ISP_CMD = ISP_CMD | PrgCommand; /* 寫命令2 */ ISP_DATA = original_data; /* 寫入數(shù)據(jù)準備 */ ISPgoon(); /* 觸發(fā)執(zhí)行 */ ISP_IAP_disable(); /* 關閉IAP功能 */5.2.4主函數(shù)void main() /主函數(shù) uchar m,a,b=0,c=0,e,f,k,i=0,j=0,wrong_num=0; uchar code_right=
43、0; uchar new1_code,new2_code; uchar receive_code8,com_code8; uint addr; IE = 0x81; /允許總中斷中斷,使能 INT0 外部中斷 TCON = 0x01; /觸發(fā)方式為脈沖負邊沿觸發(fā) IRIN=1; /I/O口初始化 BEEP=1; /蜂鳴器初始化if(byte_read(0x2200)=0x11) /初始密碼讀取origin_code0=byte_read(0x2000);origin_code1=byte_read(0x2001);origin_code2=byte_read(0x2002);origin_co
44、de3=byte_read(0x2003);origin_code4=byte_read(0x2004);origin_code5=byte_read(0x2005);elseSectorErase(0x2000);byte_write(0x2000,0x0C);byte_write(0x2001,0x18);byte_write(0x2002,0x5E);byte_write(0x2003,0x08);byte_write(0x2004,0x1C);byte_write(0x2005,0x5A);origin_code0=0x0C;origin_code1=0x18;origin_code2
45、=0x5E;origin_code3=0x08;origin_code4=0x1C;origin_code5=0x5A; delay1(10); /延時 lcd_init(); /初始化LCD delay1(10); /延時 lcd_init(); delay1(10);EX0=0;/關中斷 lcd_wcmd(0x01); lcd_pos(0); /設置顯示位置為第一行的第1個字符 for(m=0;m<16;m+) lcd_wdat(welcm); delay1(10); /字符顯示延時lcd_pos(0x40); /設置顯示位置為第二行的第1個字符 for(m=0;m<16;m+
46、) lcd_wdat(cdis2m); delay1(10);EX0=1; /開中斷delay1(500);beep();lcd_wcmd(0x01); /密碼輸入delay1(10);lcd_pos(0);for(m=0;m<16;m+) lcd_wdat(ent_signm);ir_flag=0;for(;) /密碼接收、確認、顯示 if(ir_flag=0) continue;ir_flag=0;/按鍵屏蔽if(ir_data=num_1|ir_data=num_2|ir_data=num_3|ir_data=num_4|ir_data=num_5|ir_data=num_6|ir
47、_data=num_7|ir_data=num_8|ir_data=num_9|ir_data=num_0) if(code_right=1) continue; receive_codei=ir_data; /按下一個鍵,顯示一個星號lcd_pos(0x40+j);j+;lcd_wdat(codestari);i+;ir_data=0; if(ir_data=num_voldec) /密碼輸入修改鍵i-;if(i<0) i=0;j-;if(j<0) j=0;lcd_pos(0x40+j); lcd_wdat(ent_empty0); if(i>0) if(ir_data=n
48、um_play) / 密碼輸入完畢確認鍵 play a=0;if(i<6|i>6) a=1; /判斷密碼是否為六位數(shù)while(i-)if(origin_codei!=receive_codei)/與原密碼比較 a+; if(a>0) wrong_num+; for(;)if(wrong_num=1&&b=0&&c=0) /第一次輸入錯誤顯示 lcd_wcmd(0x01);lcd_pos(0); for(m=0;m<16;m+)lcd_wdat(wrong_code1m);lcd_pos(0x40); for(m=0;m<16;m+
49、) lcd_wdat(ent_agam);LED1=0;beep();EX0=0;delay1(1000);EX0=1;lcd_wcmd(0x01);lcd_pos(0);for(m=0;m<16;m+) lcd_wdat(ent_signm);i=0;j=0;b=1;lcd_pos(0x40);for(m=0;m<16;m+)lcd_wdat(ent_emptym);break;else if(wrong_num=2&&b=1&&c=0)/第二次密碼輸入錯誤顯示lcd_wcmd(0x01); lcd_pos(0); for(m=0;m<16;m+)lcd_wdat(wrong_code2m);lcd_pos(0x40); for(m=0;m<16;m+) lcd_wdat(ent_agam);LED2=0; beep();delay1(20);beep(); EX0=0;delay1(1000);EX0=1; lcd_wcmd(0x01
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度廚師餐飲項目投資合作協(xié)議8篇
- 2025年度林木種植基地林業(yè)科研合作承包合同3篇
- 2024年教育科技產(chǎn)品代工開發(fā)合同范本3篇
- 2024版計算機技術援助及服務協(xié)議版B版
- 二零二五年度建筑用金屬材料采購合同范本3篇
- 專屬2024版代理合作協(xié)議模板版B版
- 二零二五年度天然氣管道租賃與運營合同
- 二零二五版酒店員工福利及獎勵計劃合作合同范本3篇
- 2025年度海洋工程設備拆除與環(huán)保修復承包合同3篇
- 二零二五年度農(nóng)民工勞動權益維護合同范本
- 2024年萍鄉(xiāng)衛(wèi)生職業(yè)學院單招職業(yè)技能測試題庫標準卷
- 2024年高考數(shù)學(理)試卷(全國甲卷)(空白卷)
- DB32-T 4444-2023 單位消防安全管理規(guī)范
- 臨床三基考試題庫(附答案)
- 合同簽訂執(zhí)行風險管控培訓
- 九宮數(shù)獨200題(附答案全)
- 人員密集場所消防安全管理培訓
- PTW-UNIDOS-E-放射劑量儀中文說明書
- JCT587-2012 玻璃纖維纏繞增強熱固性樹脂耐腐蝕立式貯罐
- 典范英語2b課文電子書
- 員工信息登記表(標準版)
評論
0/150
提交評論