基于8051單片機(jī)的電子密碼鎖設(shè)計(jì)_第1頁
基于8051單片機(jī)的電子密碼鎖設(shè)計(jì)_第2頁
基于8051單片機(jī)的電子密碼鎖設(shè)計(jì)_第3頁
基于8051單片機(jī)的電子密碼鎖設(shè)計(jì)_第4頁
基于8051單片機(jī)的電子密碼鎖設(shè)計(jì)_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)目 錄 TOC o 1-3 h z u 一、引言1.1問題的提出在日常的生活和工作中, 住宅與部門的安全防范、單位的文件檔案、財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存多以加鎖的辦法來解決。若使用傳統(tǒng)的機(jī)械式鑰匙開鎖,人們常需攜帶多把鑰匙, 使用極不方便, 且鑰匙丟失后安全性即大打折扣。眼下假冒偽劣的機(jī)械鎖泛濫成災(zāi),互開率非常之高。機(jī)械鎖的這些弊端為一種新型的鎖-電子密碼鎖,提供了發(fā)展的空間。據(jù)有關(guān)資料介紹,電子密碼鎖的研究從20世紀(jì)30年代就開始了,在一些特殊場所早就有所應(yīng)用。這

2、種鎖是通過鍵盤輸入一組密碼完成開鎖過程。研究這種鎖的初衷,就是為提高鎖的安全性。由于電子鎖的密鑰量(密碼量)極大,可以與機(jī)械鎖配合使用,并且可以避免因鑰匙被仿制而留下安全隱患。電子鎖只需記住一組密碼,無需攜帶金屬鑰匙,免除了人們攜帶金屬鑰匙的煩惱,而被越來越多的人所欣賞。電子鎖的種類繁多,例如數(shù)碼鎖,指紋鎖,磁卡鎖,IC卡鎖,生物鎖等。但較實(shí)用的還是按鍵式電子密碼鎖。隨著單片機(jī)的問世,出現(xiàn)了帶微處理器的智能電子密碼鎖,它除了具有一般電子密碼鎖的功能外,還引入了智能化管理,專家分析系統(tǒng)等功能,從而使密碼鎖具有很高的安全性,可靠性。當(dāng)今安全信息系統(tǒng)應(yīng)用越來越廣泛,特別在保護(hù)機(jī)密、維護(hù)隱私和財(cái)產(chǎn)保護(hù)

3、方面起到重大作用,而基于電子密碼鎖的安全系統(tǒng)是其中的組成部分,因此研究它具有重大的現(xiàn)實(shí)意義。1.2國內(nèi)外的研究現(xiàn)狀20世紀(jì)80年代后,隨著電子鎖專用集成電路的出現(xiàn),電子鎖的體積縮小,可靠性提高,成本較高,只適合使用在安全性要求較高的場合,且需要有電源提供能量,使用還局限在一定范圍,難以普及,所以對它的研究一直沒有明顯進(jìn)展。目前,在西方發(fā)達(dá)國家,電子密碼鎖已被廣泛應(yīng)用于智能門禁系統(tǒng)中,通過多種更加安全,更加可靠的技術(shù)實(shí)現(xiàn)大門的管理。在我國電子密碼鎖的成本還很高,應(yīng)用還不廣泛。目前市場上的按鍵密碼鎖主要有以下兩類,但都存在不同程度的缺陷。固定鍵盤式電子密碼鎖:這類密碼鎖使用固定鍵盤輸入門鎖密碼。用

4、戶密碼可以在18位任意設(shè)定,密碼量極大,嘗試法輸入密碼時(shí),系統(tǒng)會出現(xiàn)保護(hù)性自鎖,同時(shí)具有自動(dòng)報(bào)警功能。這種密碼鎖成本不高,操作非常簡單,常與機(jī)械彈子鎖配合使用。類密碼鎖有以下缺陷:需要安裝固定鍵盤,數(shù)字按鍵的位置固定不變,用戶在操作時(shí)沒有隱蔽性,其他人可以通過記住密碼輸入人員的手勢推測出輸入的密碼,或被他人偷拍輸入過程而得到密碼。隨機(jī)鍵盤式密碼鎖:為了防止用戶在利用固定鍵盤輸入密碼的過程被偷窺或偷拍,研制出了隨機(jī)鍵盤系統(tǒng)。用這種鍵盤輸入密碼時(shí),每輸入一個(gè)數(shù)字,鍵盤上的數(shù)字鍵的擺放順序會隨機(jī)變化,用戶利用變化后的鍵盤輸入下一位數(shù)字,使得利用偷窺或偷拍的方式記住密碼的企圖無法奏效。但它的缺點(diǎn)也是顯

