基于單片機的遙控密碼鎖_第1頁
基于單片機的遙控密碼鎖_第2頁
基于單片機的遙控密碼鎖_第3頁
基于單片機的遙控密碼鎖_第4頁
基于單片機的遙控密碼鎖_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、遙控密碼鎖遙控密碼鎖 -基于基于 51 單片機單片機 附帶程序 目錄目錄 1目的和意義目的和意義 .2 2方案設(shè)計方案設(shè)計 .2 3 硬件原理分析及設(shè)計硬件原理分析及設(shè)計 .2 3.1 發(fā)射模塊原理.2 3.1.1 紅外發(fā)送系統(tǒng)原理.3 3.1.2 NEC編碼格式介紹.3 3.2 接收解碼模塊.4 3.2.1 接收解碼原理.4 3.2.2 接收解碼模塊的硬件電路.5 3.4 液晶顯示模塊.6 4 軟件設(shè)計軟件設(shè)計 .7 4.1 編程語言.7 4.2 主要程序說明及流程圖.7 4.2.1 主程序.7 4.2.2 接收解碼程序.8 4.2.3 按鍵數(shù)字分配.11 4.2.4 密碼判斷、報警及修改程

2、序.12 4.2.5 按鍵發(fā)聲程序.19 4.2.6 沒操作響應(yīng).19 5 功能分析及總結(jié)功能分析及總結(jié) .20 5.1 功能分析.20 5.2 C 語言編程的延時技巧.21 5.3 本設(shè)計優(yōu)缺點.23 5.4 設(shè)計總結(jié).23 參參 考考 文文 獻獻 .1 附錄附錄 C 實物圖實物圖.3 摘要 單片機遙控系統(tǒng)是將紅外遙控技術(shù)和單片機應(yīng)用技術(shù)相結(jié)合的一種方案。本系統(tǒng)為 紅外遙控電子密碼鎖的控制管理部分,只要再連接上不同用途的電磁鎖即可成為一個完 整的紅外遙控電子密碼鎖系統(tǒng)應(yīng)用到各種領(lǐng)域中。而且本系統(tǒng)還設(shè)計有學(xué)習(xí) NEC 紅外編 碼遙控器的功能,通過紅外接收解碼電路,把遙控器的鍵碼還原并儲存起來,

3、再利用查 找對比的方法便能夠識別不同的遙控器,大大提高了系統(tǒng)的靈活性和實用性。 本系統(tǒng)以單片機作為核心元件將電子密碼鎖和無線遙控技術(shù)結(jié)合起來,使其具有修 改密碼、報警鎖定等功能,不僅能進行遠(yuǎn)距離遙控解鎖,還能實現(xiàn)近距離按鍵密碼初始 化及復(fù)位解除報警。同時采用 E2PROM 作為存儲單元,方便用戶存儲、修改密碼和遙控 器鍵碼;采用 LCD 顯示令使用更加方便直觀。紅外線遙控電子密碼鎖能實現(xiàn)多種控制功 能,改善了傳統(tǒng)機械鎖的各種缺點,有較好的市場發(fā)展前景和技術(shù)應(yīng)用價值。而且本系 統(tǒng)的紅外接收解碼部分延時計數(shù)準(zhǔn)確,并且有錯誤校驗,所以整個接收解碼的準(zhǔn)確性非 常高。 設(shè)計電路主要由紅外線解碼學(xué)習(xí)電路、

4、密碼修改和存儲電路、聲光提示報警電路、 LCD 顯示電路組成。系統(tǒng)能完成輸入密碼開鎖、出錯報警、超次鎖定、修改用戶密碼等 基本的密碼鎖的功能,并且還能實現(xiàn)遠(yuǎn)距離遙控、按鍵密碼初始化、掉電存儲、聲光提 示、遙控器學(xué)習(xí)識別等附加功能。本設(shè)計詳細(xì)介紹了單片機遙控系統(tǒng)的軟硬件設(shè)計方法, 并給出了具體的各單元電路設(shè)計、程序設(shè)計及主程序流程圖。 關(guān)鍵詞:電子密碼鎖紅外遙控單片機NEC 編碼 1目的和意義 隨著人們生活水平的提高,如何實現(xiàn)家庭防盜這一問題也變得尤其重要。目前國內(nèi), 大部分人使用的還是傳統(tǒng)的機械鎖。傳統(tǒng)的機械鎖由于其構(gòu)造的簡單,被撬的事件屢見 不鮮。即使是一把質(zhì)量過關(guān)的機械鎖,通過急開鎖,甚至

5、可以在不損壞鎖的前提下將鎖 打開。而且,在日常的生活和工作中,若使用傳統(tǒng)的機械式鑰匙開鎖,人們常需攜帶多 把鑰匙,使用極不方便,且鑰匙丟失后安全性即大打折扣。為此,本系統(tǒng)試著設(shè)計具有 防盜報警功能的紅外線遙控電子密碼鎖來代替?zhèn)鹘y(tǒng)的機械式密碼鎖,克服了機械式密碼 鎖密碼量少、安全性能差的缺點。而且還添加了紅外遙控、遙控器學(xué)習(xí)識別和 LCD 顯 示等功能,可以實現(xiàn)遠(yuǎn)距離開關(guān)鎖、修改密碼等,系統(tǒng)靈活性強,操作簡單直觀、使用 非常方便。 2方案設(shè)計 用以下方案設(shè)計本次系統(tǒng):發(fā)射模塊使用型號為 HZ-FT007 的 20 鍵車載 MP3 紅外 遙控器和創(chuàng)維 RC-585 型 DVD 遙控器,因為它們都是

