課程設計---實用密碼鎖設計_第1頁
已閱讀1頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課程設計報告 </p><p>  題目:實用密碼鎖設計</p><p>  班級:10電子信息工程</p><p><b>  學號: </b></p><p><b>  姓名:</b></p><p><b>  指導老師: &

2、lt;/b></p><p>  起始日期:2013.2.28~2012.3.15</p><p><b>  一、系統(tǒng)功能</b></p><p>  1、使用4X4矩陣鍵盤作為密碼的輸入方法,輸入6位數(shù)字密碼,密碼對則聲光顯示正確并驅(qū)動繼電器導通吸合3秒,密碼錯誤則給三次機會,每次錯誤都給出聲光提示,三次都錯的,封鎖鍵盤1分鐘,防止密

3、碼惡意猜測。</p><p>  2、輸入密碼期間允許刪除輸錯的密碼。輸入完6位密碼就自動比對。</p><p>  3、允許用戶通過特殊的按鍵方式(輸入6位的超級密碼)進入系統(tǒng)設置狀態(tài),修改密碼鎖的密碼和封鎖鍵盤時間,并能斷電保存。</p><p>  4、鍵盤被按下30秒內(nèi)沒有進一步操作的,應該退回初始等待輸入密碼狀態(tài)。</p><p>

4、<b>  二、硬件設計</b></p><p><b>  1、系統(tǒng)構成框圖</b></p><p>  4x4鍵盤輸入密碼,LCD1602 顯示輸入的數(shù)值,在從AT24C02調(diào)出原始密碼,然后與4x4矩陣鍵盤輸入的數(shù)比較,相同而且在規(guī)定次數(shù)之內(nèi)則驅(qū)動繼電器,不然蜂鳴器報警。密碼輸入正確后若再次輸入一系列的數(shù)字(超級密碼),與超級密碼相同,則可

5、以修改密碼或鎖鍵盤的時間,新密碼和鎖鍵盤的時間存入AT24C02中。</p><p>  若輸入密碼錯誤超過3次,或輸入新密碼不相同3次,蜂鳴器報警。</p><p>  4x4鍵盤的按鍵分布</p><p><b>  硬件電路圖</b></p><p>  單片機的P0.0~P0.7接LCD液晶顯示屏</p&g

6、t;<p>  P1.0~P1.7接4X4矩陣鍵盤的8個口</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>  一個蜂鳴器功能是當用戶輸入密碼錯誤的次數(shù)超過了3次,鳴笛以示報警。</p&