5、著的:由于隨機(jī)鍵盤對硬件要求較高,要采用觸摸屏幕,鍵盤與顯示器就必須合二為一,因此成本較高,難于應(yīng)用到保險(xiǎn)柜上。二、設(shè)計(jì)方案2.1硬件設(shè)計(jì)方案本設(shè)計(jì)主要由單片機(jī)、矩陣鍵盤、液晶顯示器、復(fù)位電路和晶振以及蜂鳴器等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼和進(jìn)行各種功能的實(shí)現(xiàn)。由用戶通過連接單片機(jī)的矩陣鍵盤輸入密碼,后經(jīng)過單片機(jī)對用戶輸入的密碼與預(yù)先保存的密碼進(jìn)行對比,從而判斷密碼是否正確。通過單片機(jī)控制輸出到喇叭及繼電器的電信號,從而實(shí)現(xiàn)錯(cuò)誤報(bào)警與正確打開電子鎖的操作。本設(shè)計(jì)中采用繼電器上接LED燈來表示鎖的開關(guān)狀態(tài)。系統(tǒng)整體設(shè)計(jì)框圖如圖2-1所示。電源 電源鍵盤輸入模塊鍵盤輸入模塊晶振電路復(fù)位電路

6、AT89C52顯示模塊報(bào)警電路開鎖電路 圖2-1各模塊主要功能如下:1鍵盤輸入模塊:分為密碼輸入按鍵與幾個(gè)功能按鍵,用于完成密碼的輸入功能。2顯示模塊:用于完成對系統(tǒng)狀態(tài)顯示及操作提示功能。3報(bào)警電路:用于完成輸錯(cuò)密碼時(shí)候的警報(bào)功能。4復(fù)位電路:完成系統(tǒng)的復(fù)位。5開鎖電路:應(yīng)用繼電器及發(fā)光二極管模擬開鎖,完成開鎖及開鎖提示。6晶振電路:外接晶振,使系統(tǒng)具有需要的機(jī)器周期,對開鎖時(shí)間的決定有很大用處。7. 電源:提供5V電壓值的直流供電。2.2軟件設(shè)計(jì)方案利用51 單片機(jī),設(shè)計(jì)密碼鎖電路和控制程序。其基本功能實(shí)現(xiàn)如下: 1、 使用LCD 顯示器來顯示密碼輸入的相關(guān)信息。 2、 可以設(shè)置4 位數(shù)字

7、和符號(0-9,*)密碼。 3、 內(nèi)定一組4 位數(shù)字密碼“1234”4、 鍵盤設(shè)置以下5 個(gè)功能鍵: A:設(shè)置新的密碼 B:輸入密碼 C:清除按鍵 D:返回按鍵初始態(tài)按鍵 #:密碼輸入完成確認(rèn) R:系統(tǒng)復(fù)位鍵 5、 密碼輸入正確則繼電器啟動(dòng)2 秒。輸入錯(cuò)誤則發(fā)出警報(bào)聲。 程序開始執(zhí)行,LCD 顯示器顯示如下: PASSWORD A OR B KEY 按下鍵A:設(shè)置新的4 位數(shù)字或符號(0-9,*)密碼。 按下鍵B:輸入4 位數(shù)字或符號(0-9,*)密碼并做檢查。 當(dāng)輸入4 位數(shù)字密碼,正確時(shí),LCD 顯示:PASSWORD OK 。繼電器啟動(dòng)2,用以仿真電子門鎖開啟。 錯(cuò)誤時(shí),LCD 顯示:P

8、ASSWORD ERROR ,同時(shí)蜂鳴器產(chǎn)生聲響報(bào)警。Y密碼為4位Y密碼為4位YYNN開始程序初始化B:開鎖密碼正確密碼正確出錯(cuò)報(bào)警開鎖繼電器器吸合2s輸入修改的密碼N修改密碼返回zA:修改密碼 圖2-2三、 硬件電路設(shè)計(jì)3.1單片機(jī)AT89C52簡介3.1.1 主要特性AT89C52單片機(jī)是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含8K Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和I