6、采用 NEC 編碼格式的紅外遙控芯 片作為主要芯片;使用一體化紅外接收頭 SM0038 和單片機 STC89C51RC 結(jié)合的方式 完成接收解碼模塊,學(xué)習(xí)識別 NEC 編碼格式的不同遙控器;使用 AT24C02 這一串行 E2PROM 作為存儲模塊;使用 LCD1602A 實現(xiàn)系統(tǒng)的顯示模塊。系統(tǒng)的總框圖如圖 3 所 示。這樣的選擇使系統(tǒng)在較低成本的情況下較好地實現(xiàn)系統(tǒng)的功能,而且系統(tǒng)有著較高 的抗干擾性和穩(wěn)定性。 圖 3 選用方案系統(tǒng)框圖 3 硬件原理分析及設(shè)計 3.1 發(fā)射模塊原理 按鍵 uPD6122G SM0038 MCU AT24C02 LCD1602 電磁鎖 NEC 編碼遙控器 3

7、.1.1 紅外發(fā)送系統(tǒng)原理 紅外遙控信號是一連串的二進制脈沖碼。為了使其在無線傳輸過程中免受其他紅外 信號的干擾,通常都是先將其調(diào)制在特定的載波頻率上,然后再經(jīng)紅外發(fā)光二極管發(fā)射 出去,紅外線接收裝置則會濾除其它雜波只接收該特定頻率的信號并將其還原成二進制 脈沖碼。在本紅外遙控系統(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ù)臏?zhǔn)確無誤,

8、紅外線信號還要按照特定的傳 輸協(xié)議來進行信號傳輸。常用的紅外線信號傳輸協(xié)議有 NEC 協(xié)議、RC-5 協(xié)議、RC-6 協(xié)議、Sharp 協(xié)議等。 3.1.2 NEC 編碼格式介紹 本系統(tǒng)使用的型號為 HZ-FT007 的 20 鍵車載 MP3 紅外遙控器和創(chuàng)維 RC-585 型 DVD 遙 控器請參看附錄 C 中的實物圖,它們主要芯片都是 NEC 編碼格式的紅外遙控芯片。 NEC 編碼廣泛應(yīng)用于電視機,DVD,PC 電腦,音響等,是比較常用的一種紅外編碼格式。 下面以 NEC 編碼標(biāo)準(zhǔn)的紅外編碼芯片 uPD6122G 作為例子介紹。NEC 遙控編碼是連續(xù) 的 32 位二進制碼組,其中的前十六位

9、是用戶碼,后 16 位為 8 位的數(shù)據(jù)碼及其反碼。在 每次編碼之前還會發(fā)送 9ms 高電平和 4.5ms 低電平組成的引導(dǎo)碼(或稱起始碼) 。而且 第二段的用戶碼也可以在遙控應(yīng)用電路中被設(shè)置為第一段用戶碼的反碼。它的幀結(jié)構(gòu)如 圖 4 所示。 圖 4 uPD6122G 編碼格式 NEC 編碼標(biāo)準(zhǔn)是以用不同脈沖的時間間隔來區(qū)分0和1的,uPD6122G 以脈 寬為 0.56ms、間隔 0.565ms、周期為 1.125ms 的組合表示二進制的0 ;以脈寬為 0.56ms、間隔 1.69ms,周期為 2.25ms 的組合表示二進制的1 。其波形如圖 5 所示。 圖 5 uPD6122G0和1波形圖

10、使用 455KHz 晶振時各代碼所占的時間如圖 6 所示: 圖 6 使用 455KHz 晶振時各代碼所占的時間 uPD6122G 按鍵輸出有兩種方式:一種是每次按鍵都輸出完整的一幀數(shù)據(jù);另一種 是按下按鍵不松開時,發(fā)送完整的一幀數(shù)據(jù)后再發(fā)送重復(fù)碼,直到按鍵被松開。其波形 如圖 7 所示。 圖 7 重復(fù)碼的波形圖 3.2 接收解碼模塊 3.2.1 接收解碼原理 接收解碼的關(guān)鍵是如何識別0和1 ,本系統(tǒng)使用的是一體化紅外接收頭進行紅 外信號接收,在沒有信號的時候其輸出端是高電平,而有信號的時候是低電平,所以其 輸出信號電平正好和遙控發(fā)射端相反。從上面的討論可以發(fā)現(xiàn)在遙控發(fā)射端0和 1均以 0.56

11、ms 的高電平開始,不同的是低電平的寬度, 0為 0.565ms, 1為 1.69ms,所以必須根據(jù)低電平的寬度區(qū)別0和1 。本系統(tǒng)用中斷的方式實現(xiàn)從接 收頭到 MCU 的信號傳輸。如圖 9 所示,紅外接收頭的輸出端連接到單片機的 INT0 腳。 接收頭輸出端有低電平信號輸出時引起單片機的中斷。單片機響應(yīng)中斷并進行信號的接 收解碼。解碼后的信號就變成相應(yīng)的遙控器按鍵代碼,從而可以成為密碼鎖的密碼。 圖 9 中斷接收示意圖 3.2.2 接收解碼模塊的硬件電路 接收解碼電路由一體化紅外接收頭 SM0038 和單片機 STC89C51RC 組成。 STC 系列單片機具有在系統(tǒng)中直接可編程特性,其好處

