版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 摘 要</b></p><p> 圍繞電子密碼鎖系統(tǒng)的設(shè)計(jì)與開發(fā)工作進(jìn)行研究和實(shí)踐,詳細(xì)介紹了電子密碼鎖系統(tǒng)的整體結(jié)構(gòu)、硬件設(shè)計(jì)、軟件設(shè)計(jì),系統(tǒng)方案以及其的開發(fā)和具體實(shí)現(xiàn)。介紹一種基于在系統(tǒng)可編程技術(shù)和C51編譯器配有集成開發(fā)的新型電子密碼鎖的設(shè)計(jì)方法,闡述了其工作原理和軟硬件設(shè)計(jì)。在硬件上,用KEIL公司的C51大規(guī)模集成芯片對(duì)其外圍電路進(jìn)行集成,用1片8
2、051實(shí)現(xiàn)了幾十片分離元件才能實(shí)現(xiàn)的功能,幾乎將整個(gè)系統(tǒng)下載于同一芯片中,實(shí)現(xiàn)了所謂的片上系統(tǒng),從而大大簡(jiǎn)化了系統(tǒng)結(jié)構(gòu),增強(qiáng)了系統(tǒng)的可靠性和性價(jià)比。該密碼鎖特別適用于賓館、辦公大樓、公寓等場(chǎng)所。</p><p> 關(guān)鍵詞 密碼鎖;單片機(jī);硬件設(shè)計(jì);軟件設(shè)計(jì) </p><p><b> ABSTRACT</b></p><p> Arou
3、nd the electronic code lock system design and development of the study and practice, details the electroniccode lock system overall, hardware design, software design, system solutions as well as the development and imp
4、lementation. Introduction of a new technology based on in-system programming and C51 compiler equipped with an integrated development of new electronic locks design method, explains how it works and software and hardware
5、 design. In the hardware companies with KEIL C51 large-s</p><p> Key words combination lock; single-chip; hardware; software design</p><p><b> 目 錄</b></p><p> 1 系統(tǒng)
6、總體設(shè)計(jì)方案……………………………………………………………… 3 </p><p> 1.1 設(shè)計(jì)課題任務(wù)………………………………………………………………3</p><p> 1.2 功能要求說(shuō)明………………………………………………………………3</p><p> 1.3 總體方案介紹及工作原理…………………………………………………3</p>
7、<p> 2 硬件系統(tǒng)的設(shè)計(jì)………………………………………………………………… 4</p><p> 2.1 系統(tǒng)各功能模塊介紹………………………………………………………4</p><p> 2.2 系統(tǒng)電路圖…………………………………………………………………5</p><p> 2.3 系統(tǒng)元器件清單……………………………………………
8、………………5</p><p> 3 軟件系統(tǒng)的設(shè)計(jì)………………………………………………………………… 6</p><p> 3.1 設(shè)計(jì)使用單片機(jī)資源介紹…………………………………………………6</p><p> 3.2 軟件系統(tǒng)各功能模塊介紹…………………………………………………6</p><p> 3.3 軟件系統(tǒng)程序流
9、程框圖……………………………………………………6</p><p> 3.4 軟件系統(tǒng)的程序……………………………………………………………8</p><p> 4 系統(tǒng)的仿真分析及結(jié)論………………………………………………………… 9</p><p> 4.1 系統(tǒng)設(shè)計(jì)的使用說(shuō)明………………………………………………………9</p><p&
10、gt; 4.2 系統(tǒng)設(shè)計(jì)的仿真結(jié)果………………………………………………………9</p><p> 4.3 系統(tǒng)的誤差分析………………………………………………………… 10</p><p> 4.4 設(shè)計(jì)體會(huì)………………………………………………………………… 10</p><p> 4.5 教學(xué)建議……………………………………………………………………
11、10</p><p> 參考文獻(xiàn)………………………………………………………………………………11</p><p> 致 謝…………………………………………………………………………………12</p><p> 附錄(1)……………………………………………………………………………13</p><p> 附錄(2)………………………………
12、…………………………………………… 15</p><p> 1 系統(tǒng)總體設(shè)計(jì)方案</p><p> 1.1 設(shè)計(jì)課題任務(wù)</p><p> 設(shè)計(jì)一個(gè)具有特定功能的密碼鎖。該密碼鎖上電或按鍵復(fù)位后能自動(dòng)顯示系統(tǒng)提示符“P.”, 進(jìn)入準(zhǔn)備工作狀態(tài)。該密碼鎖設(shè)有系統(tǒng)原始密碼888888,用戶可以設(shè)定并存儲(chǔ)用戶密碼,密碼輸入時(shí)應(yīng)處于保密顯示狀態(tài),密碼輸入正確時(shí)應(yīng)顯
13、示密碼輸入正確提示信息,否則,顯示密碼輸入錯(cuò)誤提示信息。</p><p> 1.2 功能要求說(shuō)明</p><p> 密碼鎖主要實(shí)現(xiàn)的功能是:在輸入的密碼正確時(shí)蜂鳴器發(fā)出3S中的鳴叫,同時(shí)開鎖,但錯(cuò)誤時(shí),蜂鳴器發(fā)出警報(bào)音,也可通過(guò)修改密碼開鎖,一旦密碼遺忘可以將原始密碼清零后再設(shè)新的密碼。在進(jìn)入密碼鎖環(huán)節(jié)后,具有輸入原始密碼,修改密碼,當(dāng)用戶遺忘自己設(shè)定的密碼后,可以要求廠家給出廠密碼
14、,輸入出廠密碼后,系統(tǒng)原始密碼自動(dòng)清零,這時(shí)用戶需要輸入一個(gè)新的密碼作為以后使用的密碼。當(dāng)用戶三次輸入原始密碼錯(cuò)誤后系統(tǒng)將自動(dòng)鎖定,這時(shí)需要輸入出廠密碼進(jìn)行新密碼的設(shè)定方可成功。在輸入密碼模式下,若用戶在120秒的時(shí)間內(nèi)沒(méi)有完成輸入操作,則系統(tǒng)將自動(dòng)退出密碼的輸入模式。</p><p> 1.3 總體方案介紹及工作原理</p><p> 電子密碼鎖的總體功能原理是以AT89S52單片
15、機(jī)為主要的控制核心,通過(guò)外接4*4矩陣式鍵盤作為信號(hào)源,128*64液晶作為顯示器件,蜂鳴器作為提示音器件,單片機(jī)實(shí)時(shí)的去執(zhí)行相應(yīng)的功能。在液晶上顯示出來(lái),而此時(shí)通過(guò)蜂鳴器發(fā)出不同的提示音來(lái)告知用戶輸入的信息是否正確。CPU控制原理圖如圖1.1所示。</p><p> 2 硬件系統(tǒng)的設(shè)計(jì)</p><p> 2.1 系統(tǒng)各功能模塊介紹</p><p> 2.
16、1.1 AT89S52控制模塊</p><p> 考慮到設(shè)計(jì)功能需要,控制器的功能用于外部鍵盤信號(hào)的接收和識(shí)別、液晶顯示與密碼辨認(rèn)相關(guān)的信息,我們選擇了學(xué)習(xí)過(guò)的AT89S52系列單片機(jī),具有反應(yīng)速度極快,工作效率特高的特點(diǎn)。</p><p> AT89S52 主要性能 與MCS-51單片機(jī)產(chǎn)品兼容 、8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器,1000次擦寫周期,全靜
17、態(tài)操作:0Hz~33Hz 三級(jí)加密程序存儲(chǔ)器 32個(gè)可編程I/O口線 、三個(gè)16位定時(shí)器/計(jì)數(shù)器 八個(gè)中斷源 、全雙工UART串行通道、 低功耗空閑和掉電模式 、掉電后中斷可喚醒 、看門狗定時(shí)器 、雙數(shù)據(jù)指針 、掉電標(biāo)識(shí)符 。 AT89S52 是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程
18、Flash 存儲(chǔ)器。使用Atmel 公司高密度非 易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。另外,AT89S52 可降至0Hz 靜態(tài)邏 輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié), 單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。</p><p> 2.1.2 鍵盤
19、功能模塊</p><p> 根據(jù)系統(tǒng)的基本的要求,密碼的輸入和修改要求具有修改和設(shè)定等功能,所以采用4*4矩陣式鍵盤接在AT89S52單片機(jī)的接口非常的方便,同時(shí)相對(duì)于獨(dú)立式鍵盤大大節(jié)省了資源,在軟件的設(shè)計(jì)時(shí)帶來(lái)了極大的方便,使程序簡(jiǎn)介,可讀性強(qiáng)。</p><p> 在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*
20、4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見(jiàn),在需要的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤是合理的。矩陣式鍵盤的按鍵識(shí)別方法用行掃描法。</p><p> 2.1.3 液晶顯示模塊</p><p> 顯示模塊要具有顯示輸入密碼,修改密碼的信息準(zhǔn)確性,綜合以上的要求我選擇
21、128*64液晶作為顯示的器件,接線主要是數(shù)據(jù)口接AT89S52單片機(jī),控制線接在PORTF和PORTG兩個(gè)口的部分口線上. </p><p> 128*64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國(guó)標(biāo)一級(jí)、二級(jí)簡(jiǎn)體中文字庫(kù)的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為128*64,.利用該模塊靈活的接口方式和簡(jiǎn)單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面。其基本特征:</p>
22、<p> ?。?) 低電源電壓(VDD:+3.0--+5.5V)</p><p> ?。?) 顯示分辨率:128×64點(diǎn)</p><p> ?。?) 內(nèi)置漢字字庫(kù),提供8192個(gè)16×16點(diǎn)陣漢字(簡(jiǎn)繁體可選)</p><p> ?。?) 內(nèi)置 128個(gè)16×8點(diǎn)陣字符</p><p> (5) 2M
23、HZ時(shí)鐘頻率</p><p> 2.1.4 信息提示模塊</p><p> 電子密碼鎖的另外一個(gè)要求功能是在輸入密碼正確和錯(cuò)誤的時(shí)候發(fā)出報(bào)警,利用蜂鳴器來(lái)實(shí)現(xiàn)。具有電路結(jié)構(gòu)非常簡(jiǎn)單,控制極其方便等優(yōu)點(diǎn)。</p><p> 2.2 系統(tǒng)電路圖</p><p> 總原理圖.總布局圖.PCB圖見(jiàn)附錄(1) </p>
24、<p> 2.3 系統(tǒng)的元器件清單</p><p> 本系統(tǒng)中所用到的元件如表2.1所示。</p><p> 表2.1 系統(tǒng)元器件表</p><p> 3 軟件系統(tǒng)的設(shè)計(jì)</p><p><b> 使用單片機(jī)資源介紹</b></p><p> AT89S52的P0,P1
25、,P3口可作為輸入輸出口,且P1,P3口有以下第二功能: </p><p> P3口引腳信號(hào)第二功能 P1口引腳信號(hào)第二功能P3.0 RXD(串行輸入) P1.0 T2(定時(shí)器/計(jì)數(shù)器T2外計(jì)數(shù)輸入時(shí)鐘輸出)P3.1 TXD(串行輸出) P1.1 T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載控制)P3.2 INT0(外部中斷0) P1.5 MOSI(在系統(tǒng)編程用
26、)P3.3 INT0(外部中斷0) P1.6 MISO(在系統(tǒng)編程用)P3.4 T0(定時(shí)器0外部輸入) P1.7 SCK(在系統(tǒng)編程用)P3.5 T1(定時(shí)器1外部輸入)P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器寫選通)RST: 復(fù)位輸入。</p><p> 3.2 軟件系統(tǒng)各功能模塊介紹</p><p> 3.3.1 矩陣式鍵盤
27、模塊</p><p> 矩陣式鍵盤軟件設(shè)計(jì)通過(guò)在主程序中調(diào)用子程序Uchar keyscan(void)的返回值去執(zhí)行鍵功能子程序Void key(void),單片機(jī)P0口發(fā)出OXF0,之后延時(shí)12ms,讀取C口線的數(shù)據(jù),達(dá)到通過(guò)鍵功能程序的分支執(zhí)行相應(yīng)的程序段,完成對(duì)應(yīng)的操作。</p><p> 3.2.2 液晶顯示模塊</p><p> 液晶顯示的程序中
28、,將液晶的系統(tǒng)的設(shè)置,初始化的程序段寫成子程序,等待50ms,顯示開關(guān)控制初始化,之后只要調(diào)用 Void ini(void)和Void set(void),然后執(zhí)行display();子程序就可以在液晶上隨意顯示所需的內(nèi)容。</p><p> 3.2.3 信息提示模塊</p><p> 在軟件的設(shè)計(jì)中信息提示模塊是通過(guò)驅(qū)動(dòng)蜂鳴器產(chǎn)生不同的聲音來(lái)告訴密鎖的狀態(tài),通過(guò)調(diào)用 Void Fm
29、q1(void)和 Void Fmq2(void)兩個(gè)子程序執(zhí)行相應(yīng)的功能,分別表示輸入密碼正確和錯(cuò)誤。當(dāng)輸入正確時(shí)發(fā)出持續(xù)3S的鳴叫,錯(cuò)誤時(shí)發(fā)出警報(bào)聲。</p><p> 3.3 軟件系統(tǒng)程序流程框圖</p><p> 軟件系統(tǒng)的總體流程框圖如圖3.1,鍵掃和顯示程序流程框圖分別如圖3.2、圖3.3所示。</p><p> 3.4 軟件系統(tǒng)的程序<
30、/p><p> 軟件系統(tǒng)的程序如附錄(2)。</p><p> 4 系統(tǒng)的仿真分析及結(jié)論</p><p> 4.1 系統(tǒng)設(shè)計(jì)的使用說(shuō)明</p><p> 在通電以后主要在液晶上顯示歡迎光顧,用戶可以按轉(zhuǎn)換鍵進(jìn)入系統(tǒng)模式。其具體的操作布驟是:按轉(zhuǎn)換鍵進(jìn)入密碼鎖模式,按K鍵一次就次進(jìn)入了輸入密碼開鎖模式,再按T鍵判斷輸入密碼是否正確。按K
31、鍵兩次進(jìn)入輸入出廠密碼模式,接著按下E鍵判斷出廠密碼是否正確。當(dāng)用戶輸入出廠密碼正確后,可以按下X鍵進(jìn)行新的密碼的設(shè)置,輸入六位數(shù)的新密碼后,按下E鍵確認(rèn)新密碼設(shè)置成功。當(dāng)用戶已經(jīng)進(jìn)入了任何一種密碼輸入模式但是想返回主界面的時(shí)候,可以按下R鍵返回主界面。</p><p> 4.2 系統(tǒng)設(shè)計(jì)的仿真結(jié)果</p><p> 仿真主要爭(zhēng)對(duì)是對(duì)4*4矩陣式鍵盤和液晶,在按鍵盤不同的鍵值的時(shí),顯
32、示正確的輸入信息,在按下了鍵1和鍵A,仿真的結(jié)果如圖4.1和4.2所示。</p><p> 圖4.1 按鍵1的仿真結(jié)果</p><p> 圖4.2 按鍵A的仿真結(jié)果</p><p> 4.3 系統(tǒng)的誤差分析</p><p> 系統(tǒng)準(zhǔn)備工作結(jié)束后,在硬件調(diào)試中有時(shí)候按下鍵但卻沒(méi)反應(yīng)者是最主要的誤差,也許這是老話的現(xiàn)象以及硬件的焊接有些
33、地方存在虛焊的原因,但是范圍很小,還有在最初幾次密碼存放有一定的問(wèn)題,但最后發(fā)現(xiàn)應(yīng)安排在數(shù)據(jù)和程序存儲(chǔ)器里的。</p><p><b> 4.4 設(shè)計(jì)體會(huì)</b></p><p> 電子技術(shù)的快速發(fā)展,使一些新型電子器件和集成芯片應(yīng)用越來(lái)越廣泛,電子系統(tǒng)的功能越來(lái)越強(qiáng)大,印刷電路板越來(lái)越復(fù)雜和精密。單片機(jī)的應(yīng)用使得我們對(duì)各種電路變得模塊化,集成化,電子設(shè)計(jì)自動(dòng)化
34、(Electronics Design Automates,即EDA)工具的集成設(shè)計(jì)環(huán)境,電子設(shè)計(jì)軟件Protel 軟件等的運(yùn)用使得電子設(shè)計(jì)電路更加方便,而我做為電子信息工程專業(yè)的學(xué)生,應(yīng)該熟練掌握各種電路編輯軟件,在這次的設(shè)計(jì)中我深刻的體會(huì)到電子產(chǎn)品的快樂(lè),當(dāng)我們看到顯示屏上一條條信息出現(xiàn)時(shí),好開心,這意味著我們的設(shè)計(jì)成功了,幾十天的努力方案設(shè)計(jì),和實(shí)踐工作我們從中熟練各種電子的技術(shù)和強(qiáng)大,并不斷地總結(jié)經(jīng)驗(yàn)。這次課設(shè)對(duì)我們來(lái)說(shuō)非常重要
35、,也是我們最滿意的一次,好的開頭是成功的第一步,只有經(jīng)歷過(guò),才會(huì)懂得過(guò)程的重要性。</p><p><b> 教學(xué)建議</b></p><p> 號(hào)召同學(xué)們購(gòu)買實(shí)驗(yàn)板,強(qiáng)化單片機(jī)實(shí)訓(xùn),隨著單片機(jī)學(xué)習(xí)的深入,漸漸的就涌入出一批對(duì)單片機(jī)興趣很強(qiáng)的學(xué)生,單純的仿真和一周才二次的試驗(yàn)課已不能滿足學(xué)生對(duì)單片機(jī)強(qiáng)烈的興趣,因此花點(diǎn)錢買試驗(yàn)版式個(gè)明智的選擇!</p>
36、<p> 我還知道老師在實(shí)驗(yàn)課上很是注重學(xué)生的動(dòng)手操作能力,要求很嚴(yán)格,但由于學(xué)校給我們的實(shí)驗(yàn)課時(shí)還不夠。老師應(yīng)該給我們學(xué)生多一些布置課外的實(shí)物制作課題,讓學(xué)生從操作的過(guò)程中學(xué)到一些經(jīng)驗(yàn)。這樣,我們就會(huì)涉取很多課本以外的知識(shí),這就是理論應(yīng)該去實(shí)際化。</p><p> 朋友是人生不可缺少的,如果說(shuō)王教授是我們的教授還不如說(shuō)他是我們?nèi)松囊晃慌笥眩?lt;/p><p><
37、b> 參考文獻(xiàn)</b></p><p> [1]馬忠梅 單片機(jī)C程序設(shè)計(jì)[M],北京:北京航空航天大學(xué)出版社,2007 </p><p> [2]李廣弟 單片機(jī)基礎(chǔ)[M],北京:北京航空航天大學(xué)出版社,2007 </p><p> [3]張洪潤(rùn),蘭清華,單片機(jī)應(yīng)用技術(shù)教程[M],北京:清華大學(xué)出版社,1997</p><
38、p> [4]閔銳,徐勇,孫崢等.電子線路基礎(chǔ)西安[M],西安電子科技大學(xué)出版社,2003</p><p><b> 致 謝</b></p><p> 首先我很感謝同組成員的齊心協(xié)力,感謝其他小組的熱情點(diǎn)撥;再次我要感謝那些在電子制作過(guò)程中有很多實(shí)際操作的同學(xué)的大力支持;最后也是最重要的就是感謝我們的王老師,沒(méi)有他在前面做領(lǐng)導(dǎo)工作和仔細(xì)給我們做檢驗(yàn)工作,我
39、們的實(shí)際作品也不會(huì)順利完成。沒(méi)有你們的幫助99%我們的作品中會(huì)有55%的瑕疵。在我的實(shí)際作品的制作過(guò)程之中,得到的學(xué)校許多的同學(xué)的熱情的指導(dǎo)和詳細(xì)的說(shuō)明,同時(shí),在實(shí)際程序的編寫的過(guò)程之中得到了別人的認(rèn)可,在遇到許多的不解困難的時(shí)候,自己班里的電子制作的愛(ài)好者也給我提供的最詳細(xì)的解答,沒(méi)有以上的每一個(gè)人的幫助,我的單片機(jī)課程設(shè)計(jì)要完成是有巨大的困難的,在此,我對(duì)于在我的設(shè)計(jì)和制作的過(guò)程中給予我?guī)椭拿恳粋€(gè)好心人表示最衷心的感謝。</
40、p><p><b> 附 錄(2)</b></p><p> #include<reg52.h></p><p> #include<xianshi.h></p><p> bit bb; //密碼比較返回值</p&
41、gt;<p> bit bz0; //判斷確認(rèn)鍵是否按下標(biāo)志位 </p><p> bit bz1; //密碼比較是否正確標(biāo)志位</p><p> bit cc;
42、 //是否進(jìn)行密碼修改標(biāo)志位 </p><p> bit dd; //是否模擬插卡</p><p> bit hh; //密碼確定修改標(biāo)志位</p><p> bit bb1;
43、 //萬(wàn)能密碼比較返回值</p><p> bit u; //萬(wàn)能密碼輸入標(biāo)志位</p><p> bit jp; //萬(wàn)能密碼輸正確標(biāo)志位</p><p> bit jp1;
44、 //判斷確認(rèn)鍵是否按下標(biāo)志位 </p><p> sbit gg=P3^7;</p><p> uchar j; </p><p> uchar js,kk,tt; </p><p> uchar ymm[]={8,8,8,8,8,8}; //
45、原始密碼</p><p> uchar xmm[]={0,0,0,0,0,0}; //新密碼</p><p> uchar code wnmm[]={8,8,0,6,1,2}; //萬(wàn)能密碼</p><p><b> uchar gy;</b></p><p>
46、void delay(uint m)</p><p><b> {</b></p><p> while(m--)</p><p> for(gy=1000;gy--;gy>0);</p><p><b> }</b></p><p> /****** 密碼比
47、較子程序********/</p><p> uchar bjmm(void) </p><p> { uchar j;</p><p> for(j=0;j<6;j++)</p><p><b> {</b></p><p> if(xmm[j]==ymm[j]) </
48、p><p><b> bb=1;</b></p><p><b> else </b></p><p><b> bb=0;</b></p><p><b> }</b></p><p> return (bb);</p
49、><p><b> }</b></p><p> /**********顯示子程序*********/</p><p> void display1(void)</p><p><b> {</b></p><p> display(3,2,"請(qǐng)您輸入密碼&q
50、uot;);</p><p> display(4,1,"剩余時(shí)間: 120 秒");</p><p><b> }</b></p><p> /*********蜂鳴器子程序**********/</p><p> void fmq0(void)</p><p>&l
51、t;b> {</b></p><p> gg=0; //蜂鳴器鳴叫 </p><p> delay(2000);</p><p><b> gg=1;</b></p><p><b> }</b&g
52、t;</p><p> void fmq1(void)</p><p><b> { </b></p><p> gg=0; //蜂鳴器鳴叫 </p><p> delay(500);</p><p>&l
53、t;b> gg=1;</b></p><p> delay(200);</p><p><b> gg=0; </b></p><p> delay(500);</p><p><b> gg=1;</b></p><p><b>
54、}</b></p><p> /********密碼修改子程序********/</p><p> uchar bjmm1(void) </p><p> { uchar e11;</p><p> for(e11=0;e11<6;e11++)</p><p><b> {<
55、/b></p><p> if(xmm[e11]==wnmm[e11]) </p><p><b> bb1=1;</b></p><p><b> else </b></p><p><b> bb1=0; </b></p><p>
56、<b> }</b></p><p> return (bb1);</p><p><b> } </b></p><p> /********在液晶上顯示輸入密碼********/</p><p> void display2(void)</p><p><
57、;b> {</b></p><p><b> if(kk==7)</b></p><p><b> kk=1;</b></p><p> switch(kk) //根據(jù)kk的數(shù)值顯示</p><p>
58、 { </p><p> case 1:display(3,2,"* "); break; //顯示1個(gè)"*"</p><p> case 2:display(3,3,"* "); break;
59、 //顯示2個(gè)"*"</p><p> case 3:display(3,4,"* "); break; //顯示3個(gè)"*"</p><p> case 4:display(3,5,"* "); break;
60、 //顯示4個(gè)"*"</p><p> case 5:display(3,6,"* "); break; //顯示5個(gè)"*"</p><p> case 6:display(3,7,"* "); break; /
61、/顯示6個(gè)"*"</p><p><b> }</b></p><p><b> }</b></p><p> uchar keyscan(void)</p><p><b> {</b></p><p> uchar sc
62、an,tmp;</p><p> P1=0xf0; //發(fā)全行0掃描碼</p><p> if((P1&0xf0)!=0xf0) //若有鍵按下</p><p> {delay(50);
63、 //延時(shí)去抖</p><p> if((P1&0xf0)!=0xf0) //延時(shí)再判鍵是否還按下</p><p> {scan=0xfe;</p><p> while((scan&0x10)!=0)
64、 //逐行掃描</p><p><b> {</b></p><p> P1=scan; //輸出行掃描碼</p><p> if((P1&0xf0)!=0xf0) //本行有鍵按下</p
65、><p> {tmp=(P1&0xf0)|0x0f;</p><p> return ((~scan)|(~tmp));} //還回鍵值</p><p> else scan=(scan<<1)|0x01; //行掃描碼左移一位</p>&
66、lt;p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> return (0); //無(wú)鍵按下,還回0</p><p><
67、b> } </b></p><p> /********鍵功能處理子程序***********/</p><p> void keyc(void)</p><p><b> { </b></p><p><b> uchar w;</b></p><
68、p> w=keyscan(); //調(diào)鍵掃,取得鍵值</p><p> display2();</p><p><b> switch(w)</b></p><p> { </p><p> case 0x11: if(
69、cc==1)</p><p><b> {</b></p><p> ymm[js]=1;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b&g
70、t;</p><p> if(js<6&&dd==1) //1鍵按下,輸入密碼1</p><p><b> {</b></p><p> xmm[js]=1;</p><p><b> js++;</b></p><
71、;p><b> kk++; </b></p><p><b> } </b></p><p> if(js<6&&u==1)</p><p><b> {</b></p><p> xmm[js]=1;</p><p&
72、gt;<b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p><b> break; </b></p><p> case 0x12: if(cc==1)<
73、/p><p><b> {</b></p><p> ymm[js]=2;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p&g
74、t;<p> if(js<6&&dd==1) //2鍵按下,輸入密碼2</p><p><b> {</b></p><p> xmm[js]=2;</p><p><b> js++;</b></p><p><
75、;b> kk++;</b></p><p><b> } </b></p><p> if(js<6&&u==1)</p><p><b> {</b></p><p> xmm[js]=2;</p><p><b&g
76、t; js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p><b> break; </b></p><p> case 0x14: if(cc==1)</p><
77、;p><b> {</b></p><p> ymm[js]=3;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p>
78、; if(js<6&&dd==1) //3鍵按下,輸入密碼3</p><p><b> {</b></p><p> xmm[js]=3;</p><p><b> js++;</b></p><p><b> kk++;
79、 </b></p><p><b> } </b></p><p> if(js<6&&u==1)</p><p><b> {</b></p><p> xmm[js]=3;</p><p><b> js++;&l
80、t;/b></p><p><b> kk++; </b></p><p><b> } </b></p><p><b> break; </b></p><p> case 0x18: if(cc==1)</p><p><b
81、> {</b></p><p> ymm[js]=4;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p> if(js&
82、lt;6&&dd==1) //4鍵按下,輸入密碼4 </p><p><b> {</b></p><p> xmm[js]=4;</p><p><b> js++;</b></p><p><b> kk++; </
83、b></p><p><b> } </b></p><p> if(js<6&&u==1)</p><p><b> {</b></p><p> xmm[js]=4;</p><p><b> js++;</b>
84、;</p><p><b> kk++; </b></p><p><b> } </b></p><p><b> break; </b></p><p> case 0x21: if(cc==1)</p><p><b>
85、{</b></p><p> ymm[js]=5;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p> if(js<6&am
86、p;&dd==1)</p><p><b> {</b></p><p> xmm[js]=5;</p><p><b> js++;</b></p><p><b> kk++;</b></p><p> }
87、 //5鍵按下,輸入密碼5</p><p> if(js<6&&u==1)</p><p><b> {</b></p><p> xmm[js]=5;</p><p><b> js++;</b></p><
88、p><b> kk++; </b></p><p><b> } </b></p><p><b> break; </b></p><p> case 0x22: if(cc==1)</p><p><b> {</b></p
89、><p> ymm[js]=6;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p> if(js<6&&dd==1)
90、 //6鍵按下,輸入密碼6</p><p><b> {</b></p><p> xmm[js]=6;</p><p><b> js++; </b></p><p><b> kk++;</b></p><p>
91、<b> } </b></p><p> if(js<6&&u==1)</p><p><b> {</b></p><p> xmm[js]=6;</p><p><b> js++;</b></p><p><
92、;b> kk++; </b></p><p><b> } </b></p><p><b> break; </b></p><p> case 0x24: if(cc==1)</p><p><b> {</b></p>&l
93、t;p> ymm[js]=7;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p> if(js<6&&dd==1)</p>
94、<p><b> {</b></p><p> xmm[js]=7;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p> } //
95、7鍵按下,輸入密碼7</p><p> if(js<6&&u==1)</p><p><b> {</b></p><p> xmm[js]=7;</p><p><b> js++;</b></p><p><b> kk++; &
96、lt;/b></p><p><b> } </b></p><p><b> break; </b></p><p> case 0x28: if(cc==1)</p><p><b> {</b></p><p> ymm[js
97、]=8;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p> if(js<6&&dd==1) //8鍵按下,輸入密碼8
98、 </p><p><b> {</b></p><p> xmm[js]=8;</p><p><b> js++; </b></p><p><b> kk++; </b></p><p><b> } </b&g
99、t;</p><p> if(js<6&&u==1)</p><p><b> {</b></p><p> xmm[js]=8;</p><p><b> js++;</b></p><p><b> kk++; </b>
100、;</p><p><b> } </b></p><p><b> break; </b></p><p> case 0x41: if(cc==1)</p><p><b> {</b></p><p> ymm[js]=9;<
101、/p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p> if(js<6&&dd==1) //9鍵按下,輸入密碼9</p&
102、gt;<p><b> {</b></p><p> xmm[js]=9;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p>
103、<p> if(js<6&&u==1)</p><p><b> {</b></p><p> xmm[js]=9;</p><p><b> js++;</b></p><p><b> kk++; </b></p>
104、<p><b> } </b></p><p><b> break; </b></p><p> case 0x42: if(cc==1)</p><p><b> {</b></p><p> ymm[js]=1;</p><p&
105、gt;<b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p> if(js<6&&dd==1) //0鍵按下,輸入密碼9</p><p>
106、;<b> {</b></p><p> xmm[js]=9;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p><b> } </b></p><p>
107、 if(js<6&&u==1)</p><p><b> {</b></p><p> xmm[js]=0;</p><p><b> js++;</b></p><p><b> kk++; </b></p><p>&l
108、t;b> } </b></p><p><b> break; </b></p><p> case 0x44: bz0=1;</p><p> if(js==6) //確認(rèn)鍵按下</p><p> bz1=bjmm();</p>
109、<p><b> else </b></p><p><b> bz1=0; </b></p><p> delay(10); </p><p><b> break;</b></p><p> case 0x48: for(j
110、=0;j<6;j++)</p><p><b> {</b></p><p><b> xmm[j]=0;</b></p><p><b> }</b></p><p> clear_lcd(); </p><p> display1()
111、;</p><p><b> dd=1;</b></p><p><b> kk=0;</b></p><p> break; //密碼清零,返回輸入界面</p><p> case 0x81: for(j=0;j<6;j++)&
112、lt;/p><p><b> {</b></p><p><b> ymm[j]=0;</b></p><p><b> }</b></p><p><b> cc=1;</b></p><p> display(3,2,&q
113、uot;請(qǐng)輸入新密碼");</p><p><b> kk=0;</b></p><p><b> dd=0;</b></p><p> break; //是否需要修改密碼</p><p> case 0x82: dd=1;&
114、lt;/p><p> display(3,2,"請(qǐng)您輸入密碼"); //模擬插卡信號(hào)</p><p> delay(12);</p><p><b> kk=0;</b></p><p> break;
115、 </p><p> case 0x84: if(cc==1) </p><p><b> {</b></p><p> if(js==6) </p><p><b> {</b></p><p&g
116、t;<b> hh=1;</b></p><p><b> cc=0;</b></p><p><b> js=0;</b></p><p><b> }</b></p><p> }
117、 //修改密碼確認(rèn) </p><p><b> if(u==1)</b></p><p><b> {</b></p><p><b> if(js==6)</b></p><p><b> {</b></p><p>&l
118、t;b> jp1=1;</b></p><p> jp=bjmm1();</p><p><b> }</b></p><p><b> } </b></p><p> break; //萬(wàn)能密碼輸入確
119、認(rèn)</p><p> case 0x88: u=1;</p><p><b> cc=0;</b></p><p><b> dd=0;</b></p><p> display(3,2,"輸入原始密碼"); </p><p> break;
120、 //萬(wàn)能密碼輸入 break;</p><p><b> } </b></p><p><b> }</b></p><p> void main (void)</p><p><b> { </b>&
121、lt;/p><p><b> lcdset();</b></p><p> display(1,1," 單片機(jī)課程設(shè)計(jì)"); //封面顯示</p><p> display(2,1,"題目: 液晶密碼鎖"); </p><p> display(
122、3,1,"設(shè)計(jì)學(xué)生: 曹 璟"); </p><p> display(4,1,"指導(dǎo)老師: 王 韌");</p><p> delay(3000);</p><p> clear_lcd(); </p><p> display(1,1," 液晶密碼鎖"); &
123、lt;/p><p> display(2,2,"系統(tǒng)功能介紹"); </p><p> display(3,3,"正在連接"); </p><p> display(4,3,"請(qǐng)等待...."); </p><p> delay(3000);</p><p&g
124、t; clear_lcd();</p><p> display(1,1,"1.控制器模塊");</p><p> display(2,1,"采用AT89S52 系列"); </p><p> display(3,1,"2.外接鍵盤模塊"); </p><p> displ
125、ay(4,1,"采用4*4 矩陣鍵盤"); </p><p> delay(3000);</p><p> clear_lcd();</p><p> display(1,1,"3.顯示模塊");</p><p> display(2,1,"采用SY128*64液晶");&
126、lt;/p><p> display(3,1,"4.聲音提示模塊");</p><p> display(4,1,"采用常見(jiàn)的蜂鳴器");</p><p> delay(3000);</p><p> clear_lcd();</p><p> display(3,2,&q
127、uot;請(qǐng)您插入房卡");</p><p> delay(1000);</p><p><b> while(1)</b></p><p><b> { </b></p><p> keyc(); //按
128、鍵 </p><p> delay(50);</p><p> if(jp1==1)</p><p><b> {</b></p><p><b> if(jp==1)</b></p><p><b> {</b></p>&l
129、t;p><b> js=0;u=0;</b></p><p> jp=bjmm1();</p><p> for(j=0;j<6;j++)</p><p> xmm[j]=0; //密碼清0</p><p><b> if(
130、jp==1)</b></p><p><b> { </b></p><p> display(3,2,"密碼已經(jīng)清零"); </p><p> fmq0(); //蜂鳴器開啟</p><p> jp=0;kk
131、=0;</p><p><b> jp1=0;}</b></p><p><b> } </b></p><p><b> else</b></p><p><b> { </b></p><p> display(3,2
132、,"原始密碼錯(cuò)誤");</p><p> kk=0;jp1=0;}</p><p> fmq1(); //蜂鳴器開啟</p><p> } </p><p><b> if(hh==1)</b></
133、p><p><b> {</b></p><p> hh=0; kk=0;</p><p> display(3,2,"密碼修改成功");</p><p> fmq0(); //蜂鳴器開啟</p><p>&
134、lt;b> } </b></p><p> if(bz0==1) </p><p><b> {</b></p><p> js=0;bz0=0; //密碼計(jì)數(shù)器清0</p><p> bz1=bjmm();
135、</p><p> for(j=0;j<6;j++)</p><p> xmm[j]=0; //密碼清0</p><p> if(bz1==1)</p><p><b> {</b></p><p> display
136、(3,2,"輸入密碼正確"); </p><p> fmq0(); //蜂鳴器開啟</p><p><b> kk=0;</b></p><p> dd=0; //關(guān)插卡標(biāo)志位表
137、已經(jīng)取卡</p><p><b> }</b></p><p><b> else </b></p><p> {display(3,2,"輸入密碼錯(cuò)誤"); </p><p> fmq1(); //蜂鳴
138、器開啟</p><p><b> kk=0;}</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> #define uint unsi
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)報(bào)告--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖報(bào)告
- 單片機(jī)課程設(shè)計(jì)---電子密碼鎖報(bào)告
- 單片機(jī)課程設(shè)計(jì)--門禁電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)----電子密碼鎖報(bào)告
- 單片機(jī)-密碼鎖課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)--密碼鎖
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)---密碼鎖
- 密碼鎖單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 基于單片機(jī)的電子密碼鎖設(shè)計(jì) 單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的電子密碼鎖設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的電子密碼鎖設(shè)計(jì)
- 課程設(shè)計(jì)----單片機(jī)電子密碼鎖
- 單片機(jī)電子密碼鎖課程設(shè)計(jì)
- 課程設(shè)計(jì)--單片機(jī)電子密碼鎖
評(píng)論
0/150
提交評(píng)論