9、SP Flash存儲單元,功能強(qiáng)大的微型計(jì)算機(jī)的AT89CAT89C52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89C52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。表3-1中列出了AT89C5表3-1 AT89C52主要特性兼容MCS-51指令系統(tǒng)8k

10、可反復(fù)擦寫(1000次)ISP Flash ROM32個(gè)雙向I/O口4.5-5.5V工作電壓3個(gè)16位可編程定時(shí)/計(jì)數(shù)器時(shí)鐘頻率0-33MHz全雙工UART串行中斷口線256x8bit內(nèi)部RAM2個(gè)外部中斷源低功耗空閑和省電模式中斷喚醒省電模式3級加密位看門狗(WDT)電路軟件設(shè)置空閑和省電功能靈活的ISP字節(jié)和分頁編程雙數(shù)據(jù)寄存器指針 3.1.2 管腳說明AT89C52的管腳分布如圖3-1P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。P1口是一個(gè)內(nèi)部提供上拉電阻的

11、8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P3口作

12、為AT89S52的一些特殊功能管腳備選功能,P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)圖3-1 P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1) P3.4 T0(記時(shí)器0外部輸入)P3.5 T1(記時(shí)器1外部輸入) P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。 ALE/PROG:當(dāng)訪問外部存儲器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號,此頻率為

13、振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時(shí),這兩次有效的/PSEN信號將不出現(xiàn)。 /EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密

14、方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出。3.2 44矩陣鍵盤圖3-2 圖3-3由于本設(shè)計(jì)所用到的按鍵數(shù)量較多而不適合用獨(dú)立按鍵式鍵盤。采用的是矩陣式按鍵鍵盤,它由行線和列線組成,也稱行列式鍵盤,按鍵位于行列的交叉點(diǎn)上,密碼鎖的密碼由鍵盤輸入完成,與獨(dú)立式按鍵鍵盤相比,要節(jié)省很多I/O口。本設(shè)計(jì)中使用的這個(gè)4*4鍵盤不但能完成密碼的輸入還能作特別功能鍵使用,比如清除功能等。鍵盤的每個(gè)按鍵功能在程序

15、設(shè)計(jì)中設(shè)置。如圖所示,本系統(tǒng)采用44矩陣鍵盤,16個(gè)按鍵分為輸入字符和數(shù)字鍵:*、0、#、1、2、3、4、5、6、7、8、9;功能鍵A、B、C、D。矩陣鍵盤內(nèi)部原理圖如圖3-2所示,外觀圖如圖3-3所示。3.3復(fù)位電路單片機(jī)復(fù)位是使CPU和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。復(fù)位后PC0000H,使單片機(jī)從第個(gè)單元取指令。單片機(jī)復(fù)位后重裝初始密碼。時(shí)鐘電路工作后,在REST管腳上加兩個(gè)機(jī)器周期的高電平,芯片內(nèi)部開始進(jìn)行初始復(fù)位(如圖34)。圖3-4 這是一個(gè)不僅可上電自動(dòng)復(fù)位,同時(shí)也可按鍵脈沖復(fù)位的雙功能復(fù)位電路。復(fù)位鍵名稱為R,對應(yīng)于軟件設(shè)計(jì)中的復(fù)位功能按鍵。

16、3.4 振蕩電路AT89C52引腳XTAL1和XTAL2與晶體振蕩器及電容連接。晶振、電容及片內(nèi)與非門(作為反饋、放大元件)構(gòu)成了電容三點(diǎn)式振蕩器,振蕩信號頻率與晶振頻率及電容的容量有關(guān),但主要由晶振頻率決定,范圍在033MHz之間,電容取值范圍在535pF之間。本設(shè)計(jì)晶振選擇頻率為12MHZ,電容選擇33pF如圖35。經(jīng)計(jì)算得單片機(jī)工作胡機(jī)器周期為:12(112M)=1us。圖3-53.5 液晶顯示屏LCD現(xiàn)在的字符型液晶模塊已經(jīng)是單片機(jī)應(yīng)用設(shè)計(jì)中最常用的信息顯示器件了。1602型LCD顯示模塊具有體積小,功耗低,顯示內(nèi)容豐富等特點(diǎn)。1602型LCD可以顯示2行16個(gè)字符,有8位數(shù)據(jù)總線D0