12、是:省去購買通用編程器, 單片機在用戶系統(tǒng)上即可下載/燒錄用戶程序,而無須將單片機從已生產(chǎn)好的產(chǎn)品上拆 下,再用通用編程器將程序代碼燒錄進單片機內(nèi)部。有些程序尚未定型的產(chǎn)品可以一邊 生產(chǎn),一邊完善,加快了產(chǎn)品進入市場的速度,減小了新產(chǎn)品由于軟件缺陷帶來的風(fēng)險。 由于可以在用戶的目標(biāo)系統(tǒng)上將程序直接下載進單片機看運行結(jié)果對錯,故無須仿真器, 因此選擇使用這款單片機。 一體化紅外接收頭 SM0038 是集信號放大、濾波、檢波、整形于一體的紅外接收器, 電路內(nèi)置 PIN 二極管和前置放大器,采用可以紅外濾波的環(huán)氧樹脂材料封裝,可靠性高, 不易受環(huán)境影響并可以防止非控制信號的輸出脈沖出現(xiàn)。它的內(nèi)部電路

13、如圖 10 所示。 接收頭 SM0038 MCU INT0 圖 10 SM0038 內(nèi)部結(jié)構(gòu)圖 SM0038 內(nèi)置帶通濾波器、積分器、和自動增益控制電路以抑制各種干擾和噪音。 數(shù)據(jù)信號和干擾信號的主要區(qū)別在于載波頻率、脈沖波長和工作周期上。所以數(shù)據(jù)信號 應(yīng)該滿足以下的要求。而本系統(tǒng)選用的 SM0038 在這三方面和 NEC 編碼格式是相配的。 載波信號的頻率盡量接近帶通濾波器的中心頻率(38KHz) 。 脈沖長度在 300us 以上。 數(shù)據(jù)的編碼類型相兼容。 3.4 液晶顯示模塊 系統(tǒng)中采用 LCD1602 作為顯示器件輸出信息。與傳統(tǒng)的 LED 數(shù)碼管顯示器件相比, 液晶顯示模塊具有體積小、

14、功耗低、顯示內(nèi)容豐富等優(yōu)點,而且不需要外加驅(qū)動電路, 現(xiàn)在液晶顯示模塊已經(jīng)是單片機應(yīng)用設(shè)計中最常用的顯示器件了。LCD1602 可以顯示 2 行16 個字符,具有 8 位數(shù)據(jù)總線 D0-D7,和 RS、R/W、E 三個控制端口,工作電壓 為 5V,并且?guī)в凶址麑Ρ榷日{(diào)節(jié)和背光設(shè)置。LCD1602 與單片機的連接電路圖參考附 錄 A。 其管腳功能簡介如下: VL:LCD 對比度調(diào)節(jié)端,電壓調(diào)節(jié)范圍為 05V。接正電源時對比度最弱,接地 電源時對比度最高,可以用一個 10K 的電位器來調(diào)整對比度; RS:數(shù)據(jù)或者指令選擇端。處理器寫入指令時,RS 為低電平,寫入數(shù)據(jù)時,RS 為 高電平; R/W:

15、讀寫控制端。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 背光負(fù)極。 4 軟件設(shè)計 4.1 編程語言 目前,對單片機的編程主要采用匯編和 C 語言。匯編語言有執(zhí)行效率高、速度快、 與硬件結(jié)合緊密等特點。尤其在進行 I/O 端口管理時,使用匯編語言有快捷、直觀的優(yōu) 點。但是使用匯編語言相對于使用高級語言編程難度要大一些,且程序可讀性低,開放 性差,從系統(tǒng)開發(fā)時間來看,效率不是很高。 C

16、 語言是一種結(jié)構(gòu)化語言,可產(chǎn)生緊湊代碼。C 語言可以用許多機器級函數(shù)直接控 制操作 8051 硬件。與匯編語言相比,C 語言有如下的優(yōu)點: 不要求了解單片機的指令系統(tǒng),僅要求對 8051 的存儲結(jié)構(gòu)有初步了解; 寄存器分配,不同存儲器的尋址及數(shù)據(jù)類型等細(xì)節(jié)可由編譯器管理; 程序有規(guī)范的結(jié)構(gòu),可分為不同的函數(shù),這種方式可使程序結(jié)構(gòu)化; 具有將可變的選擇與特殊操作組合在一起的能力,改善了程序的可讀性; 關(guān)鍵字及運算符可用近似人的思維方式使用; 編程及程序調(diào)試時間顯著縮短,從而提高效率; 提供的庫包含許多標(biāo)準(zhǔn)子程序,具有較強的數(shù)據(jù)處理能力; 已編好的程序可容易地植入新程序,因為它具有方便的模塊化編程

17、技術(shù)。 當(dāng)然,采用混編模式,就能結(jié)合兩者的優(yōu)點。本著學(xué)習(xí)的目的,本系統(tǒng)均采用 C51 語言編寫。 4.2 主要程序說明及流程圖 4.2.1 主程序 本系統(tǒng)的軟件程序主要包括主程序、接收解碼程序、密碼判斷和報警程序、密碼修 改程序、遙控器學(xué)習(xí)識別程序幾個大的模塊程序。完整程序見附錄 B。 主程序首先是初始化程序,然后就等待紅外接收頭輸出端的低電平,低電平出現(xiàn)說 明遙控有鍵按下,外部中斷設(shè)定為下降沿觸發(fā),故單片機進入中斷服務(wù)程序進行信號的 接收解碼。系統(tǒng)進入密碼輸入界面,并且接收到八位的密碼以后就開始運行密碼核對程 序,當(dāng)密碼輸入正確后,就可以進行開鎖、上鎖或修改密碼的操作。當(dāng)密碼輸入錯誤的 時候

18、就會進入密碼輸入提醒程序提醒用戶重新輸入密碼,密碼輸入累積到 3 次時系統(tǒng)會 報警并鎖定。相應(yīng)的主程序流程圖如圖 12 所示。 圖 12 主程序流程圖 4.2.2 接收解碼程序 紅外接收解碼的關(guān)鍵是如何識別0和1碼,我的做法是根據(jù)0和1碼 的高電平寬度不一樣的特點來進行識別。接收程序的流程圖如圖 13 所示。 進入紅外接收程序后先關(guān)閉中斷。接著的工作是避開 9ms 高電平、4.5ms 的低電平 的引導(dǎo)碼,并且判斷是否干擾信號或者重復(fù)信號。正如前面所說,一體化紅外接收頭的 輸出端電平跟遙控發(fā)射端電平相反。如圖 14 所示。 所以只要遙控有鍵按下單片機就會馬上產(chǎn)生中斷接收數(shù)據(jù)。跟在引導(dǎo)碼后面的是

19、32 位用戶碼和數(shù)據(jù)碼,也就是我們想要的數(shù)據(jù),單片機把它接收并保存。當(dāng)接收完 8 位的 數(shù)據(jù)時要更換另外一個數(shù)據(jù)緩沖區(qū),當(dāng) 32 位的鍵碼都接收完的時候就意味這一幀的數(shù) 據(jù)已經(jīng)接收完畢。然后根據(jù)接收到的數(shù)據(jù)碼和數(shù)據(jù)反碼是否對應(yīng)位相反來確定接收的這 初始化 等待遙控識別按鍵 時鐘模式 密碼核對 報警鎖定 開鎖上鎖密碼修改 N 錯誤 正確 密碼鎖按鍵 密碼鎖模式 Y 一幀數(shù)據(jù)是否正確,最后退出接收解碼程序。 圖 13 紅外接收程序流程圖 圖 14 接收頭前導(dǎo)碼信號變相圖 紅外中斷程序 關(guān)中斷 是否 9ms 低電平 開始接收 32 位編 碼 接收信號 “1” 保存,接收了 8 位? 是否 4.5ms

20、 低電平 低電平大于 800us 接收信號 “0” 保存,接收了 32 位? 開中斷 返回 干擾信號重復(fù)信號 N N N N N Y Y Y Y Y 發(fā)射模塊MCU 9ms 4.5ms 接收頭 9ms 4.5ms 而單片機的接收端的0 1波形圖如圖 15 所示。在保存0碼和1碼的時 候還有一個保存時機的問題,如果從 0.56ms 低電平過后開始延時,0.56ms 以后若讀到 為低電平,說明該位為0 ,反之則為1 。為安全起見,延時必須比 0.56ms 長一些, 但又不能超過 1.12ms,否則如果該位為0讀到的已是下一位的高電平,因此取( 1.12ms + 0.56ms )/2=0.84ms

21、較為可靠,一般取 0.84ms 左右均可。 圖 15 單片機接收端的0 1波形圖 接收解碼關(guān)鍵程序: sbit IR = P32; / 紅外中斷輸入端口(INT0) void ir_svr(void) interrupt 0 using 0 int width=0,i; EX0 = 0; /關(guān)中斷 /*常規(guī)狀態(tài)下 INT0 為高電平,由高電平跳變?yōu)榈碗娖綍r(即下降沿)產(chǎn)生中斷*/ / 引導(dǎo)信號:9ms 低電平 while(!IR) delay_100us(); width+; /計算引導(dǎo)電平的寬度 if (width 80) EX0 = 1; return; / 8ms=80*100us 如果

22、不到 8ms 視為干擾信號 / 計算 4.5ms 高電平寬度 width = 0 x00; while(IR) delay_100us(); width+; if (width 30) EX0 = 1; return;/ 3ms=30*100us 如果不到 3ms 即視為 2.5ms 重復(fù)信 號 / 至此,引導(dǎo)碼已校驗,以下接收地址碼和數(shù)據(jù)碼,一共 32 位 i=0; while(i+ 32) /接收 32 位編碼 while(!IR); /等待高電平 width = 0 x00; while(IR) /記錄高電平寬度 delay_100us(); width+; ir_data 0 x08)

