2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論