17、D7和RS,R/W,EN三個(gè)控制端口,工作電壓為5V,并且具有字符對比度調(diào)節(jié)和背光功能。如圖3-6所示。接口信號說明:1602型LCD的接口信號說明如表3-2所示。表3-2 1602型LCD的接口信號說明第1腳VSS 電源地第9腳D2雙向數(shù)據(jù)線第2腳VDD +5V電源第10腳D3雙向數(shù)據(jù)線第3腳VEE 液晶顯示偏壓信號第11腳D4雙向數(shù)據(jù)線第4腳RS 數(shù)據(jù)/命令選擇端第12腳D5雙向數(shù)據(jù)線第5腳R/ W 讀/寫 選擇端第13腳D6雙向數(shù)據(jù)線第6腳E 使能端第14腳D7雙向數(shù)據(jù)線第7腳D0雙向數(shù)據(jù)線第15腳BLA 背光源正極第8腳D1 雙向數(shù)據(jù)線第16腳BLK 背光源負(fù)極主要技術(shù)參數(shù):1602型

18、LCD的主要技術(shù)參數(shù)如表3-3所示。表3-3 1602型LCD的主要技術(shù)參數(shù)顯示容量162個(gè)字符芯片工作電壓4.55.5V工作電流2.0mA(5.0V)模塊最佳工作電壓5.0V字符尺寸2.954.35(WXH)mm基本操作程序:讀狀態(tài):令RS=L,RW=L, E=H 輸出:D0D7=狀態(tài)字讀數(shù)據(jù):令RS=H,RW=H, E=H 輸出:無寫指令:令RS=L,RW=L,D0D7=指令碼,E=高脈沖 輸出:D0D7=數(shù)據(jù)寫數(shù)據(jù):令RS=H,RW=L, D0D7=數(shù)據(jù), E=高脈沖 輸出:無LCD中D0D7這8個(gè)引腳在設(shè)計(jì)時(shí)接到了P0口。P0口輸出級有個(gè)鎖存器,一個(gè)數(shù)據(jù)選擇器還有兩個(gè)場效應(yīng)管。當(dāng)P0口

19、做IO口使用時(shí),如果IO口實(shí)際輸出為0,下拉場效應(yīng)管導(dǎo)通,外界可以通過場管檢測到低電平。而如果實(shí)際輸出為1,這個(gè)場效應(yīng)管是截止的,如果沒有上拉電阻,P0口就沒有辦法知道確切的值,處于一種實(shí)際上懸空的狀態(tài)。這時(shí)應(yīng)加上上拉電阻,同時(shí)也提高了驅(qū)動(dòng)能力。 圖3-63.6 開鎖電路設(shè)計(jì)開鎖控制電路的功能是當(dāng)輸入正確的密碼后將鎖打開。本系統(tǒng)使用單片機(jī)的P3.6口線發(fā)出信號,經(jīng)PNP三極管放大后,通過繼電器驅(qū)動(dòng)電磁閥動(dòng)作將鎖打開2秒鐘。在電路中設(shè)置有兩盞LED燈:綠燈亮?xí)r,鎖是閉合的,而紅燈亮?xí)r將鎖打開。本電路中采用PNP而不用NPN型三極管,是因?yàn)镻3.6口低電平時(shí)提供的灌電流經(jīng)PNP放大后比高電平NPN

20、放大的電流大,拉動(dòng)能力更強(qiáng)。電動(dòng)鎖的開鎖電路圖如圖3-7所示。 圖3-73.7 報(bào)警電路報(bào)警電路的功能是由系統(tǒng)發(fā)出報(bào)警信號控制報(bào)警裝置的發(fā)聲。當(dāng)輸入密碼錯(cuò)誤時(shí)啟動(dòng)報(bào)警裝置。報(bào)警部分由一個(gè)發(fā)聲裝置及外圍電路組成,正常情況下不發(fā)聲,只有當(dāng)密碼輸入錯(cuò)誤時(shí),單片機(jī)的P3.7口線輸出高電平信號并經(jīng)三極管放大后,使喇叭發(fā)出聲音報(bào)警。當(dāng)密碼正確時(shí),喇叭不發(fā)聲報(bào)警,而是直接開鎖。當(dāng)然,喇叭的發(fā)聲也可用脈沖信號來實(shí)現(xiàn)。圖3-8四、軟件程序設(shè)計(jì)4.1軟件設(shè)計(jì)流程圖設(shè)計(jì)功能概述:開始時(shí)LCD顯示提示“PASSWORD A OR B KEY”。按下A鍵:設(shè)置新密碼,LCD第2行顯示“A:”提示當(dāng)前為A修改密碼模式。需