23、ir_data |= 0 x01; /信號1和0判斷 if (i=8) /保存接收到的數(shù)據(jù) dataIR0 = ir_data; if (i=16) dataIR1 = ir_data; if (i=24) dataIR2 = ir_data; if (i=32) dataIR3 = ir_data; if (dataIR2 != dataIR3) /糾錯校驗 EX0 = 1; return; ir_data = dataIR2; ir_flag = 1; /接收成功標(biāo)志位 TR1=0; /有按鍵關(guān)定時器 1 T=0; EX0 = 1; 4.2.3 按鍵數(shù)字分配 由于遙控器的編碼是為了不容易出

24、錯而編的,導(dǎo)致數(shù)據(jù)比較亂,為了編程方便,我們特意修改 了數(shù)據(jù)。09 號為密碼數(shù)據(jù),10 號為退格鍵,11 號為密碼修改鍵,18 號為開鎖鍵,14 號為調(diào)整時 間鍵,8 號調(diào)時,9 號調(diào)分。 /* 按 鍵 數(shù) 據(jù) 編 碼 */ /* 18,19,20 */ /* 15,16,17 */ /* 12,13,14 */ /* 0, 10,11 */ /* 1, 2, 3 */ /* 4, 5, 6 */ /* 7, 8, 9 */ /* 遙控器 */ uchar key_match() switch(ir_data) case 0 x68: return(0); case 0 x30: return

25、(1); case 0 x18: return(2); case 0 x7a: return(3); case 0 x10: return(4); case 0 x38: return(5); case 0 x5a: return(6); case 0 x42: return(7); case 0 x4a: return(8); case 0 x52: return(9); case 0 x98: return(10); case 0 xb0: return(11); case 0 xe0: return(12); case 0 xa8: return(13); case 0 x90: ret