7、gt;<p>  AT24C02是ATMEL公司的2KB字節(jié)的電可擦除存儲芯片,采用兩線串行的總線和單片機通訊,電壓最低可以到2.5V,額定電流為1mA,靜態(tài)電流10Ua(5.5V),芯片內(nèi)的資料可以在斷電的情況下保存40年以上,而且采用8腳的DIP封裝。</p><p><b>  三、軟件設計</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 待機狀態(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>  掃描鍵盤,看是否有鍵按下,沒有鍵按下,處于待機狀態(tài),通過判斷變量zt的數(shù)值來決定調(diào)用哪個函數(shù)。在待機狀態(tài)時,如果有鍵按下,變量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 錯誤次數(shù)>3? Y 報警且鎖 </p><p><b>  鍵盤zt=3<

13、;/b></p><p>  Y 比較與</p><p><b>  超級密碼</b></p><p>  開鎖函數(shù) 與超級密碼 N </p><p><b>  比較正確?</b></p><p><b>  修改

14、密碼或時</b></p><p><b>  時 zt=2</b></p><p>  返回 </p><p>  輸入密碼且在輸入次數(shù)內(nèi)密碼正確則開鎖,如果密碼錯誤超過3次,則鎖鍵盤1分鐘且報警zt=3</p><p>  如果輸入密碼正確后,再次輸入一系列

15、的數(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? 報警且鎖</p><p><b>  鍵盤zt=3 </b></p><p><b> 

17、 存入24c02中</b></p><p><b>  返回</b></p><p>  輸入兩次新密碼,然后比較,看是否相同,相同則存入24c02中,如果不同,可以再次輸入要修改的新密碼;如果輸入兩次新密碼不相同的次數(shù)超過了3次則報警鎖鍵盤 zt=3</p><p>  時間修改函數(shù)(new=3) </p>&

18、lt;p><b>  輸入調(diào)整</b></p><p><b>  鎖鍵盤的</b></p><p><b>  時間</b></p><p><b>  存入24c02中</b></p><p><b>  返回</b><

19、;/p><p>  輸入鎖鍵盤的時間,然后按下確定鍵,存入24c02中。</p><p><b>  總結</b></p><p>  在課程設計的過程中,沒有很好的完成老師的基本要求,在修改新密碼中,在輸入第六位密碼時,想刪掉時,刪到了第一位的密碼去了,是因為數(shù)組指針在第六位時,指針指向第一位了,到現(xiàn)在為止,沒有想出方法解決。</p>

20、<p>  硬件知識得到了鞏固,許多模糊的知識也漸漸的清晰了。</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}; //修改密碼的超級密碼</p><p>  unsigned char super2[]={1,1,1,1,1,1};

23、 //修改時間的超級密碼</p><p>  unsigned char passwordtest[]={0,0,0,0,0,0} ; // 存輸入時的數(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}; // 存鎖鍵盤的時間</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ū)分輸入密碼是初始密碼 還是超級密碼</p><p>  unsigned char new=0; //控制在修改密碼時,是第一次輸入密碼,還是第二

26、 //次輸入密碼,還是修改鎖鍵盤的時間</p><p>  unsigned char errotime=0; //密碼輸入錯誤的次數(shù)</p><p>  unsigned char erronew=0; //重新輸入新密碼,2次新密碼不相同的次數(shù)</p><p>

27、  unsigned int xms; //鎖鍵盤的時間的變量</p><p>  unsigned char zt=0; </p><p>  unsigned char q=0; //第一次輸入的新密碼時的指針變量</p><p>  unsigned char p=0; //

28、第二次輸入的新密碼時的指針變量</p><p>  unsigned char i=0;</p><p>  unsigned char n=0;</p><p>  unsigned int s=0; //定時所用的變量</p><p>  //****************************************

29、************</p><p>  void daiji(); //先聲明待機狀態(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ù) xms=1時ms=10s </p><p>  void set_passw(); //設置新密碼和鎖鍵盤的時間</p><p>  void new_cmp(); //兩次新密碼比較</p><p>  void psw

31、_cmp(); //輸入密碼比較</p><p>  void sure_time(); //確定調(diào)整時間</p><p>  void tiao_shi();// 設置調(diào)整時間</p><p>  void sound_bao(); //報警聲</p><p>  void erro_sound(); //密碼錯誤,提

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(); //待機狀態(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、------------------待機狀態(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位 自動比較</p><p> 

46、 if(key==11) {i--;disp_delete();}}</p><p>  //---------------------------密碼比對處理函數(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)整時間</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、 //錯誤超過3次 </p><p>  if(chang==1) {for(m=0;m<6;m++)</p><p>  sure1=sure1&&(passwordtest[m]==super1[m]);//判斷超級密碼</p><p>  for(m=0;m<6;m++)&l

55、t;/p><p>  sure2=sure2&&(passwordtest[m]==super2[m]);//判斷超級密碼</p><p>  if(sure1==1) {new=1;errotime=0;zt=2; xiugai=1;tong=1;chang=0;key=88;disp_super();}// 是超級密碼

56、 // zt=2</p><p>  if(sure2==1) {new=3;errotime=0;zt=2; xiugai=1;tong=1;chang=0;key=88;disp_super();}// 是超級密碼

57、 //zt=2</p><p>  if(sure1==0&&sure2==0) chang=0;}}</p><p><b>  }</b></p><p>  //---------------------------erro_sound()密碼輸入錯誤時發(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>  //------------------------開和關繼電器-------------------------------------------</p><p>  void open_relay()</p><p>  { relay=0;delay_lcd(30

60、00);relay=1;</p><p><b>  }</b></p><p>  //-----------------設置新密碼和鎖鍵盤的時間-------------------------------</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)整時間</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、較錯誤 次數(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)整-鎖鍵盤的時間----------------------------------------</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)整時間----------------------

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>  //-----------------------報警聲函數(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ù)------

76、-----------------------------</p><p>  void clok_key(uint xms) //延時子函數(shù) xms=1時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即延時約xms毫秒</p><p>  for(j=110;j>0;j--);</p><p><b>  }</b></p><p>  //*************************按鍵不按下,定時30

78、s***************************************</p><p>  void time0() interrupt 1</p><p><b>  { s++;</b></p><p>  if(s==600) ISP_CONTR=0x20; //復位</p><p><b&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論