21、要先正確輸入原始密碼,再輸入所要改成的密碼。若原始密碼錯(cuò)誤則蜂鳴器報(bào)警,顯示“Password Error”這時(shí)可再按A鍵進(jìn)行重新的設(shè)置,直到正確輸入了初始密碼。正確輸入了初始密碼后,LCD的第一行提示“NEW PASSWORD”,這時(shí)輸入可輸入4位數(shù)新密碼,按#鍵確認(rèn)。若新密碼不足4位,程序返回到“NEW PASSWORD”的設(shè)置初始態(tài),直到輸入了4位數(shù)字密碼并按下#鍵,才將密碼修改完成。按下B鍵:輸入密碼并檢查,系統(tǒng)會將所輸入的密碼與系統(tǒng)密碼進(jìn)行比對。若輸入密碼正確則在LCD第二行顯示“Password OK”,同時(shí)繼電器啟動(dòng)2s,用以仿真電子門鎖開啟。若輸入密碼錯(cuò)誤則顯示“Passwor

22、d Error”, 同時(shí)蜂鳴器產(chǎn)生聲響報(bào)警。按下C鍵:可以清除輸入錯(cuò)誤的密碼,前提是要已經(jīng)輸入了數(shù)字,若沒有數(shù)字輸入則無輸入可清除。按下D鍵:返回初始態(tài)即LCD第一行顯示“PASSWORD”第二行顯示“A OR B KEY”。該按鍵與系統(tǒng)復(fù)位鍵R的區(qū)別在于,系統(tǒng)復(fù)位鍵R按下時(shí)密碼鎖內(nèi)部的密碼將變?yōu)槌跏济艽a“1234”,而當(dāng)D鍵按下時(shí)修改后的密碼不會被歸于初始密碼“1234”,即可記住修改的密碼。數(shù)字鍵和*鍵:作為密碼使用,按下對應(yīng)按鍵,LCD顯示屏第二行顯示對應(yīng)的按鍵值,并將其記入于一個(gè)輸入密碼數(shù)組中。當(dāng)輸入數(shù)目大于4個(gè)時(shí),再按輸入將沒有反應(yīng),這時(shí)可以按C鍵清除錯(cuò)誤位后再次寫入。軟件設(shè)計(jì)的總流