26、urn(14); case 0 x22: return(15); case 0 x02: return(16); case 0 xc2: return(17); case 0 xa2: return(18); case 0 x62: return(19); case 0 xe2: return(20); default : return(99); 4.2.4 密碼判斷、報警及修改程序 電子密碼鎖的軟件編程主要分為兩方面,分別是接收密碼后判斷及報警部分和密碼 修改控制部分。 首先介紹密碼判斷及報警程序。顯示收到的鍵碼并保存到接收緩存 receive_code8, 直到 8 位鍵碼接收完畢。然后和

27、原密碼緩存 origin_code8比較,判斷密碼是否正確。若 密碼正確則將標(biāo)志位 code_right=1;若不正確則報警并使密碼輸入錯誤次數(shù) wrong_num+,再判斷錯誤次數(shù)是否已達 3 次,若是則程序進入死循環(huán)鎖定。程序流程 圖如圖 16 所示。 圖 16 密碼判斷及報警流程圖 接著介紹密碼修改控制程序。當(dāng)密碼輸入正確以后用戶按下“密碼修改鍵”就會進 入密碼修改操作,單片機也就會運行密碼修改程序。程序流程圖如圖 17 所示。 code_right=1 修改密碼? 保存新密碼 新密碼接收完畢? 返回 N N N N Y Y Y Y 新密碼確認(rèn)完畢? 兩次密碼相同? 顯示錯誤 輸入密碼

28、接收了 8 位鍵碼? code_right=1 密碼是否正確 wrong_num+ wrong_num=3? 錯誤警告 報警鎖定 N N N Y Y Y 圖 17 密碼修改流程圖 進入密碼修改程序首先等待新密碼的第一次輸入。第一次輸入的新密碼放在接收緩 存 receive_code8中,當(dāng)輸入完第八個密碼后系統(tǒng)會提示再次輸入密碼,第二次輸入的 新密碼放在密碼比較緩存 com_code8中。第二次輸入密碼完成后就檢驗兩次輸入的新 密碼是否相同,如果相同的話就更換密碼,將新密碼儲存到 AT24C02 中。 關(guān)鍵程序如下: void check_code(void) if(ir_flag=1) fl

