版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課程設(shè)計(jì)報(bào)告 </p><p> 題目:實(shí)用密碼鎖設(shè)計(jì)</p><p> 班級(jí):10電子信息工程</p><p><b> 學(xué)號(hào): </b></p><p><b> 姓名:</b></p><p><b> 指導(dǎo)老師: &
2、lt;/b></p><p> 起始日期:2013.2.28~2012.3.15</p><p><b> 一、系統(tǒng)功能</b></p><p> 1、使用4X4矩陣鍵盤作為密碼的輸入方法,輸入6位數(shù)字密碼,密碼對(duì)則聲光顯示正確并驅(qū)動(dòng)繼電器導(dǎo)通吸合3秒,密碼錯(cuò)誤則給三次機(jī)會(huì),每次錯(cuò)誤都給出聲光提示,三次都錯(cuò)的,封鎖鍵盤1分鐘,防止密
3、碼惡意猜測(cè)。</p><p> 2、輸入密碼期間允許刪除輸錯(cuò)的密碼。輸入完6位密碼就自動(dòng)比對(duì)。</p><p> 3、允許用戶通過特殊的按鍵方式(輸入6位的超級(jí)密碼)進(jìn)入系統(tǒng)設(shè)置狀態(tài),修改密碼鎖的密碼和封鎖鍵盤時(shí)間,并能斷電保存。</p><p> 4、鍵盤被按下30秒內(nèi)沒有進(jìn)一步操作的,應(yīng)該退回初始等待輸入密碼狀態(tài)。</p><p>
4、<b> 二、硬件設(shè)計(jì)</b></p><p><b> 1、系統(tǒng)構(gòu)成框圖</b></p><p> 4x4鍵盤輸入密碼,LCD1602 顯示輸入的數(shù)值,在從AT24C02調(diào)出原始密碼,然后與4x4矩陣鍵盤輸入的數(shù)比較,相同而且在規(guī)定次數(shù)之內(nèi)則驅(qū)動(dòng)繼電器,不然蜂鳴器報(bào)警。密碼輸入正確后若再次輸入一系列的數(shù)字(超級(jí)密碼),與超級(jí)密碼相同,則可
5、以修改密碼或鎖鍵盤的時(shí)間,新密碼和鎖鍵盤的時(shí)間存入AT24C02中。</p><p> 若輸入密碼錯(cuò)誤超過3次,或輸入新密碼不相同3次,蜂鳴器報(bào)警。</p><p> 4x4鍵盤的按鍵分布</p><p><b> 硬件電路圖</b></p><p> 單片機(jī)的P0.0~P0.7接LCD液晶顯示屏</p&g
6、t;<p> P1.0~P1.7接4X4矩陣鍵盤的8個(gè)口</p><p> P2.0接蜂鳴器,P2.1接繼電器,P2.2接24C02-SDA ,P2.3接24C02-SCL</p><p> P2.6 接LCD-RS ,P2.7接LCD-EN,</p><p> 一個(gè)蜂鳴器功能是當(dāng)用戶輸入密碼錯(cuò)誤的次數(shù)超過了3次,鳴笛以示報(bào)警。</p&
7、gt;<p> AT24C02是ATMEL公司的2KB字節(jié)的電可擦除存儲(chǔ)芯片,采用兩線串行的總線和單片機(jī)通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10Ua(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8腳的DIP封裝。</p><p><b> 三、軟件設(shè)計(jì)</b></p><p><b> 主程序&l
8、t;/b></p><p><b> 初始化</b></p><p><b> 從24c02調(diào)密碼</b></p><p><b> 掃描鍵盤 </b></p><p> 狀態(tài)0 Y 待機(jī)狀態(tài)函數(shù) </p>&l
9、t;p> zt=0? </p><p> N </p><p> 狀態(tài)1 Y 密碼輸入處理函數(shù) </p><p><b> zt=1?</b></p><p><b> N</b></p><p&
10、gt; 狀態(tài)2 Y 密碼修改函數(shù) </p><p><b> zt=2?</b></p><p><b> N</b></p><p> 狀態(tài)3 Y 鎖鍵盤處理函數(shù) </p><p><b&
11、gt; zt=3?</b></p><p><b> N</b></p><p> 掃描鍵盤,看是否有鍵按下,沒有鍵按下,處于待機(jī)狀態(tài),通過判斷變量zt的數(shù)值來決定調(diào)用哪個(gè)函數(shù)。在待機(jī)狀態(tài)時(shí),如果有鍵按下,變量xiugai=0,則為狀態(tài)1;如果有鍵按下,變量tong=1,則為狀態(tài)2;</p><p><b> 密碼
12、輸入處理函數(shù)</b></p><p><b> 密碼比較</b></p><p><b> N</b></p><p> 密碼正確 N 錯(cuò)誤次數(shù)>3? Y 報(bào)警且鎖 </p><p><b> 鍵盤zt=3<
13、;/b></p><p> Y 比較與</p><p><b> 超級(jí)密碼</b></p><p> 開鎖函數(shù) 與超級(jí)密碼 N </p><p><b> 比較正確?</b></p><p><b> 修改
14、密碼或時(shí)</b></p><p><b> 時(shí) zt=2</b></p><p> 返回 </p><p> 輸入密碼且在輸入次數(shù)內(nèi)密碼正確則開鎖,如果密碼錯(cuò)誤超過3次,則鎖鍵盤1分鐘且報(bào)警zt=3</p><p> 如果輸入密碼正確后,再次輸入一系列
15、的數(shù)與超級(jí)密碼比較,相同則可以修改密碼或時(shí)間</p><p> 密碼修改函數(shù) (new=1) </p><p><b> 輸入兩次</b></p><p><b> 新密碼</b><
16、;/p><p><b> N</b></p><p><b> Y</b></p><p> 密碼相同? N 不同次數(shù)>3? 報(bào)警且鎖</p><p><b> 鍵盤zt=3 </b></p><p><b>
17、 存入24c02中</b></p><p><b> 返回</b></p><p> 輸入兩次新密碼,然后比較,看是否相同,相同則存入24c02中,如果不同,可以再次輸入要修改的新密碼;如果輸入兩次新密碼不相同的次數(shù)超過了3次則報(bào)警鎖鍵盤 zt=3</p><p> 時(shí)間修改函數(shù)(new=3) </p>&
18、lt;p><b> 輸入調(diào)整</b></p><p><b> 鎖鍵盤的</b></p><p><b> 時(shí)間</b></p><p><b> 存入24c02中</b></p><p><b> 返回</b><
19、;/p><p> 輸入鎖鍵盤的時(shí)間,然后按下確定鍵,存入24c02中。</p><p><b> 總結(jié)</b></p><p> 在課程設(shè)計(jì)的過程中,沒有很好的完成老師的基本要求,在修改新密碼中,在輸入第六位密碼時(shí),想刪掉時(shí),刪到了第一位的密碼去了,是因?yàn)閿?shù)組指針在第六位時(shí),指針指向第一位了,到現(xiàn)在為止,沒有想出方法解決。</p>
20、<p> 硬件知識(shí)得到了鞏固,許多模糊的知識(shí)也漸漸的清晰了。</p><p><b> 附錄</b></p><p><b> 源程序:</b></p><p> #include<reg52.h></p><p> #include <1602lcd.c&
21、gt; </p><p> #include<4x4key.c></p><p> #include<24C02.c></p><p> #include<show.c></p><p> sbit relay=P2^1;</p><p> sbit beepp=P2^0;
22、</p><p> unsigned char password[]={0,0,0,0,0,0}; //存入原始密碼</p><p> unsigned char super1[]={6,5,4,3,2,1}; //修改密碼的超級(jí)密碼</p><p> unsigned char super2[]={1,1,1,1,1,1};
23、 //修改時(shí)間的超級(jí)密碼</p><p> unsigned char passwordtest[]={0,0,0,0,0,0} ; // 存輸入時(shí)的數(shù)值</p><p> unsigned char newone[]={0,0,0,0,0,0} ; //存第一次輸入的新密碼</p><p> unsigned char new
24、two[]={0,0,0,0,0,0} ; //存第二次輸入的新密碼</p><p> unsigned int fen[]={0,0,0}; // 存鎖鍵盤的時(shí)間</p><p> unsigned char xiugai=0; //區(qū)分是zt=1,還是zt=2</p><p> unsign
25、ed char tong=0;</p><p> unsigned char chang=0; //區(qū)分輸入密碼是初始密碼 還是超級(jí)密碼</p><p> unsigned char new=0; //控制在修改密碼時(shí),是第一次輸入密碼,還是第二
26、 //次輸入密碼,還是修改鎖鍵盤的時(shí)間</p><p> unsigned char errotime=0; //密碼輸入錯(cuò)誤的次數(shù)</p><p> unsigned char erronew=0; //重新輸入新密碼,2次新密碼不相同的次數(shù)</p><p>
27、 unsigned int xms; //鎖鍵盤的時(shí)間的變量</p><p> unsigned char zt=0; </p><p> unsigned char q=0; //第一次輸入的新密碼時(shí)的指針變量</p><p> unsigned char p=0; //
28、第二次輸入的新密碼時(shí)的指針變量</p><p> unsigned char i=0;</p><p> unsigned char n=0;</p><p> unsigned int s=0; //定時(shí)所用的變量</p><p> //****************************************
29、************</p><p> void daiji(); //先聲明待機(jī)狀態(tài)函數(shù)</p><p> void mima_shuru();//先聲明密碼輸入處理函數(shù)</p><p> void mima_suop();//先聲明鎖鍵盤處理函數(shù)</p><p> void mima_xiugai();//先聲明密
30、碼修改函數(shù)</p><p> void clok_key(uint xms) ; //延時(shí)子函數(shù) xms=1時(shí)ms=10s </p><p> void set_passw(); //設(shè)置新密碼和鎖鍵盤的時(shí)間</p><p> void new_cmp(); //兩次新密碼比較</p><p> void psw
31、_cmp(); //輸入密碼比較</p><p> void sure_time(); //確定調(diào)整時(shí)間</p><p> void tiao_shi();// 設(shè)置調(diào)整時(shí)間</p><p> void sound_bao(); //報(bào)警聲</p><p> void erro_sound(); //密碼錯(cuò)誤,提
32、醒聲光</p><p> void open_relay(); //開繼電器</p><p> //************************************************************************************</p><p> //---------------------主函數(shù)---------
33、----------------------</p><p> void main(void)</p><p><b> { </b></p><p> unsigned char z=0;</p><p> unsigned char zz=0;</p><p><b> E
34、A=1;</b></p><p><b> ET0=1;</b></p><p> TMOD=0x01;</p><p><b> TH0=0x4c;</b></p><p><b> TL0=0x00;</b></p><p>&l
35、t;b> TR0=1;</b></p><p> //write_add_24c02(1,9);</p><p> //delay_lcd(100); </p><p> //write_add_24c02(2,9);</p><p> //delay_lcd(100); </p><p>
36、 //write_add_24c02(3,9);</p><p> //delay_lcd(100); </p><p> //write_add_24c02(4,9);</p><p> //delay_lcd(100); </p><p> //write_add_24c02(5,9);</p><p>
37、 //delay_lcd(100); </p><p> //write_add_24c02(6,9);</p><p> //delay_lcd(100);</p><p> //write_add_24c02(7,60); </p><p> // delay_lcd(100); </p><p> l
38、cd_int();</p><p> lcd_write_com(0x01);</p><p> lcd_locate(1,1);</p><p> lcd_string("welcom!!!");</p><p> lcd_locate(2,1);</p><p> lcd_string
39、("2013 3 15");</p><p> delay_lcd(10000);</p><p> for(z=0;z<6;z++) //調(diào)用24c02中的密碼 到password</p><p> {password[z]=read_add_24c02(z+1); delay_lcd(100);} </p>
40、<p> xms=read_add_24c02(2);</p><p><b> while(1)</b></p><p><b> {</b></p><p><b> key=88;</b></p><p> key_4x4_scan();</p&
41、gt;<p> if(key!=88) s=0;</p><p> if(zt==0) daiji(); //待機(jī)狀態(tài)函數(shù) </p><p> if(zt==1) mima_shuru();//密碼輸入處理函數(shù)</p><p> if(zt==2) mima_xiugai(); //密碼修改處理函數(shù)<
42、/p><p> if(zt==3) mima_suop();} //鎖屏處理函數(shù)</p><p><b> }</b></p><p> //****************************************************************</p><p> //---------
43、------------------待機(jī)狀態(tài)函數(shù)---------------------------------</p><p> void daiji()</p><p> {if(key==88) {zt=0;wait_zt();}</p><p> if(key!=88&&xiugai==0) zt=1;</p><
44、p> if(key!=88&&tong==1) zt=2;}</p><p> //--------------------------密碼輸入處理函數(shù)--------------------------------</p><p> void mima_shuru()</p><p> {if(key>=0&&k
45、ey<=9)</p><p> {if(i==0) disp_input();</p><p> if(i<6) { passwordtest[i]=key;disp_pw();i++; }</p><p> if(i==6) psw_cmp();} //等于6位 自動(dòng)比較</p><p>
46、 if(key==11) {i--;disp_delete();}}</p><p> //---------------------------密碼比對(duì)處理函數(shù)-------------------------------</p><p> void mima_xiugai()</p><p> {if(key>=0&&key<=
47、9) set_passw();</p><p> if(key==11) {q--;</p><p> if(new==1) disp_one();</p><p> if(new==2) disp_two(); }</p><p> if(key==10)</p><p> { if(n
48、ew==2) new_cmp(); //兩次新密碼比較</p><p> if(new==3) sure_time();// 確定調(diào)整時(shí)間</p><p><b> } } </b></p><p> //-=-------------------------鎖屏處理函數(shù)--------------------------
49、---------</p><p> void mima_suop()</p><p> { sound_bao();</p><p> errotime=0;xiugai=0;tong=0;</p><p><b> TR0=0;</b></p><p> di
50、sp_clok();</p><p> clok_key(xms);</p><p> disp_open();</p><p><b> TR0=1;</b></p><p><b> zt=0;}</b></p><p> //****************
51、***********************************************************</p><p> //-----------------輸入密碼比較------------------------------------</p><p> void psw_cmp()</p><p> {unsigned char j,
52、m;</p><p> bit true=1;</p><p> bit sure1=1;</p><p> bit sure2=1;</p><p> for(j=0;j<6;j++)</p><p> true=true&&(password[j]==passwordtest[j])
53、;</p><p> if(true==1) {errotime=0;chang=1;zt=0;i=0;disp_cmp();open_relay();}</p><p> if(true==0) {i=0;zt=0; errotime++;disp_erro();erro_sound();</p><p> if(errotime==3) zt=3;
54、 //錯(cuò)誤超過3次 </p><p> if(chang==1) {for(m=0;m<6;m++)</p><p> sure1=sure1&&(passwordtest[m]==super1[m]);//判斷超級(jí)密碼</p><p> for(m=0;m<6;m++)&l
55、t;/p><p> sure2=sure2&&(passwordtest[m]==super2[m]);//判斷超級(jí)密碼</p><p> if(sure1==1) {new=1;errotime=0;zt=2; xiugai=1;tong=1;chang=0;key=88;disp_super();}// 是超級(jí)密碼
56、 // zt=2</p><p> if(sure2==1) {new=3;errotime=0;zt=2; xiugai=1;tong=1;chang=0;key=88;disp_super();}// 是超級(jí)密碼
57、 //zt=2</p><p> if(sure1==0&&sure2==0) chang=0;}}</p><p><b> }</b></p><p> //---------------------------erro_sound()密碼輸入錯(cuò)誤時(shí)發(fā)出聲音提醒--
58、-------------</p><p> void erro_sound()</p><p> {unsigned char nn=0;</p><p> for(nn=0;nn<5;nn++)</p><p> {beepp=0;P0=0x00;delay_lcd(1000);beepp=1;P0=0xff;}</p
59、><p><b> }</b></p><p> //------------------------開和關(guān)繼電器-------------------------------------------</p><p> void open_relay()</p><p> { relay=0;delay_lcd(30
60、00);relay=1;</p><p><b> }</b></p><p> //-----------------設(shè)置新密碼和鎖鍵盤的時(shí)間-------------------------------</p><p> void set_passw()</p><p><b> {</b&g
61、t;</p><p> if(new==1) //第一次輸入密碼</p><p> {if(q==0) {lcd_write_com(0x01);lcd_locate(1,1);lcd_string("one:");delay_lcd(9000); }</p><p> if(key!=88){ </p><p
62、> if(q<6) {newone[q]=key;disp_psone();q++;}</p><p> if(q==6) {new=2;key=88;q=0;} } }</p><p> if(new==2) //第二次輸入密碼</p><p> { lcd_locate(2,1);lcd_string("two:")
63、;</p><p> if(key!=88){ </p><p> if(p<6) {newtwo[q]=key;disp_pstwo();q++;}</p><p> if(p==6) {key=88;q=0;}} }</p><p> if(new==3) //輸入調(diào)整時(shí)間</p><p> {
64、if(key!=88){zt=2;tiao_shi();}}}</p><p> //-----------------兩次新密碼比較-------------------------------</p><p> void new_cmp()</p><p> {unsigned char same=1,t=0,p=0;</p><p&g
65、t;<b> q=0;p=0;</b></p><p> for(t=0;t<6;t++)</p><p> same=same&&(newone[t]==newtwo[t] );</p><p> if(same==0) {new=1;zt=2;xiugai=1;tong=1;erronew++; //兩次密碼比
66、較錯(cuò)誤 次數(shù)加1</p><p> disp_cmperro();</p><p> if(erronew==3) {zt=3;xiugai=0;tong=0;</p><p> disp_changerro();}//新密碼輸入3次都不能相同,則返回
67、//zt=0</p><p><b> }</b></p><p> if(same==1) {new=0;zt=0;xiugai=0;tong=0;disp_cmpsame();</p><p> for(p=0;p<6;p++)//相同,則存入數(shù)組中和24c02中</p><p> { password
68、[p]=newone[p];</p><p> write_add_24c02(p+1,newone[p]);</p><p> delay_lcd(100);} } }</p><p> //-------------------調(diào)整-鎖鍵盤的時(shí)間----------------------------------------</p><
69、p> void tiao_shi()</p><p><b> { </b></p><p> if(i==0) {lcd_write_com(0x01);</p><p> lcd_locate(1,1);</p><p> lcd_string("tiao shi:");&l
70、t;/p><p> delay_lcd(7000); }</p><p> if(i<3) { fen[i]=key;i++;lcd_locate(2,i+1);lcd_1_char(key); delay_lcd(7000); }}</p><p> //----------------------確定調(diào)整時(shí)間----------------------
71、-----------------------------</p><p> void sure_time(){lcd_write_com(0x01);lcd_locate(1,1);</p><p> lcd_string("tiao shi ok");delay_lcd(7000); </p><p> if(i==3)
72、 xms=fen[0]*100+fen[1]*10+fen[2];</p><p> if(i==2) xms=fen[0]*10+fen[1];</p><p> if(i==1) xms=fen[0]; </p><p> write_add_24c02(7,xms);</p><p><b> zt=0;
73、</b></p><p><b> tong=0;</b></p><p><b> xiugai=0;</b></p><p><b> new=0;</b></p><p><b> i=0;}</b></p><
74、;p> //-----------------------報(bào)警聲函數(shù)------------------------------------------------</p><p> void sound_bao()</p><p> { unsigned char x=0;</p><p> for(x=0;x<30;x++)</p>
75、;<p> {beepp=0;delay_lcd(1000);beepp=1;</p><p> beepp=0;delay_lcd(1000);beepp=1;</p><p> beepp=0;delay_lcd(1000);beepp=1;}}</p><p> //----------------------鎖鍵盤的延時(shí)函數(shù)------
76、-----------------------------</p><p> void clok_key(uint xms) //延時(shí)子函數(shù) xms=1時(shí)ms=1s </p><p> { unsigned int i,j,ms;</p><p> ms=xms*1000;</p>
77、;<p> for(i=ms;i>0;i--) //i=xms即延時(shí)約xms毫秒</p><p> for(j=110;j>0;j--);</p><p><b> }</b></p><p> //*************************按鍵不按下,定時(shí)30
78、s***************************************</p><p> void time0() interrupt 1</p><p><b> { s++;</b></p><p> if(s==600) ISP_CONTR=0x20; //復(fù)位</p><p><b&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 密碼鎖課程設(shè)計(jì)
- 密碼鎖課程設(shè)計(jì)
- 課程設(shè)計(jì)--密碼鎖
- 密碼鎖課程設(shè)計(jì)
- 密碼鎖課程設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)--密碼鎖
- 電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 數(shù)字密碼鎖課程設(shè)計(jì)
- 課程設(shè)計(jì)--電子密碼鎖
- 課程設(shè)計(jì)--數(shù)字密碼鎖
- 課程設(shè)計(jì)---數(shù)字密碼鎖設(shè)計(jì)
- 電子密碼鎖設(shè)計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)----電子密碼鎖設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 密碼鎖課程設(shè)計(jì)7
- 密碼鎖課程設(shè)計(jì) (2)
- 數(shù)字密碼鎖課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論