23、程圖如圖4-1所示。NN數(shù)字鍵開始LCD顯示及相關(guān)處理鍵盤掃描,是否有鍵輸入功能鍵(A、B、C、D、#)還是數(shù)字(含*鍵)鍵功能鍵模塊程序處理功能鍵Y數(shù)字鍵模塊程序處理圖4-14.2 具體功能軟件實(shí)施說明:該部分將對主要涉及的功能模塊進(jìn)行詳細(xì)的敘述。4.2.1 如圖3-2,本系統(tǒng)使用44矩陣鍵盤當(dāng)沒有鍵按下時(shí),行線和列線之間是不相連的,若第N行與第M列的鍵被按下,那么第N行與第M列的線就被接通。根據(jù)上述原理,本系統(tǒng)的鍵盤掃描方法是利用P1口的低四位作為行掃描線,P1口的高四位作為列回掃線。具體實(shí)施方法為:先使P1.0口輸出低電平,P1口其他口輸出高電平,然后對P1.4、P1.5、P1.6、P1

24、.7四個(gè)口分別作判斷。若此四口都為高電平,則沒有鍵按下;若有鍵按下,P1.4、P1.5、P1.6、P1.7四個(gè)口必定有一個(gè)口輸入為低電平,再判斷P2.4、P2.5、P2.6、P2.7哪個(gè)口為低電平則可判斷按鍵在哪列上。如P1.4、P1.5、P1.6、P1.7沒有低電平,再使P1.1為低電平,其他口為高電平,依次掃描下去,找到按鍵所在的行,再判斷P1口的高四位哪一位為低,便可知道鍵在哪一列上。流程圖見圖4-2,主要過程如下:判斷有無鍵按下;延時(shí)后判斷是否確實(shí)有鍵按下。如果有,確認(rèn)有鍵按下,如果沒有,那么確認(rèn)為鍵抖動(dòng);判斷是哪個(gè)鍵被按下(鍵掃描獲得閉合鍵的行、列值);是是是否輸入行掃描信號行掃描信

25、號移位讀入列信號是否有鍵輸入?按照行列計(jì)算鍵值返回特征碼釋放按鍵掃描端口否是開始是否有列信號輸入延時(shí)去抖動(dòng)否是否有鍵輸入?圖4-24.2.2 分為3個(gè)子程序:LCD1602 命令字寫入、LCD1602 初始化、LCD1602 字符寫入LCD1602 命令字寫入子程序作用是將數(shù)據(jù)端的值,寫入LCD中。程序如下:void lcd_command_write(uchar command) lcd_data_port = command; lcd_rs_port = 0; lcd_rw_port = 0; lcd_en_port = 0; delay_1ms(1); lcd_en_port = 1;

26、lcd_en_port = 0; LCD1602 初始化主要作用是設(shè)定LCD的工作模式。程序如下:void lcd_system_reset() lcd_command_write(0 x01); lcd_command_write(0 x38);lcd_command_write(0 x0c);LCD1602 字符寫入主要作用是在顯示屏的第x_pos行第y_pos列寫入字符lcd_dat。程序如下:void lcd_char_write(uchar x_pos,y_pos,lcd_dat) x_pos &= 0 x0f; /* X位置范圍 015 */ y_pos &= 0 x01; /*

27、Y位置范圍 0 1 */ if(y_pos=1) x_pos += 0 x40;/*第2行的附加數(shù)*/ x_pos += 0 x80; lcd_command_write(x_pos); lcd_rs_port = 1; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = lcd_dat;lcd_en_port = 1; lcd_en_port = 0; 4.2.3 主程序數(shù)字鍵處理部分以數(shù)字鍵1為例說明。switch(key_value_buff) /*顯示按鍵對應(yīng)的絲印*/case 0 x18: if(n4&s=0) lcd_char_wri

28、te(k,1,1); inputwordn=1; k+; n+; break; 0 x18是數(shù)字鍵1的鍵盤掃描特征碼。n用于記錄密碼位數(shù),n的初值為0,n4即確保只能輸入4位密碼,每輸入一位密碼n加1。s用于輸入錯(cuò)誤密碼時(shí)的按鍵輸入鎖定,當(dāng)n=1時(shí)數(shù)字鍵無法輸入,s=0時(shí)才能輸入密碼。k用于記錄顯示數(shù)字的位置,每輸入一位密碼,k加1即下移一位。lcd_char_write(k,1,1);在第2行的第k位寫字符1inputwordn=1;在記錄密碼的數(shù)組第n位記錄鍵值14.2.4 主程序功能鍵處理部分返回按鍵D:按下該鍵時(shí)LCD第一行顯示“PASSWORD”,第二行顯示“A OR B KEY”n

29、=0; k=6; d=0; j=0; s=1; 的作用是參數(shù)的初始化。case 0 x81: /*返回按鍵,對應(yīng)鍵盤上的D*/ for(i=0;i16;i+) lcd_char_write(i,0,key_table_1i); for(i=0;i6&n0) lcd_char_write(k-1,1, ); k-; n-; inputwordn= ;break;密碼輸入按鍵B:將s參數(shù)設(shè)為0,數(shù)字按鍵才能輸入;而后在第二行寫提示符“B:” k=6; d=0; j=0; s=0; 的作用是參數(shù)的初始化設(shè)定。SSR=1;表示鎖是關(guān)的。case 0 x84: /*輸入密碼按鍵對應(yīng)鍵盤上的B*/s=0;

30、for(i=0;i16;i+) lcd_char_write(i,0,key_table_1i); lcd_char_write(0,1,B);lcd_char_write(1,1,:); for(i=2;i16;i+) lcd_char_write(i,1, ); /*顯示標(biāo)題*/ k=6; d=0; s=0; j=0; SSR=1; break;密碼修改按鍵A: 將s參數(shù)設(shè)為0,數(shù)字按鍵才能輸入;而后在第二行寫提示符“A:” 參數(shù)初始化中d=1;表示處于密碼修改模式中。(d=0是開鎖模式;d=2是輸入了正確密碼后的開鎖模式)case 0 x88:/*修改密碼按鍵對應(yīng)鍵盤上的A*/s=0;f

31、or(i=0;i16;i+) lcd_char_write(i,0,key_table_1i);lcd_char_write(0,1,A);lcd_char_write(1,1,:); for(i=2;i16;i+) lcd_char_write(i,1, ); n=0; s=0; k=6;d=1; /*修改密碼按鍵,按下時(shí)的狀態(tài)初始化*/ break;確認(rèn)按鍵#:根據(jù)具體的參數(shù)條件執(zhí)行相應(yīng)的語句,主要有:密碼匹配狀態(tài)檢查;密碼錯(cuò)誤處理;開鎖模式(d=0)處理;修改密碼模式(d=1)處理;正確輸入初始密碼后的修改密碼模式(d=2)處理;case 0 x41:/*確認(rèn)按鍵對應(yīng)鍵盤上的#*/s=0

32、;/*密碼匹配狀態(tài)檢查*/if(d!=2) for(j=0,n=0;n4;n+) if(passwordn=inputwordn) j+;/*j!=4 輸入密碼錯(cuò)誤不開鎖,并報(bào)警*/if (j!=4) for(i=0;i16;i+) lcd_char_write(i,1,key_error_tablei); Speaker_output(); /*喇叭發(fā)出聲音*/n=0;k=6;s=1; /*d=0對應(yīng)輸入密碼狀態(tài),輸入了正確的初始密碼后開鎖*/if (j=4&d=0) for(i=0;i16;i+) lcd_char_write(i,1,key_pass_tablei); for(i=0;i

33、4;i+) inputwordi= ;/*清空存儲的密碼*/ SSR=0;/*開鎖了*/ for(i=0;i20;i+) delay_1ms(100); SSR=1; n=0;k=6;s=1; /*d=1對應(yīng)修改密碼狀態(tài),當(dāng)輸入了正確的初始密碼后d=2*/if (j=4&d=1)d=2; n=0; k=6; for(i=0;i16;i+) lcd_char_write(i,0,key_table_3i); for(i=6;i10;i+) lcd_char_write(i,1, ); /*d=2對應(yīng)修改密碼狀態(tài)下,已經(jīng)輸入正確的初始密碼;當(dāng)n=4時(shí)新密碼輸入完成*/if(d=2&n=4) n=0

34、;k=6;d=0; for(i=0;i4;i+) passwordi=inputwordi; for(i=0;i16;i+) lcd_char_write(i,0,key_modify_tablei); /*d=2對應(yīng)修改密碼狀態(tài)下,已經(jīng)輸入正確的初始密碼;當(dāng)n!=4時(shí)新密碼重新輸入*/if(d=2&n!=4) n=0; k=6; for(i=0;i16;i+) lcd_char_write(i,0,key_table_3i); for(i=6;i10;i+) lcd_char_write(i,1, ); break;五、設(shè)計(jì)原理圖圖5-1六、設(shè)計(jì)程序/* 程序說明: #鍵為確認(rèn)鍵,程序中*鍵

35、當(dāng)密碼使用 R鍵設(shè)定為圖中的復(fù)位鍵 C為清除鍵 D為返回 LCD顯示中沒用忙等待 用延時(shí)確保數(shù)據(jù)的寫入*/*頭文件*/#include #include #define uint unsigned int#define uchar unsigned char#define scan_key_port P1 /*定義矩陣按鍵端口*/sbit lcd_rs_port = P20; /*定義LCD控制端口*/sbit lcd_rw_port = P21; /*定義LCD控制端口*/sbit lcd_en_port = P22; /*定義LCD控制端口*/#define lcd_data_port P

36、0 /*定義LCD控制端口*/sbit SSR = P36; /*繼電器端口*/sbit Speaker_port = P37; /*喇叭控制端口*/uchar password = 1234;/*初始密碼*/uchar inputword4;/*輸入的密碼存放*/*1MS為單位的延時(shí)程序*/void delay_1ms(uchar x) uchar j; while(x-) for(j=0;j125;j+); /*喇叭發(fā)聲簡單程序*/void Speaker_output()uchar i;for(i=0;i100;i+)Speaker_port = 0;delay_1ms(3);Speak

37、er_port = 1;delay_1ms(1);/*矩陣按鍵掃描程序*/uchar key_scan() uchar sccode,recode; scan_key_port=0 xf0; /* 發(fā)全 0 的行掃描碼,列線輸入 */ if(scan_key_port&0 xf0)!=0 xf0) /* 若有鍵按下 */ delay_1ms(2); /*延時(shí)去抖動(dòng)*/ if(scan_key_port&0 xf0)!=0 xf0) /* 若有鍵按下 */ sccode=0 xfe; /*逐行掃描初值*/ while(sccode&0 x10)!=0) scan_key_port=sccode;