29、ag=0, key_data=key_match() , Beep(),ir_flag=0,j=0; /Beep 函數(shù)發(fā) 出按鍵聲音 if(show=1 flag=1; rec_num-; if(key_data=18) /跳到時鐘模式 key_data=99; delay_LCM(10); LCM_cls(); show=0 ; beep_flag=0;rec_num=0; k=1; if(rec_num=8)/輸入八個密碼后密碼檢查 for(j=7;j0;j-) if(origin_codej!=receive_codej)/與原密碼比較 wrong_num+; if(wrong_num=

30、1) delay_LCM(1000);LCM_cls();delay_LCM(1000); DisplayListChar(0,0,Input it again!); else if(wrong_num=2) delay_LCM(1000);LCM_cls();delay_LCM(1000); DisplayListChar(0,0,the last time); else if(wrong_num=3) LCM_cls(); DisplayListChar(0,0,Wrong!); DisplayListChar(0,1,Lock); LED1=1;LED2=1;LED3=0; SPEAKE

31、R=0; /3 次錯誤報警 delay_LCM(10000); while(1); /3 次錯誤進入死循環(huán)鎖定 code_right=0; rec_num=0; return; LCM_cls(); DisplayListChar(0,0, (_);/密碼正確,開鎖成功 DisplayListChar(0,1,What You Want?); rec_num=0; show=0; code_right=1;/密碼正確標(biāo)識位 void change_code(void) int i,j; if(ir_flag=1) key_data=key_match(),flag=0,Beep(),ir_fl

32、ag=0; if( code_right=1 LCM_cls(); DisplayListChar(0,0,Input new code); new_code1=1;/修 II 改密碼標(biāo)識位 1 if(new_code1=1 rec_num-; flag=1; if(code_right=1 LCM_cls(); DisplayListChar(0,0,Input again!); rec_num=0; new_code2=1;/修改密碼標(biāo)識位 2 new_code1=0; if(new_code2=1 rec_num-; flag=1; if(code_right=1 new_code2=0

33、; j=8; while(j-) /判斷兩次輸入是否一致 if(com_codej!=com1_codej) delay_LCM(10); LCM_cls(); DisplayListChar(0,0,Not Match!); DisplayListChar(0,1,Press Change key); delay_LCM(200); return; LCM_cls(); for(i=0;i8;i+) /密碼一致,開始修改密碼 origin_codei=com_codei; DisplayListChar(0,0,New codes saved!);/修改密碼成功 delay_LCM(5000

34、); wrong_num=0; code_right=0; ir_flag = 0; k=1; /跳到時鐘 return; 4.2.3 時鐘模式 一開始進入運行的是時鐘模式。 while(1) /時鐘部分程序 F1: DisplayListChar(0,0, ); DisplayListChar(0,1, ); DisplayListChar(6,0,(0_0); DisplayListChar(3,1, : : ); write_sfm(3,shi); write_sfm(6,fen); write_sfm(9,miao); while(1) delay_LCM(2000); Display

35、ListChar(6,0,(_); if(ir_flag=1) key_data=key_match(),ir_flag=0; if(key_data=14)key_data=99;goto F2; if(key_data=18) /轉(zhuǎn)入密碼模式 beep_flag=1; Beep(); key_data=99; LCM_cls(); delay_LCM(10); DisplayListChar(0,0,Input The code! ); show=1; beep_flag=1; goto A1; miao+; if(miao=60) miao=0; fen+; if(fen=60) fen

36、=0; shi+; if(shi=24) shi=0; write_sfm(3,shi); write_sfm(6,fen); write_sfm(9,miao); F2: while(1) if(ir_flag=1) key_data= key_match(); switch(key_data) case 8: if(shi=23)shi=0; else shi+;ir_flag=0;write_sfm(3,shi);break; case 9: if(fen=59)fen=0; else fen+;ir_flag=0;write_sfm(6,fen);break; default: Dis

37、playListChar(6,0,(-_-);ir_flag=0;delay_LCM(3000);DisplayListChar(6,0,(0);break; if(key_data=14)key_data=99;goto F1; 4.2.5 按鍵發(fā)聲程序 如果有按鍵的話,就執(zhí)行以下發(fā)聲程序 Beep() ,靠定時器產(chǎn)生不同頻率的聲音。 void Beep(void) int CurrentFre,Temp_T; if(key_data=18) beep_flag=1; SPEAKER = 1; TR0 = 0; EA = 1; if(key_data!=99 /查出對應(yīng)音符的頻率 Temp_

38、T = 65536-(50000/CurrentFre)*10/(/SYSTEM_OSC); /計算計數(shù)器初值 Sound_Temp_TH0 = Temp_T/256; Sound_Temp_TL0 = Temp_T%256; TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0 + 12; /加 12 是對中斷延時的補償 TR0=1;/開計時中斷 if(key_data=18) delay_LCM(500);/開機鍵響 0.5 秒,其它 0.2 秒 else delay_LCM(200); TR0=0;/關(guān)計時器 SPEAKER = 1; void BeepT

39、imer0(void) interrupt 1 SPEAKER = !SPEAKER; TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0; 4.2.6 沒操作響應(yīng) 如果沒有操作的話就開定時器 0,開始計時,5s 過后就返回時鐘模式。在這段時間 之內(nèi)只要有按鍵操作,就會關(guān)定時器 0。 void No_action(void) interrupt 3 if(T100) T+;TH1=0X3C;TL1=0XB0; else rec_num=0,k=1,T=0,TR1=0; 5 功能分析及總結(jié) 5.1 功能分析 本系統(tǒng)順利完成了輸入正確密碼開鎖、出錯報警、超次鎖定、

40、修改用戶密碼等基本 的密碼鎖功能,并且還能實現(xiàn)遠(yuǎn)距離遙控、掉電存儲、聲光提示、遙控器學(xué)習(xí)識別等功 能。 完成后的實物圖如圖 19 所示。打開系統(tǒng)電源后程序初始化,LCD 提示輸入遙控器識別 按鍵,同時等待紅外接收頭輸出端的低電平,低電平出現(xiàn)說明遙控有鍵按下,外部中斷 設(shè)定為下降沿觸發(fā),故單片機進入中斷服務(wù)程序進行信號的接收解碼。接收解碼程序有 很好的抗干擾性,脈沖寬度的延時計數(shù)準(zhǔn)確,能夠識別重復(fù)信號,屏蔽多余按鍵避免誤 操作,并且 32 位編碼接收完畢后還要進行錯誤校驗,所以整個接收解碼的準(zhǔn)確性非常 高。 圖 19 不帶 LCD 的硬件實物圖 當(dāng)接收到識別按鍵后,單片機便可解碼出相應(yīng)的鍵碼和該

41、遙控器的用戶碼,組成該 遙控器的 ID。此 ID 是單片機識別不同遙控器的根據(jù),單片機從 AT24C02 中查找相應(yīng) 的 ID,如果此 ID 不存在,就會提示輸入該遙控器其余鍵碼的信息并保存到 AT24C02 相應(yīng)的地址。如果 ID 存在,系統(tǒng)即進入電子密碼鎖模式。系統(tǒng)進入密碼輸入界面,每 輸入一位密碼 LCD 就顯示“*”號,而且程序設(shè)有回格功能,刪除上一位輸入的密碼, 直到接收完八位的密碼后就開始運行密碼核對程序。若密碼輸入正確,就可以選擇進行 開鎖、上鎖或修改密碼的操作,并伴有 LED 燈顯示。當(dāng)密碼輸入錯誤的時候就會進入 密碼輸入提醒程序提醒錯誤次數(shù),密碼輸入錯誤次數(shù)累積到 3 次時系

42、統(tǒng)就會通過蜂鳴器 報警,而且程序進入死循環(huán),系統(tǒng)被鎖定。系統(tǒng)被鎖定后無法通過遙控器解鎖,只能夠 按電子鎖上面的復(fù)位鍵使整個程序復(fù)位。 如果選擇了密碼修改操作,LCD 提示輸入第一次新密碼,接收完 8 位新密碼后,保 存并 LCD 提示輸入第二次新密碼。兩次新密碼接收完畢后,進入密碼比較程序,判斷 兩次輸入的密碼是否相同。若相同則把新密碼保存到 origin_code 中,由于沒有外部存 儲器,密碼在下一次開機的時候還是原始密碼。若不相同則 LCD 顯示錯誤,程序返回。 密碼初始化 及遙控器 ID 清零按鍵 LCD 對比 度調(diào)節(jié)電阻 AT24C02 一體化紅外接 收頭 SM0038 STC89C

43、51RC 復(fù)位鍵 LED 燈指示 5.2 C 語言編程的延時技巧 編寫單片機程序的時候,經(jīng)常會遇到需要短時間延時的情況,如本系統(tǒng)紅外接收解 碼的時候就需要用到精確的 100us 的短時間延時來確保接收解碼的準(zhǔn)確性,有時甚至還 需要更高的精度。C 語言不像匯編一樣可以計算指令運行所要的時間,所以 C 語言的定 時是 C 語言編寫單片機程序最大的一個缺陷。當(dāng)然可以在 C 里嵌入?yún)R編來解決這個問題, 但在這里我沒有使用這個方法。還有可以考慮用定時器,但進出中斷程序以及重新裝載 計數(shù)初值也是要耗費一些時間的,也很難精確定時到微秒級,而且在極端的情況下,計 時器甚至已經(jīng)全部有其它的用途。所以在這里使用了

44、循環(huán)計時的方式計時,用斷點的方 式來調(diào)試。Keil uVision2 編譯器有程序調(diào)試的功能,通過調(diào)試本系統(tǒng)成功地只用 C51 語言產(chǎn)生精確的定時。編寫 100us 的延時程序,程序如下: void delay_100us(void) unsigned char i=48; while(-i); 首先在 Keil uVision2 上編譯上面的程序,并打開其匯編代碼。如圖 20 所示然后進 入 Keil uVision2 的調(diào)試狀態(tài)。在延時子程序的開始和結(jié)束處設(shè)下兩個斷點,見圖中的 兩個紅點。紅點之間的程序就是所調(diào)試的延時程序,接著把項目所用的晶振設(shè)為 12M, 這與硬件電路相對應(yīng)。按運行后程

45、序運行到斷點 1 時所用的時間為 0.秒; 圖 20 第一個斷點調(diào)試圖 再次按運行又可以從圖 21 中看到運行到斷點 2 所用的時間是 0.秒。兩時間相減是 0.秒, 第 1 個斷點 到第 1 個 斷點用時 就是說延時程序的運行時間是 101us,與理想值只差 1us,延時十分精確。 圖 21 第二個斷點調(diào)試圖 5.3 本設(shè)計優(yōu)缺點 紅外技術(shù)是一門相當(dāng)成熟的技術(shù),而單片機技術(shù)也有著相當(dāng)長的一段發(fā)展時間,本 系統(tǒng)把兩門技術(shù)結(jié)合起來,發(fā)揮各自的優(yōu)點,使紅外技術(shù)應(yīng)用在單片機控制的電子密碼 鎖上,也就是利用紅外遙控實現(xiàn)密碼鎖的開鎖、上鎖和修改密碼的操作。這樣的結(jié)合使 密碼鎖的使用更加方便,安全性能得到

46、進一步的提高。本系統(tǒng)的遙控器使用的是家電遙 控中使用得最多的專用芯片,所以抗干擾能力比較強,而且十分準(zhǔn)確可靠,誤碼率很低。 本系統(tǒng)還具有學(xué)習(xí)識別 NEC 編碼遙控器的功能,可以實現(xiàn)多對一操作,不同的遙控器 采用相同的密碼,不用擔(dān)心遙控器遺失的問題,而且用戶可以經(jīng)常更改密碼,防止密碼 被盜。當(dāng)輸入密碼多次錯誤時,報警系統(tǒng)自動啟動。接收部分用單片機作為主芯片,可 以根據(jù)不同要求來修改設(shè)定不同的密碼位數(shù)或改變、增添一些新功能。這是使用專用的 密碼鎖芯片和以前的機械密碼鎖都不能做到的。而且本系統(tǒng)既可以室內(nèi)使用,也可以在 野外使用。 但是紅外射束易受塵埃、雨水等物質(zhì)的吸收,易受氣候的影響。在惡劣的環(huán)境使

47、用 出現(xiàn)故障的機率會大大的提高。而且本系統(tǒng)的最大一個技術(shù)缺陷是密碼在發(fā)送過程中無 法避免通過監(jiān)測反射的紅外線和濾除環(huán)境噪聲的竊聽,這也是紅外通訊的最大的缺點。 還有就是由于紅外遙控編碼的調(diào)制方式有很多種,編碼格式也各不相同。所以要對 到第 2 個 斷點用時 第 2 個斷點 各種形式的遙控器進行學(xué)習(xí)就存在著一定的難度,最常用的學(xué)習(xí)紅外編碼的方法也就是 記錄下編碼的所有高低電平時間,這種方式能實現(xiàn)對大部分的遙控器進行學(xué)習(xí),不過這 樣需要大量的存儲空間,尤其是空調(diào)的遙控器,空調(diào)遙控器的編碼包含很多的信息,編 碼特別長。因此本系統(tǒng)只針對最常用的 NEC 編碼格式的遙控器進行學(xué)習(xí)與識別,舍棄 其它編碼。

48、這樣的優(yōu)點是專用性強,解碼的準(zhǔn)確率高;缺點是并不是所有編碼格式的遙 控器都能學(xué)習(xí),有一定的局限性。 5.4 設(shè)計總結(jié) 本次的課程設(shè)計過程中,Proteus 仿真軟件中都是沒有此類硬件的,只能放棄仿真。 由于電烙鐵不好用,所一制作了很久。用 keil 寫程序的時候,由于我們受 FPGA 和組態(tài) 軟件的影響,總是認(rèn)為程序是并行執(zhí)行的,所以遇到了一些困難。調(diào)試過程中,學(xué)習(xí)了 外部中斷還有定時中斷,感覺很有用。我們小組參考了一個音樂播放器的程序而想出了 按鍵發(fā)音的主意。沒操作返回也是用定時器寫的。液晶顯示方面,參考了一些程序,對 寫命令還有寫數(shù)據(jù)有了一定的認(rèn)識??傮w感覺就是要認(rèn)真思考,用不同的方法去思

49、考一 些遇到的問題,或者去驗證我們的想法。 參 考 文 獻 李朝青. 2005. 單片機原理及接口技術(shù)(第 3 冊)M. 北京: 北京航空航天大學(xué)出版社. 17- 140 來清民. 2008. 傳感器與單片機接口及實例M. 北京: 北京航空航天大學(xué)出版社. 213-226 張義和,陳敵北,周金圣. 2006. 例說 Protel2004M. 北京: 人民郵電出版社. 142-204 康華光. 2000. 電子技術(shù)基礎(chǔ)數(shù)字部分(第四版)M. 北京: 高等教育出版社.213-228 譚浩強. 2005. C 語言程序設(shè)計(第三版)M. 北京: 清華教育出版社. 204-278 Q1 8550 P1

50、.0/T2 1 P1.1/T2EX 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 RST 9 P3.0/RxD 10 P3.1/TxD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.5/T1 15 P3.6/WR 16 P3.7/RD 17 XTAL2 18 XTAL1 19 VSS 20 P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 P2.7/A15 28 PSEN 29 ALE 30 EA/V

51、PP 31 P0.7/AD7 32 P0.6/AD6 33 P0.5/AD5 34 P0.4/AD4 35 P0.3/AD3 36 P0.2/AD2 37 P0.1/AD1 38 P0.0/AD0 39 VCC 40 U1 89S51 12 Y1 XTAL 104 C1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 LCD1 LCD1602 VCC 1 2 3 4 5 6 7 8 9 RP1 R_10K 30P C2 30P C3VCC 10uF E1 VCC 1K R3 1K R9 1K R10 D2 LED D3 LED VCC LED1 LED2 1K R

52、5 VCC 100 R6 SPEAKER LED2 LED1 LED3 D0 D1 D2 D3 D4 D5 D6 D7 E RW RS D0 D1 D2 D3 D4 D5 D6 D7 E RW RS E0 1 E1 2 E2 3 GND 4 SDA 5 SCL 6 WC 7 VCC 8 U3 24C02 VCC 10K R7 10K R8 WC SCL SDA WC SCL SDA VCC VCC 1K R4 D1 LED 42 13 S1 1K R2R1 10k IN 1 3 OUT 2 GND U2 7805 1 2 J1 POWERIN VCC 104 C4 SW-Power1 SW-S

53、PST Vss 1 Vdd 2 OUT 3 1 VCC 42 13 S2 D4 LED 1K R11 LED3 SPEAKER SPEAKER1 Speaker 附錄 A 電路連接圖 附錄 C 實物圖 圖 1HZ-FT007 的 20 鍵車載 MP3 紅外遙控器 圖 2 不帶 LCD 硬件實物圖 圖 3 帶 LCD 硬件實物圖 程序附錄: 主程序: #include sbit IR = P32; / 紅外中斷輸入端口(INT0 sbit SPEAKER=P30; sbit LED1=P13; sbit LED2=P14; sbit LED3=P15; #define SYSTEM_OSC /定

54、義晶振頻率 HZ #define uchar unsigned char #define uint unsigned int uchar dataIR4,ir_data,new_code1=0,new_code2=0; uchar key_data=100; int rec_num=0,show=0,wrong_num=0,flag=0; uchar origin_code=1,2,3,4,5,6,7,8,receive_code8,com_code8,com1_code8; int T,ir_flag=0,code_right=0,j=0,n=0,beep_flag=0,shi,fen,mi

55、ao,k=0; int code FreTab21 = 300,400,600,800,800,1200,1400,300,400,600,800,800,1200,1400,300,400,600,800,800,1200,1400 ; /原始 頻率表 uchar Sound_Temp_TH0,Sound_Temp_TL0;/音符定時器初值暫存 extern void delay_100us(void); extern void write_sfm(uchar add,uchar date); extern void initLCM( void); /LCD 初始化子程序 extern vo

56、id DisplayListChar(uchar X,uchar Y, unsigned char *DData); extern void DisplayOneChar(uchar X,uchar Y, unsigned char DData); extern void delay_LCM(uint k); /顯示指定坐標(biāo)的一串字符子函數(shù) extern void LCM_cls(void); void delay_LCM(uint k); void delay_100us(void); void check_code(void); void change_code(void); void B

57、eep(void); /* 按 鍵 數(shù) 據(jù) 編 碼 */ /* 18,19,20 */ /* 15,16,17 */ /* 12,13,14 */ /* 0, 10,11 */ /* 1, 2, 3 */ /* 4, 5, 6 */ /* 7, 8, 9 */ /* 遙控器 */ uchar key_match() switch(ir_data) case 0 x68: return(0); case 0 x30: return(1); case 0 x18: return(2); case 0 x7a: return(3); case 0 x10: return(4); case 0 x38

58、: return(5); case 0 x5a: return(6); case 0 x42: return(7); case 0 x4a: return(8); case 0 x52: return(9); case 0 x98: return(10); case 0 xb0: return(11); case 0 xe0: return(12); case 0 xa8: return(13); case 0 x90: return(14); case 0 x22: return(15); case 0 x02: return(16); case 0 xc2: return(17); cas

59、e 0 xa2: return(18); case 0 x62: return(19); case 0 xe2: return(20); default : return(99); main(void) TH1=0X3C;TL1=0XB0; initLCM(); TMOD |= 0 x11;/定時器 0 和定時器 1 工作方式都是 1 ET0 = 1; ET1=1; IT0=1; EX0=1; EA=1; TR0=0; DisplayListChar(3,0,WELCOME!); DisplayListChar(3,1,00:00:00); shi=0; fen=0; miao=0; dela

60、y_LCM(5000); while(1) /時鐘部分程序 F1: DisplayListChar(0,0, ); DisplayListChar(0,1, ); DisplayListChar(6,0,(0_0); DisplayListChar(3,1, : : ); write_sfm(3,shi); write_sfm(6,fen); write_sfm(9,miao); while(1) delay_LCM(2000); DisplayListChar(6,0,(_); if(ir_flag=1) key_data=key_match(),ir_flag=0; if(key_data

溫馨提示

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

評論

0/150

提交評論