版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 1 緒論</b></p><p> 隨著科技和人們的生活水平的提高,如何實現(xiàn)家庭防盜這一問題也變的尤其的突出,傳統(tǒng)機械鎖由于構(gòu)造簡單,被撬事件屢見不鮮;電子鎖由于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶的青睞。電子鎖可以在日常生活和現(xiàn)代辦公中,住宅與辦公室的安全防范、單位的文件檔案、財務(wù)報表以及一些個人資料的保存等多種場合使用。若使用傳統(tǒng)的機械式
2、鑰匙開鎖,人們常需攜帶多把鑰匙, 使用極不方便, 且鑰匙丟失后安全性即大打折扣。隨著科學(xué)技術(shù)的不斷發(fā)展,人們對日常生活中的安全保險器件的要求越來越高。為滿足人們對鎖的使用要求,增加其安全性和方便性,用密碼代替鑰匙的密碼鎖應(yīng)運而生。密碼鎖具有安全性高、成本低、功耗低、易操作等優(yōu)點隨著人們對安全的重視和科技的發(fā)展,對日常生活中的安全保險器件的要求越來越高。為滿足人們對鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應(yīng)運而生。具有報警功能的
3、電子密碼鎖保密性高,使用靈活性好,安全系數(shù)高,密碼鎖設(shè)計方法合理,簡單易行,成本低,符合住宅、辦公室用鎖要求,具有推廣價值。電子密碼鎖采取電子電路控制,通過密碼輸入來控制電路或是芯片工作,從而控制機械開關(guān)的閉合,完成開鎖、閉鎖任務(wù)。</p><p> 本次設(shè)計使用AT89S52單片機構(gòu)成最小系統(tǒng),接以鍵盤,報警系統(tǒng),液晶顯示構(gòu)成人性化的方便易用的電子密碼鎖。</p><p> 2 設(shè)
4、計任務(wù)、功能要求說明及總體方案介紹</p><p> 2.1 設(shè)計目的與任務(wù)</p><p> 本設(shè)計采用AT89S52單片機為主控芯片,結(jié)合外圍電路矩陣鍵盤、液晶顯示器LCD 1602A等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼和進行各種功能的實現(xiàn)。由用戶通過連接單片機的矩陣鍵盤輸入密碼,后經(jīng)過單片機對用戶輸入的密碼與自己保存的密碼進行對比,從而判斷密碼是否正確,然后控制引腳的高低電
5、平傳到開鎖電路或者報警電路控制開鎖還是報警,組成的電子密碼鎖系統(tǒng)。</p><p> 2.2 設(shè)計內(nèi)容及要求</p><p> ?。?)課程設(shè)計中,鎖體用LED代替(如“綠燈亮”表示開鎖,“紅燈亮”表示閉鎖)。</p><p> (2)其密碼為方8位十進制代碼(代碼自設(shè)定)。</p><p> ?。?)開鎖指令為串行輸入碼,當(dāng)開鎖密碼與
6、存儲密碼一致時,鎖被打開。當(dāng)開鎖密碼與存儲密碼不一致時,電路則報警并實現(xiàn)自鎖。(報警動作為響1分鐘,停10秒)</p><p> ?。?)選擇電路方案,完成對確定方案電路的設(shè)計。計算電路元件參數(shù)與元件選擇、并畫出總體電路原理圖,闡述基本原理。安裝調(diào)試設(shè)計電路,查閱至少5篇參考文獻(xiàn)。按《湖南工學(xué)院課程設(shè)計工作規(guī)范》要求撰寫設(shè)計報告書。全文用A4紙打印,圖紙應(yīng)符合繪圖規(guī)范。</p><p>
7、 2.3 設(shè)計總體方案及工作原理說明</p><p> 采用以單片機AT89S52為核心的控制方案,總體框圖見圖1。</p><p> 單片機作為本裝置的核心器件,在系統(tǒng)中起到控制聲光報警、以及數(shù)碼動態(tài)顯示的作用。一般來說在選擇單片機時下面幾個方面考慮:性能、存儲器、運行速度、I/O口、定時/計數(shù)器、串行接口、模擬電路功能、工作電壓、功耗、封裝形式、抗干擾性、保密性,除了以上的一些還
8、有一些最基本的比如:中斷源的數(shù)量和優(yōu)先級、工作溫度范圍、有沒有低電壓檢測功能、單片機內(nèi)有無時鐘振蕩器、有無上電復(fù)位功能等。在開發(fā)過程中單片機還受到:開發(fā)工具、編程器、開發(fā)成本、開發(fā)人員的適應(yīng)性、技術(shù)支持和服務(wù)等等因素?;谝陨弦蛩乇驹O(shè)計選用單片機AT89S52作為本設(shè)計的核心元件,利用單片機靈活的編程設(shè)計和豐富的I/O端口,以及控制的準(zhǔn)確性,實現(xiàn)基本的密碼鎖功能。在單片機的外圍電路外接加以3×4矩陣鍵盤、LED、蜂鳴器等。矩陣
9、鍵盤分別為0、1、2、3、4、5、6、7、8、9、重新輸入、確認(rèn)輸入。系統(tǒng)開始顯示“INPUT PASSWORD:”,提示輸入密碼;當(dāng)密碼輸入完畢按下Enter鍵時,若輸入密碼與設(shè)定的密碼相同,即密碼正確,液晶屏顯示為“Mission Success!”提示鎖打開,同時LED綠燈亮;若密碼不正確,LED顯示電路顯示提示</p><p> 投在輸入過程中發(fā)現(xiàn)輸入錯誤的數(shù)字,可通過重新輸入AC鍵清除所有數(shù)字。<
10、;/p><p> 圖1 系統(tǒng)設(shè)計框圖</p><p> 如圖1所示,系統(tǒng)主要由電源(由三角電源口、六角開關(guān)、紅色LED燈、電阻組成),3×4鍵盤(鍵盤分別為0、1、2、3、4、5、6、7、8、9、重新輸入、確認(rèn)輸入),復(fù)位電路,LED燈(密碼輸入錯誤時亮紅燈,密碼輸入正確時亮綠燈),蜂鳴器(輸入密碼時,輸入一位響一次,密碼輸入錯誤時有報警功能),以及液晶顯示電路(顯示功能)組成
11、。</p><p><b> 3 系統(tǒng)硬件設(shè)計</b></p><p> 3.1 硬件系統(tǒng)各模塊功能簡要介紹</p><p> 3.1.1 復(fù)位以及振蕩電路</p><p> 如圖2所示,即為AT89S52復(fù)位和振蕩電路結(jié)構(gòu)。</p><p> 圖2 系統(tǒng)的復(fù)位電路</p&g
12、t;<p> 時鐘電路工作后,在REST管腳上加兩個機器周期的高電平,芯片內(nèi)部開始進行初始復(fù)位。本設(shè)計晶振選擇頻率為12MHZ,電容選擇33pF。經(jīng)計算得單片機工作胡機器周期為:</p><p> 12×(1÷12M)=1us。</p><p> 3.1.2 3×4矩陣鍵盤</p><p> 如圖3所示,本系統(tǒng)
13、采用3×4矩陣鍵盤,12個按鍵分為輸入數(shù)字鍵:0、1、2、3、4、5、6、7、8、9;功能鍵:確認(rèn)輸入Enter、重新輸入AC。鍵盤與單片機相連接,其連接方式為前三行分別P1.0—1.3連接;后四行分別與PP1.5—1.8連接分別控制;</p><p> 圖3 系統(tǒng)的鍵盤電路</p><p> 3.1.3 報警蜂鳴器</p><p> 報警部分由
14、陶瓷壓電發(fā)聲裝置及外圍電路組成,加電后不發(fā)聲,當(dāng)有鍵按下時,“叮”聲,每按一下,發(fā)聲一次,密碼正確時,不發(fā)聲直接開鎖,當(dāng)密碼輸入錯誤時,單片機的P35引腳為低電平,三極管T3導(dǎo)通轟鳴器發(fā)出噪鳴聲報警其電路如圖4所示:</p><p> 圖4 系統(tǒng)的報警電路</p><p> 3.1.4 液晶顯示電路</p><p> 為了使該電子鎖能人性化的顯示輸入密碼的狀
15、態(tài)以及密碼輸入正確與否,添加了液晶顯示放棄了數(shù)碼管顯示。本次設(shè)計使用的是LCD 1602A液晶顯示器,采用標(biāo)準(zhǔn)的16腳接口,其中:</p><p> 第1腳:VSS為地電源</p><p> 第2腳:VDD接5V正電源</p><p> 第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過
16、一個1K的電阻調(diào)整對比度</p><p> 第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。</p><p> 第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當(dāng)RS和RW共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時可以讀信號,當(dāng)RS為高電平RW為低電平時可以寫入數(shù)據(jù)。</p><p> 第
17、6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。</p><p> 第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。</p><p> 第15腳:背光電源正極</p><p> 第16腳:背光電源負(fù)極</p><p> LCD 1602A自帶英文字庫,各引腳分別接入P2.0口,其接入電路如圖5所示:</p>
18、<p> 圖5 系統(tǒng)的液晶顯示電路</p><p> 3.2 電路原理圖、PCB圖、元器件布局圖</p><p> 設(shè)計電路原理圖、PCB圖、元器件布局圖分別見附錄A、附錄B、附錄C。</p><p> 3.3 硬件實物圖</p><p><b> 實物圖見附錄D。</b></p>
19、<p> 3.4 元器件清單</p><p> 元器件清單見附錄E。</p><p> 4 軟件系統(tǒng)的設(shè)計</p><p> 4.1 軟件設(shè)計所用到的單片機資源情況</p><p> P0口作為顯示輸出,P2口作為鍵盤輸入,用到外部中斷0即P3.2腳,P1.2腳和P1.3腳分別與開鎖電路與報警電路相連,P1.5、
20、P1.6、P1.7分別于液晶顯示器的E、RW、RS腳相連。</p><p> 4.2 軟件系統(tǒng)的模塊功能</p><p> 如圖6所示為系統(tǒng)的主程序流程圖,圖7所示為開鎖流程圖。 </p><p> 圖6 主程序流程圖</p><p><b> 主程序清單:</b></p><p>
21、 void main() /*主程序 */</p><p><b> {</b></p><p> uint i; /*預(yù)置初始化 */</p><p> P30=1; /*開啟數(shù)
22、據(jù)/命令*/</p><p> P31=0; /*禁止讀寫 */</p><p> P35=0; /*關(guān)閉報警 */</p><p> P36=0; /*關(guān)閉開鎖 */</p>
23、<p> write_com(0X38); /*設(shè)置數(shù)據(jù)總線為8位,分2行顯示 */</p><p><b> del(5);</b></p><p> write_com(0X01); /*顯示器清零 ,光標(biāo)歸位*/</p><p><b> del(5);</b><
24、;/p><p> write_com(0X0f); /*打開顯示功能 */</p><p><b> del(5);</b></p><p> write_com(0X06); /*每寫入一個數(shù)據(jù)光標(biāo)右移 */</p><p><b> del(5);</b><
25、/p><p> write_com(0X80+0X00); /*寫入字符碼,使顯示器顯示相應(yīng)字符*/</p><p><b> del(5);</b></p><p> for(i=0;i<15;i++)</p><p><b> {</b></p><p>
26、 write_dat(table[i]); /*顯示器輸出內(nèi)容 */</p><p><b> del(10);</b></p><p><b> }</b></p><p> write_com(0Xc0); </p><p><b>
27、del(5);</b></p><p><b> while(1){</b></p><p> if(ky_press()) /*如果有鍵按下*/</p><p> {ky_scan(); /*鍵盤掃描 */</p><
28、p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p> uchar ky_press() /*檢查是否有按鍵按下*/</p><p> { P1=0
29、Xf0; /*按鍵口初始化 */</p><p> if((P1&0xf0)!=0xf0) /* 若有鍵按下 */</p><p> del(1); /* 延時去抖動 */</p><p> if((P1&0xf0)!=0Xf0)</p>&
30、lt;p> {return 1; } /* 有鍵按下 ,返回值為1*/</p><p><b> else</b></p><p> {return 0;} /* 無鍵按下 ,返回值為0*/</p><p><b> }</b></p>
31、<p> void ky_scan() /*確認(rèn)所按按鍵的具體位置*/</p><p> { uchar ky,i=0X7F,j;</p><p><b> del(10);</b></p><p> if(ky_press()); /* 如果有鍵按下
32、 */</p><p><b> {</b></p><p><b> do{</b></p><p> i=(i<<1)|(i>>7); /* 行列掃描 */</p><p> P1=i; /*
33、 輸出掃描碼 */</p><p><b> ky=P1;</b></p><p> j=ky&0XF0;</p><p> }while(j==0XF0); /*有鍵按下 */</p><p><b> N</b></p><p>&l
34、t;b> N</b></p><p><b> Y</b></p><p><b> 圖7 開鎖流程圖</b></p><p><b> 開鎖程序清單:</b></p><p> void jiaodui() </p><
35、p> { uchar i=0,j=0;</p><p> while(password[i]==new[i]) /*密碼比較*/</p><p> { i++; /*i自加1*/</p><p> if(i==8) break;</p><p&
36、gt;<b> }</b></p><p> if(i==8) /*如果密碼全部正確 */</p><p> { P36=1; /*開鎖 */</p><p> write_com(0X80+0X40); /*寫入字符碼,顯示器顯示相應(yīng)字符*
37、/</p><p> del(5); /*調(diào)用延時程序*/</p><p> for(i=0;i<17;i++)</p><p> {write_dat(table2[i]); /*顯示器顯示Mission Success! */ </p><p><b&
38、gt; del(20);</b></p><p><b> } </b></p><p><b> }</b></p><p> else if(i<8) /*密碼錯誤 */</p><p> { P35=1;
39、 /*報警 */</p><p> write_com(0X80+0X40); /*寫入字符碼,顯示器顯示相應(yīng)字符*/</p><p> del(5); </p><p> for(i=0;i<17;i++)</p><p><b> {</b></p><
40、p> write_dat(table3[i]); /*顯示密碼錯誤 */</p><p><b> del(20);</b></p><p><b> } </b></p><p><b> while(1);</b></p><p><b&g
41、t; } </b></p><p> else if(j!=3) </p><p><b> { k=0;</b></p><p> write_com(0X80+0X40); /*鎖定鍵盤 */</p><p><b> }</b></p><p&g
42、t;<b> }</b></p><p> 4.3 軟件系統(tǒng)程序清單</p><p> 軟件系統(tǒng)程序清單見附錄F。</p><p> 5 設(shè)計結(jié)論、仿真結(jié)果、誤差分析、教學(xué)建議</p><p> 5.1 設(shè)計結(jié)論及使用說明</p><p> 本程序從經(jīng)濟實用的角度出發(fā),采用美國
43、Atmel公司的單片機AT89S52作為主控芯片,結(jié)合外圍的鍵盤輸入、顯示、報警、開鎖等電路并用C語言編寫主控芯片的控制程序,研制了一款可以多用戶使用可多次更改密碼具有報警功能的電子密碼鎖。設(shè)計完全可行可以達(dá)到設(shè)計目的。使用單片機制作的電子密碼鎖具有軟硬件設(shè)計簡單,易于開發(fā),成本低,安全可靠,操作方便等特點,可用于住宅、辦公室的保險箱及檔案柜等需要防盜的場所,有一定的實用性。該電路設(shè)計還具有按鍵有效提示,輸入錯誤提示,控制開鎖電平,控制
44、報警電路,修改密碼,多用戶使用等功能??稍谝馔庑姑艿那闆r下隨時修改密碼。保密性強,靈活性高,特別適用于家庭、辦公室、學(xué)生宿舍及賓館等場所。</p><p> 使用說明:本密碼鎖初始密碼為88888888,當(dāng)要開鎖時,需輸入正確的密碼,按下確定鍵后就能實現(xiàn)開鎖,如果輸入不正確,密碼鎖就會報警。</p><p><b> 5.2 程序仿真</b></p>
45、<p> 程序仿真圖見附錄G。</p><p><b> 5.3 誤差分析</b></p><p> 當(dāng)硬件電路焊接完成后,發(fā)現(xiàn)蜂鳴器一直處于報警狀態(tài),而仿真時并未出現(xiàn)這種現(xiàn)象。用萬用表檢查電壓發(fā)現(xiàn)三極管一直處于導(dǎo)通狀態(tài),基極電壓有將近4V,可T1口電壓卻是不足0.1V,基極電壓大于導(dǎo)通電壓。主要原因是T1口引出的電阻不足以分壓使得基極電壓小于三
46、極管的開啟電壓,導(dǎo)致三極管一直處于導(dǎo)通狀態(tài)。</p><p> 解決辦法:將原來電阻取下,換成大電阻,這樣就能在電阻上分得很大的電壓使得基極電壓小于三極管的開啟電壓。</p><p><b> 5.4 設(shè)計體會</b></p><p> 通過本次課程設(shè)計實踐,我對C語言有了更深的理解,可以加強軟件系統(tǒng)各模塊之間的聯(lián)系,達(dá)到意想不到的效果
47、。同時也加深了對設(shè)計方法的理解,進一步理解了軟件設(shè)計中整體與局部的關(guān)系,本次實踐我就運用了從整體到局部的設(shè)計思想,達(dá)到了滿意的效果,它使我少走了很多彎路,既節(jié)約了時間,又很好的組織了軟件系統(tǒng)各部的聯(lián)系。</p><p><b> 5.5 教學(xué)建議</b></p><p> 對于單片機與C語言的學(xué)習(xí),我覺得應(yīng)該加強創(chuàng)造性思維的培養(yǎng),同時結(jié)合實驗加以實踐。我覺得思維
48、是知識的靈魂,只有加強了思維的訓(xùn)練與培養(yǎng),才能使知識的能量達(dá)到最大化。就像好的文章要有好的作家,要有他們那種創(chuàng)造精妙語言的思維,軟件系統(tǒng)設(shè)計也是一種對語言的運用實踐,精妙的思維也就必不可少。創(chuàng)造性思維是豐富的,因此應(yīng)加強老師與同學(xué)們、同學(xué)們之間的思維互動,加強探討,加強課程設(shè)計實踐。</p><p><b> 結(jié)束語</b></p><p> 課程設(shè)計是培養(yǎng)學(xué)生綜
49、合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機已經(jīng)成為當(dāng)今計算機應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握單片機的開發(fā)技術(shù)是十分重要的。</p><p> 回顧起此次單片機課程設(shè)計,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在整整一個月的日子里,可以
50、說得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自
51、己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,對單片機匯編語言掌握得不好,通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。</p><p> 這次課程設(shè)計終于順利完成了,在設(shè)計中遇到了很多編程問題,在同學(xué)的幫助下,終于游逆而解。非常感謝!</p><p><b> 致 謝</b></p><p> 在課程設(shè)計論文完
52、成之際,我要忠心的感謝身邊給予過我莫大幫助的老師、同學(xué)和朋友,致以他們最誠摯的謝意。 本次課程設(shè)計是在我的老師**的親切關(guān)懷和悉心指導(dǎo)下完成的。她嚴(yán)肅的科學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,精益求精的工作作風(fēng),深深地感染和激勵著我。從課題的選擇到項目的最終完成,*老師都始終給予我細(xì)心的指導(dǎo)和不懈的支持。*老師多次詢問研究進程,并為我指點迷津,幫助我開拓研究思路,精心點撥、熱忱鼓勵,這讓我在整個論文的撰寫過程中學(xué)習(xí)到了很多關(guān)于課題研究方面的知
53、識。</p><p> 本文參考了大量的文獻(xiàn)資料,在此,向各學(xué)術(shù)界的前輩們致敬。最后要感謝的是我的父母和家人,感謝他們多年來對我默默的支持和幫助。由衷的希望在未來的日子里,周圍的老師、同學(xué)和朋友們一如既往的在各方面繼續(xù)給予我更多的指教和幫助,以期取得新的進步和成績來回報大家。</p><p><b> 參考文獻(xiàn)</b></p><p>
54、[1] 李廣弟 ,朱月秀 ,冷祖祁.單片機基礎(chǔ)[M].第三版.北京:北京航空航天大學(xué)出版社,2007.0-260</p><p> Li guangdi ,Zhu yuexiu ,Leng zuqi.Microcontroller based[M].The Third Edition.Beijing:Beijing University of Aeronautics and Astronautics Press
55、,2007.0-260</p><p> [2] 李朝青.單片機原理及接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1998.26-40</p><p> Li Chaoqing.SCM Principle and Interface Technology[M].Beijing:</p><p> Beijing University of Aeronauti
56、cs and Astronautics Press,1998.26-40</p><p> [3] 何立明.單片機高級教程[M].北京:北京航空航天大學(xué)出版社,2000.37-51</p><p> He Liming.Advanced MicrocontrollerTutorial[M].Beijing:Beijing University of Aeronautics and As
57、tronautics Press,2000.37-51</p><p><b> 附錄B PCB圖</b></p><p> 附錄C 元器件布局圖</p><p> 附錄D 硬件實物圖</p><p> 圖D1 輸入密碼界面</p><p> 圖D2 密碼正確界面</p&
58、gt;<p> 圖D3 輸入密碼錯誤界面</p><p> 附錄E 元器件清單表</p><p> 附錄F 程序清單表</p><p> /*******************************************************************/</p><p><b>
59、項目名:密碼鎖</b></p><p><b> 設(shè)計者:羅萬里</b></p><p> 時間:2012年12月13日</p><p> /*******************************************************************/</p><p> 功能
60、要求:系統(tǒng)開始顯示“INPUT PASSWORD:”,提示輸入密碼,然后在單片機 外圍電路的3×4矩陣鍵盤輸入密碼,然后按確認(rèn)輸入Enter,若輸入密碼與設(shè)定的密碼相同,即密碼正確,液晶屏顯示為“Mission Success!”提示開鎖成功,同時LED綠燈亮;若在輸入過程中發(fā)現(xiàn)輸入錯誤的數(shù)字,可通過重新輸入AC鍵清除所有數(shù)字;若密碼不正確,LED顯示電路顯示提示“Forgot Password?”,LE
61、D紅燈亮,蜂鳴器發(fā)出警報聲同時鎖定鍵盤,不能進行任何操作,/*******************************************************************/</p><p> LCD 1602A顯示器的設(shè)定:LCD 1602A顯示器的D0---D7接單片機的P2.0---P2.7;</p><p> RS接單片機的P3.0;E接單片機的P3.1;
62、 RW,VSS和VEE接地;VDD接電源</p><p> /*******************************************************************/獨立式鍵盤設(shè)定:</p><p> 4×3矩陣鍵盤分別依次接在P1.0---P1.3和P1.5P1.7口線</p><p> /*************
63、******************************************************/鍵功能程序:</p><p> k0 (k0鍵鍵功能程序) 十進制數(shù)0</p><p> k1 (k1鍵鍵功能程序) 十進制數(shù)1</p><p> k2 (k2鍵鍵功能程序)十進制數(shù)2</p><p> k3 (k3鍵
64、鍵功能程序) 十進制數(shù)3</p><p> k4 (k4鍵鍵功能程序) 十進制數(shù)4</p><p> k5 (k5鍵鍵功能程序) 十進制數(shù)5</p><p> k6 (k6鍵鍵功能程序)十進制數(shù)6</p><p> k7 (k7鍵鍵功能程序) 十進制數(shù)7</p><p> k8 (k8鍵鍵功能程序)
65、 十進制數(shù)8</p><p> k9 (k9鍵鍵功能程序) 十進制數(shù)9</p><p> k10 (k10鍵鍵功能程序) 確認(rèn)鍵</p><p> k11 (k11鍵鍵功能程序) 復(fù)位鍵</p><p> /*************************************************************
66、******/</p><p> (1)開鎖程序:單片機P3.6接綠燈,當(dāng)置1時,綠燈亮,開鎖成功。P3.5接紅燈,當(dāng)置1時,紅燈亮,開鎖失敗,報警。</p><p> /*******************************************************************/</p><p> #include <reg5
67、1.h></p><p> #include <string.h></p><p> #define uchar unsigned char /*自定義字符型 */</p><p> #define uint unsigned int /*自定義整型 */</p&
68、gt;<p> uchar table[]="INPUT PASSWORD:"; /*提示輸入密碼 */</p><p> uchar table1[]="*"; /*輸入密碼用*顯示*/</p><p> uchar table2[]="Mission Succ
69、ess!"; /*顯示密碼輸入正確*/</p><p> uchar table3[]="Forgot Password?"; /*顯示密碼輸入錯誤*/</p><p> sbit P30=P3^0; /*定義P30為P3.0 */</p><p> sbit P
70、31=P3^1; /*定義P31為P3^1 */</p><p> sbit P35=P3^5; /*定義P35為P3^5 */</p><p> sbit P36=P3^6; /*定義P36為P3^6 */</p><p> uchar new[8];
71、 /*設(shè)密碼的位數(shù) */</p><p> uchar password[]={8,8,8,8,8,8,8,8}; /*設(shè)初始密碼 */</p><p> uchar j=0; /*定義變量并賦初值*/</p><p> uchar k=0; <
72、;/p><p> /*鍵盤簡介 (4*3)</p><p> 0 1 2</p><p> 3 4 5</p><p> 6 7 8</p><p> 9 重輸 確認(rèn)*/</p><p> /******(2)寫指令程序*
73、************************************************/</p><p> void write_com(uchar com) /*寫指令*/</p><p><b> { </b></p><p> P30=0;
74、 /*P30置低電平*/</p><p> P2=com; /*D0--D7=指令碼*/</p><p> del(1); /*調(diào)用延時1ms */</p><p> P31=1;
75、 /*P31置高電平*/</p><p> del(1); /*調(diào)用延時1ms */</p><p> P31=0; /*P31變?yōu)榈碗娖?/</p><p><b> }</b></p
76、><p> /******(3)寫數(shù)據(jù)程序*************************************************/</p><p> void write_dat(uchar dat) /*寫數(shù)據(jù)*/</p><p> { P30=1;
77、 /*P30置高電平*/</p><p> P2=dat; /*D0--D7=數(shù)據(jù)*/</p><p> P31=1; /*P31置高電平*/</p><p> del(1);
78、 /*調(diào)用延時1ms */</p><p> P31=0; /*P31變?yōu)橹酶唠娖?/</p><p><b> }</b></p><p> /******(4)鍵功能程序*************************************************/&
79、lt;/p><p> while(ky_press()) ; /*定義鍵碼 值*/</p><p> switch(ky)</p><p><b> {</b></p><p> case 0X7E: </p>
80、;<p> ky=0; break; /*定義第1行第1列鍵碼值為0*/</p><p> case 0XBE:</p><p> ky=1; break; /*定義第1行第2列鍵碼值為1*/</p><p> case 0XDE:</p>
81、<p> ky=2; break; /*定義第1行第3列鍵碼值為2*/</p><p> case 0X7D:</p><p> ky=3; break; /*定義第2行第1列鍵碼值為3*/</p><p> case 0XBD:</p>&
82、lt;p> ky=4; break; /*定義第2行第2列鍵碼值為4*/</p><p> case 0XDD:</p><p> ky=5; break; /*定義第2行第3列鍵碼值為5*/</p><p> case 0X7B:</p><
83、;p> ky=6; break; /*定義第3行第1列鍵碼值為6*/</p><p> case 0XBB:</p><p> ky=7; break; /*定義第3行第2列鍵碼值為7*/</p><p> case 0XDB:</p><p
84、> ky=8; break; /*定義第3行第3列鍵碼值為8*/</p><p> case 0X77:</p><p> ky=9; break; /*定義第4行第1列鍵碼值為9*/</p><p> case 0XB7:</p><p&g
85、t; ky=10; break; /*定義第4行第2列鍵碼值為10*/</p><p> case 0XD7:</p><p> ky=11; break; /*定義第4行第3列鍵碼值為11*/</p><p><b> }</b></p>
86、;<p><b> if(ky<10)</b></p><p> { new[k]=ky;k++; /*key<10為密碼輸入*/</p><p> write_dat(table1[0]); /*定義按鍵顯示符號**/</p><p><b> }&
87、lt;/b></p><p> else if(ky==11) jiaodui(); /*定義11為確定鍵*/</p><p> else if(ky==10) </p><p> {k=0; write_com(0X80+0X40);} /*定義10為復(fù)位鍵 */</p><p>
88、;<b> }</b></p><p><b> }</b></p><p> /******(5)密碼校對程序***********************************************/</p><p> void jiaodui() </p><p> {
89、uchar i=0,j=0;</p><p> while(password[i]==new[i]) /*密碼比較*/</p><p> { i++; /*i自加1*/</p><p> if(i==8) break;</p><p><b&g
90、t; }</b></p><p> if(i==8) /*如果密碼全部正確 */</p><p> { P36=1; /*開鎖 */</p><p> write_com(0X80+0X40); /*寫入字符碼,顯示器顯示相應(yīng)字符*/</p>
91、;<p> del(5); /*調(diào)用延時程序*/</p><p> for(i=0;i<17;i++)</p><p><b> {</b></p><p> write_dat(table2[i]); /*顯示器顯示Mission Succes
92、s! */ </p><p><b> del(20);</b></p><p><b> } </b></p><p><b> }</b></p><p> else if(i<8) /*密碼錯誤 */&l
93、t;/p><p> { P35=1; /*報警 */</p><p> write_com(0X80+0X40); /*寫入字符碼,顯示器顯示相應(yīng)字符*/</p><p> del(5); </p><p> for(i=0;i<17;i++)</p><p><
94、;b> {</b></p><p> write_dat(table3[i]); /*顯示密碼錯誤 */</p><p><b> del(20);</b></p><p><b> } </b></p><p><b> while(1);<
95、;/b></p><p><b> } </b></p><p> else if(j!=3) </p><p><b> { k=0;</b></p><p> write_com(0X80+0X40); /*鎖定鍵盤 */</p><p><b&
96、gt; }</b></p><p><b> }</b></p><p> /******(6)檢查按鍵程序************************************************/ </p><p> uchar ky_press() /*檢查是否有按
97、鍵按下*/</p><p><b> { </b></p><p> P1=0Xf0; /*按鍵口初始化 */</p><p> if((P1&0xf0)!=0xf0) /* 若有鍵按下 */</p><p> del(1);
98、 /* 延時去抖動 */</p><p> if((P1&0xf0)!=0Xf0)</p><p> {return 1; } /* 有鍵按下 ,返回值為1*/</p><p><b> else</b></p><p> {return 0;}
99、 /* 無鍵按下 ,返回值為0*/</p><p><b> }</b></p><p> /******(7)掃描按鍵程序**********************************************/</p><p> void ky_scan() /*確認(rèn)所按按鍵的具體
100、位置*/</p><p><b> { </b></p><p> uchar ky,i=0X7F,j;</p><p><b> del(10);</b></p><p> if(ky_press()); /* 如果有鍵按下 */</p>
101、<p><b> {</b></p><p><b> do{</b></p><p> i=(i<<1)|(i>>7); /* 行列掃描 */</p><p> P1=i; /* 輸出掃描碼 */</
102、p><p><b> ky=P1;</b></p><p> j=ky&0XF0;</p><p> }while(j==0XF0); /*有鍵按下 */</p><p> /******(8)延時程序*******************************************
103、*******/</p><p> void del(uint us) /*定時1ms*/</p><p><b> {</b></p><p><b> uint u,s;</b></p><p> for(u=0;u<us;u++)&l
104、t;/p><p> {for(s=0;s<1141;s++); /*s自加1141次為1ms*/</p><p><b> }</b></p><p> /******(9)主程序****************************************************/ </p&
105、gt;<p> void main() /*主程序 */</p><p><b> {</b></p><p> uint i; /*預(yù)置初始化 */</p><p> P30=1;
106、 /*開啟數(shù)據(jù)/命令*/</p><p> P31=0; /*禁止讀寫 */</p><p> P35=0; /*關(guān)閉報警 */</p><p> P36=0; /*關(guān)閉
107、開鎖 */</p><p> write_com(0X38); /*設(shè)置數(shù)據(jù)總線為8位,分2行顯示 */</p><p><b> del(5);</b></p><p> write_com(0X01); /*顯示器清零 ,光標(biāo)歸位*/</p><p><b> del(5
108、);</b></p><p> write_com(0X0f); /*打開顯示功能 */</p><p><b> del(5);</b></p><p> write_com(0X06); /*每寫入一個數(shù)據(jù)光標(biāo)右移 */</p><p><b> del(5)
109、;</b></p><p> write_com(0X80+0X00); /*寫入字符碼,使顯示器顯示相應(yīng)字符*/</p><p><b> del(5);</b></p><p> for(i=0;i<15;i++)</p><p><b> {</b></p&
110、gt;<p> write_dat(table[i]); /*顯示器輸出內(nèi)容 */</p><p><b> del(10);</b></p><p><b> }</b></p><p> write_com(0Xc0); </p><p
111、><b> del(5);</b></p><p><b> while(1){</b></p><p> if(ky_press()) /*如果有鍵按下*/</p><p><b> {</b></p><p>
112、ky_scan(); /*鍵盤掃描 */</p><p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p><b> 附錄G 仿真圖</b&g
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計電子密碼鎖
- 單片機課程設(shè)計--電子密碼鎖
- 單片機課程設(shè)計報告--電子密碼鎖
- 單片機課程設(shè)計--電子密碼鎖報告
- 單片機課程設(shè)計---電子密碼鎖報告
- 單片機-密碼鎖課程設(shè)計
- 單片機課程設(shè)計--門禁電子密碼鎖
- 單片機課程設(shè)計----電子密碼鎖報告
- 單片機課程設(shè)計---密碼鎖
- 密碼鎖單片機課程設(shè)計
- 單片機課程設(shè)計-密碼鎖
- 單片機課程設(shè)計-密碼鎖
- 單片機課程設(shè)計--密碼鎖
- 單片機課程設(shè)計-密碼鎖
- 基于單片機的電子密碼鎖設(shè)計 單片機課程設(shè)計
- 單片機課程設(shè)計---基于單片機的電子密碼鎖設(shè)計
- 課程設(shè)計----單片機電子密碼鎖
- 單片機電子密碼鎖課程設(shè)計
- 課程設(shè)計--單片機電子密碼鎖
- 單片機電子密碼鎖課程設(shè)計
評論
0/150
提交評論