38、 /* 輸出行掃描碼 */ if(scan_key_port&0 xf0)!=0 xf0) /* 本行有鍵按下 */ recode=(scan_key_port&0 xf0)|0 x0f; scan_key_port=0 xf0;scan_key_port = 0 xff; /*釋放按鍵掃描端口*/ return(sccode)+(recode);/* 返回特征碼 */ else sccode=(sccode1)|0 x01; /* 行掃描左移一位 */ scan_key_port = 0 xff; /*釋放按鍵掃描端口*/ return(0); /* 無鍵按下,返回值為0 */void lc

39、d_command_write(uchar command) /*LCD1602 命令字寫入*/ lcd_data_port = command; lcd_rs_port = 0; lcd_rw_port = 0; lcd_en_port = 0;delay_1ms(1); lcd_en_port = 1; lcd_en_port = 0; void lcd_system_reset() /*LCD1602 初始化*/lcd_command_write(0 x01); lcd_command_write(0 x38);lcd_command_write(0 x0c);void lcd_char

40、_write(uchar x_pos,y_pos,lcd_dat) /*LCD1602 字符寫入*/ x_pos &= 0 x0f; /* X位置范圍 015 */ y_pos &= 0 x01; /* Y位置范圍 0 1 */ if(y_pos=1) x_pos += 0 x40; x_pos += 0 x80; lcd_command_write(x_pos); lcd_rs_port = 1; lcd_rw_port = 0; lcd_en_port = 0; lcd_data_port = lcd_dat;delay_1ms(1); lcd_en_port = 1; lcd_en_po

41、rt = 0; uchar key_table_1 = PASSWORD ;uchar key_table_2 = A OR B KEY ;uchar key_table_3 = NEW PASSWORD ;uchar key_pass_table = Password OK ;uchar key_error_table = Password Error ;uchar key_modify_table = PasswordModified;void main() uchar key_value_buff;uchar i,n=0, /*n用于記錄密碼位數(shù)*/ k=6,/*k用于記錄顯示數(shù)字的位置

42、*/ d=0, /*d用于記錄確認(rèn)按鍵的狀態(tài)*/ j=0,/*j用于密碼匹配,=4時(shí)密碼正確*/ s=1; /*s用于輸入錯(cuò)誤密碼時(shí)的按鍵輸入鎖定,使其不能輸入*/lcd_system_reset();for(i=0;i16;i+) lcd_char_write(i,0,key_table_1i); for(i=0;i16;i+) lcd_char_write(i,1,key_table_2i); /*顯示標(biāo)題*/while(1)key_value_buff = key_scan();if(key_value_buff != 0)switch(key_value_buff) /*顯示按鍵對應(yīng)的

43、絲印*/case 0 x18: if(n4&s=0) lcd_char_write(k,1,1); inputwordn=1; k+; n+;break;case 0 x28:if(n4&s=0) lcd_char_write(k,1,2); inputwordn=2; k+;n+;break;case 0 x48:if(n4&s=0) lcd_char_write(k,1,3); inputwordn=3; k+;n+;break;case 0 x44: if(n4&s=0) lcd_char_write(k,1,4); inputwordn=4; k+;n+;break;case 0 x2

44、4: if(n4&s=0) lcd_char_write(k,1,5); inputwordn=5; k+;n+;break;case 0 x14: if(n4&s=0) lcd_char_write(k,1,6); inputwordn=6; k+;n+;break;case 0 x12: if(n4&s=0) lcd_char_write(k,1,7); inputwordn=7; k+;n+;break;case 0 x22: if(n4&s=0) lcd_char_write(k,1,8); inputwordn=8; k+;n+;break;case 0 x42: if(n4&s=0) lcd_char_write(k,1,9); inputwordn=9; k+;n+;break;case 0 x21: if(n4&s=0) lcd_char_write(k,1,0); inputwordn=0; k+;n+; break;case 0 x11: if(n4&s=0) lcd_char_write(k,1,*); inputwordn=*; k+;n+;break;case 0 x81: /*返回按鍵對應(yīng)鍵盤上的D*/ for(i=0;i16;i+) lcd_char_write(i,0,key_table_1i); for(i=0;i6&n0) lc

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論