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

下載本文檔

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

文檔簡介

1、<p><b>  單片機實現(xiàn)密碼鎖</b></p><p>  摘要:隨著科技的發(fā)展和社會生活水平的提高,人們對日常生活中安全保險器件的要求越來越高,電子安全密碼鎖是基于這一要求的保險器件。目前使用的密碼鎖種類繁多,如指紋密碼鎖、紅外密碼鎖、GPS密碼鎖等,各具特色。本文從經(jīng)濟實用的角度出發(fā),介紹了如何采用AT89C51單片機,設(shè)計一款具有報警功能的電子密碼鎖。該設(shè)計方法合理,簡

2、單易行,成本低,適用于家庭、賓館、辦公室等場所。</p><p>  關(guān)鍵字:單片機密碼鎖報警</p><p>  Abstract :With technological development and social improvement of living standards, people in daily life-safe devices have become incre

3、asingly demanding, electronic security locks is based on the requirements of the insurance device. Currently use a wide range of locks, such as fingerprint lock, password lock infrared, GPS lock and other distinguishing

4、features. This article from the economical point of view, describes how to use AT89C51 single-chip, designed with an electronic lock with alarm </p><p>  Keywords: MCU Password Lock Alarm</p><

5、;p><b>  概述</b></p><p>  本文介紹了采用AT89C51單片機設(shè)計一款電力密碼鎖,它具有按鍵提示、輸入錯誤提示、密碼顯示、密碼出錯報警、控制開鎖、密碼重置等功能,具體功能如下:</p><p>  密碼輸入:用戶通過鍵盤輸入正確密碼后,系統(tǒng)自動解鎖。使用確定按鍵結(jié)束密碼輸入,使用退格鍵可以返回前面某處重新輸入密碼,使用閉鎖鍵可以使密碼鎖重

6、新閉鎖。</p><p>  提示與報警:系統(tǒng)使用不同的聲音作為用戶不同操作的提。短叫一聲表示有按鍵輸入,長叫一聲表示密碼正確,長叫5S表示密碼錯誤,長叫3min表示連續(xù)三次輸入密碼錯誤。</p><p>  數(shù)碼管顯示:系統(tǒng)使用6位字符表示有關(guān)信息。第一個字符表示功能,P表示密碼鎖處于閉鎖狀態(tài),等待用戶輸入開鎖密碼;|-表示系統(tǒng)已開鎖;顯示A表示密碼多次錯誤而報警。</p>

7、<p>  電子鎖控制:當(dāng)用戶輸入正確密碼后,系統(tǒng)開鎖;否則系統(tǒng)閉鎖。當(dāng)系統(tǒng)處于開鎖狀態(tài)時,可以使用按鍵閉鎖。</p><p>  密碼重置:當(dāng)用戶在開鎖狀態(tài)下時,可以通過密碼重置鍵進入密碼重置模式,連續(xù)兩次輸入密碼正確之后,重置密碼成功,原密碼失效,新密碼生效。</p><p><b>  設(shè)計思路及流程</b></p><p>

8、  根據(jù)上述功能介紹,密碼鎖系統(tǒng)可以分為用戶密碼輸入、顯示和控制報警3大功能,因此可以鍵盤模塊、顯示模塊、報警模塊、電子鎖控制模塊和單片機模塊。系統(tǒng)模塊圖如圖1所示。</p><p>  各模塊設(shè)計思路如下:</p><p>  2.1、鍵盤設(shè)計。密碼鍵有10個(0~9),功能鍵有3個,一個共需要13個按鍵,因此系統(tǒng)采用4×4的行列矩陣鍵盤,可安裝16個按鍵,足夠滿足要求。<

9、;/p><p>  2.2、數(shù)碼管設(shè)計。系統(tǒng)只需6為數(shù)碼管顯示器,為了簡化設(shè)計,采用動態(tài)顯示方法。</p><p><b>  硬件電路設(shè)計</b></p><p>  3.1、鍵盤電路設(shè)計</p><p>  按鍵模塊采用4×4行列矩陣結(jié)構(gòu),由4條行線和4條列線構(gòu)成。行線和列線共有16個交叉點每個交叉點可以放置一

10、個按鍵,這樣共可以放置16個按鍵。按鍵電路如圖2所示。</p><p><b>  圖2</b></p><p>  KEYL0~KEYL3為行線,分別接單片機的P2.0~P2.3;KEYR0~KEYR3為列線,分別接單片機的P2.4~P2.7。軟件編程采用線翻轉(zhuǎn)法,該方法要求行線和列線上 都有上拉電阻。由于AT89C51單片機的P2口內(nèi)部集成了上拉電阻,所以系統(tǒng)未加

11、。圖中順序前十個按鍵為0~9,最后3個按鍵分別為退格鍵、閉鎖鍵和確認(rèn)鍵。</p><p>  3.2、顯示電路設(shè)計</p><p>  顯示電路由6個共陽極數(shù)碼管構(gòu)成。軟件編程時采用動態(tài)顯示方法,其結(jié)構(gòu)圖如圖3所示。</p><p><b>  圖3</b></p><p>  軟件編程時,按照下面的步驟顯示字符:<

12、;/p><p> ?。?)、首先從P0口輸出共陽極字符的段碼;</p><p> ?。?)、然后從LCONi輸出低電平。</p><p>  3.3、報警電路設(shè)計</p><p>  報警電路主要由PNP三極管和蜂鳴器構(gòu)成。報警電路圖如圖4所示。</p><p><b>  圖4</b></p&

13、gt;<p>  LS1為一個5V的壓電蜂鳴器,當(dāng)對其1、2號引腳施加5V電壓時,便會鳴叫。由圖4可知,當(dāng)ALARMCON輸出低電平時,三極管飽和導(dǎo)通,蜂鳴器鳴叫;當(dāng)ALARMCON輸出高電平時,三極管飽截止,蜂鳴器停止鳴叫。通過控制ALARMCON輸出低電平的時間長短來控制蜂鳴器長叫或短叫。</p><p>  3.4、電子鎖控制電路</p><p>  電子鎖控制電路主要

14、由繼電器、三極管和發(fā)光二極管構(gòu)成。電子鎖控制電路圖如圖5所示。</p><p><b>  圖5</b></p><p>  繼電器線圈的一個引腳接電源正極,另一端接NPN三極管的集電極。三極管的基極通過一個電阻接單片機的引腳。當(dāng)LOCKCON輸出高電平時,三極管導(dǎo)通,繼電器線圈得電,觸點閉合,發(fā)光二極管發(fā)光,相當(dāng)于電子鎖閉鎖;當(dāng)LOCKCON輸出低電平時,三極管截止

15、,繼電器線圈失電,觸點釋放,發(fā)光二極管熄滅,相當(dāng)于電子鎖開鎖。圖中普通二極管是繼電器線圈的續(xù)流二極管,為感應(yīng)電動勢提供回路,以免損壞三極管。</p><p><b>  3.5、單片機電路</b></p><p>  單片機電路主要由單片機、振蕩電路和復(fù)位電路構(gòu)成。由于AT89C51內(nèi)部集成了12MHz的振蕩電路,所以系統(tǒng)外部未加。單片機電路圖如圖6所示。</p

16、><p><b>  圖6</b></p><p>  AT89C51單片機的P0口用于輸出顯示器段碼。P1口的P1.0~P1.5用于6個LED的亮與滅。P2口用于構(gòu)成行列矩陣鍵盤。P3.3用于控制蜂鳴器的鳴叫。P3.5用于控制電子鎖的開閉。</p><p><b>  軟件設(shè)計</b></p><p>

17、;  軟件設(shè)計主要是對鍵盤進行掃描,根據(jù)按鍵控制報警電路、電子鎖電路,并將結(jié)果顯示。因此整個軟件分為按鍵子程序、顯示子程序、報警子程序、電子鎖控制子程序及主程序。</p><p>  ////////常量、變量說明/////////////////////////////////////////////////////////</p><p>  #include<REG51.H&g

18、t;</p><p>  typedefunsigned char uchar;</p><p>  typedef unsigned int uint;</p><p>  ///鍵盤子程序相關(guān)說明</p><p>  #define BLANKCHAR 10 //定義空白常量</p><p>  #define

19、 PCHAR 11 //定義字符P常量</p><p>  #define OPENCHAR 12 //定義開鎖字符┣常量</p><p>  #define ALARMCHAR 13 //定義字符A常量</p><p>  #define LINECHAR 14 //定義字符-常量</p><p>  #define S

20、ETCHAR 15 //定義字符B常量</p><p>  #define BACKKEY 0X0D //定義退格鍵常量</p><p>  #define ENTERKEY 0X0F //定義確定鍵常量</p><p>  #define LOCKKEY 0X0E //定義閉鎖鍵常量</p><p>  #define

21、SETKEY 0X0C //定義設(shè)定鍵常量</p><p>  #define NO_KEY 20 //定義無按鍵返回常量</p><p>  #define KEYPORT P2 //定義鍵盤端口</p><p>  uchar KeyPre; //保存上次掃描按鍵的鍵值</p><p>  uchar KeyU

22、p; //用于控制按鍵去抖動操作</p><p>  #define LEDPORT P0 //定義顯示器段碼輸出端口</p><p>  #define LEDCON P1 //定義顯示器位碼輸出端口</p><p>  uchar code SEGCODE[]=</p><p>  {0XC0,0XF9,0XA4,

23、0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,//0……9的共陽極段碼</p><p>  0XFF,//不顯示的共陽極段碼</p><p>  0X8C,//字符P的共陽極段碼</p><p>  0X8F,//┣的共陽極段碼</p><p>  0X88,//字符A的共陽極段碼</p>&l

24、t;p>  0XBF, //字符-的共陽極段碼</p><p><b>  0X00};</b></p><p>  //LED位碼 </p><p>  uchar code BITCODE[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};</p><p>  uch

25、ar DispBuf[6]; //保存顯示的字符</p><p>  bit DispNormal;//控制顯示時是正常顯示還是閃爍顯示</p><p>  uchar DispCnt;//控制閃爍顯示的頻率</p><p>  #define LONG_TIME 200 //蜂鳴器響2s</p><p>  #define SH

26、ORT_TIME 20//蜂鳴器響200ms </p><p>  #define LONGER_TIME 18000//蜂鳴器響3min</p><p>  sbit ALARMCON=P3^4; //定義報警控制引腳</p><p>  bit AlarmEnable; //定義是否報警或聲音提示</p><p>

27、;  uint AlarmTime; //定義報警時間長度</p><p>  sbit LOCKCON=P3^3; //定義電子鎖控制引腳</p><p>  uchar PassWord[]={1,2,2,2,1}; //定義初始密碼表</p><p>  uchar PassInBuf[6]; //保存輸入的密碼字符</p&g

28、t;<p>  uchar PassInBuf1[6]; //設(shè)定密碼時保存第一次輸入的密碼</p><p>  uchar PassPosi=1;//用戶輸入的密碼字符在PassInBuf[6]中的位置</p><p>  bit TimerBit;//20ms定時時間到標(biāo)志</p><p>  uchar SysMode;//系統(tǒng)

29、所處的模式:0輸入密碼模式1報警模式2開鎖模式</p><p>  uchar ErrorCnt; //用戶連續(xù)輸入密碼出錯次數(shù)</p><p>  long int j;</p><p><b>  char i=0;</b></p><p>  char h=0; //密碼重新輸入錯誤標(biāo)志位<

30、/p><p><b>  char q;</b></p><p>  char p=0; //重置密碼輸入次數(shù)標(biāo)志</p><p>  char SET=0; //設(shè)定密碼標(biāo)志位</p><p>  ////////顯示子程序///////////////////////////////////////////

31、////////////////</p><p><b>  //信息填充函數(shù)</b></p><p>  void Fill_Buf(uchar FillChar)//將字符FillChar寫入緩沖區(qū)</p><p><b>  {</b></p><p><b>  uchar t;

32、</b></p><p>  for(t=0;t<6;t++)</p><p><b>  {</b></p><p>  DispBuf[t]=FillChar;</p><p>  PassInBuf[t]=FillChar;</p><p><b>  }<

33、/b></p><p><b>  }</b></p><p>  void Fill_Buf_P() //將系統(tǒng)閉鎖時的信息寫入緩沖區(qū)</p><p><b>  {</b></p><p>  Fill_Buf(BLANKCHAR);</p><p>  Dis

34、pBuf[0]=PCHAR;</p><p><b>  }</b></p><p>  void Fill_Buf_O() //將系統(tǒng)開鎖時的信息寫入緩沖區(qū)</p><p><b>  {</b></p><p>  Fill_Buf(BLANKCHAR);</p><p

35、>  DispBuf[0]=OPENCHAR;</p><p><b>  }</b></p><p>  void Fill_Buf_A() //將系統(tǒng)報警時的信息寫入緩沖區(qū)</p><p><b>  {</b></p><p>  Fill_Buf(LINECHAR);<

36、;/p><p>  DispBuf[0]=ALARMCHAR;</p><p><b>  } </b></p><p>  void Fill_Buf_B() //將系統(tǒng)設(shè)定密碼時的信息寫入緩沖區(qū)</p><p><b>  {</b></p><p>  Fill_

37、Buf(BLANKCHAR);</p><p>  DispBuf[0]=SETCHAR;</p><p><b>  } </b></p><p>  //緩沖區(qū)顯示函數(shù) </p><p>  void Disp_Led_Sin(uchar DispChar,uchar DispPosi) //在某個LED上

38、顯示字符</p><p><b>  {</b></p><p>  LEDPORT=SEGCODE[DispChar];</p><p>  LEDCON=BITCODE[DispPosi]; </p><p><b>  }</b></p><p>  void D

39、isp_Led_OFF() //關(guān)閉顯示器</p><p><b>  {</b></p><p><b>  uchar T;</b></p><p>  LEDCON|=0X3F;</p><p>  for(T=0;T<6;T++)</p><p>  Dis

40、p_Led_Sin(BLANKCHAR,T);</p><p><b>  }</b></p><p>  void Disp_LED(uchar i)//當(dāng)系統(tǒng)處于不同模式下時顯示某個顯示器</p><p><b>  {</b></p><p>  DispCnt++;</p>

41、<p>  DispCnt%=10;</p><p>  if(DispCnt==0)</p><p><b>  {</b></p><p>  DispNormal=~DispNormal;</p><p><b>  }</b></p><p>  if(S

42、ysMode==1)</p><p><b>  {</b></p><p>  if(!DispNormal)</p><p><b>  {</b></p><p>  Disp_Led_OFF();</p><p><b>  return;</b>

43、;</p><p><b>  }</b></p><p><b>  }</b></p><p>  Disp_Led_Sin(DispBuf[i],i);</p><p><b>  }</b></p><p>  ////////報警子程序///

44、/////////////////////////////////////////////////////////</p><p>  void Sys_Speaker(uint stime) //設(shè)置報警時間及報警標(biāo)志位</p><p><b>  {</b></p><p>  AlarmEnable=1;</p><

45、;p>  AlarmTime=stime;</p><p><b>  }</b></p><p>  void Sys_Alarm() //控制蜂鳴器鳴叫</p><p><b>  {</b></p><p>  if(AlarmEnable==1)</p><p&

46、gt;<b>  {</b></p><p>  ALARMCON=0;</p><p>  AlarmTime--;</p><p>  if(AlarmTime==0)</p><p><b>  {</b></p><p>  AlarmEnable=0;</p&

47、gt;<p>  ALARMCON=1;</p><p>  if(SysMode==1)</p><p><b>  {</b></p><p>  SysMode=0;</p><p>  Fill_Buf_P();</p><p><b>  }</b>&

48、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  ////////鍵盤子程序////////////////////////////////////////////////////////

49、////</p><p>  uchar Find_Key()//掃描一次鍵盤返回按鍵值 </p><p><b>  {</b></p><p>  uchar KeyTemp,i,j;</p><p>  KEYPORT=0XF0;</p><p>  KeyTemp=KEYPORT;&

50、lt;/p><p>  if(KeyTemp==0XF0)</p><p>  return NO_KEY;</p><p>  switch(KeyTemp)</p><p><b>  {</b></p><p>  case 0x70: j=4; break;</p><

51、p>  case 0xb0: j=3; break;</p><p>  case 0xd0: j=2; break;</p><p>  case 0xe0: j=1; break;</p><p>  default: break;</p><p><b>  }</b></p>&l

52、t;p>  KEYPORT=0x0f;</p><p>  KeyTemp=KEYPORT;</p><p>  switch(KeyTemp)</p><p><b>  {</b></p><p>  case 0x07: i=4; break;</p><p>  case 0x0

53、b: i=3; break;</p><p>  case 0x0d: i=2; break;</p><p>  case 0x0e: i=1; break;</p><p>  default: break;</p><p><b>  } </b></p><p>  retu

54、rn (4*(i-1)+j-1);</p><p><b>  }</b></p><p>  uchar Scan_Key() //負(fù)責(zé)按鍵去抖動等操作</p><p><b>  {</b></p><p>  uchar KeyTemp;</p><p>  Key

55、Temp=Find_Key();</p><p>  if(KeyTemp==NO_KEY)</p><p><b>  {</b></p><p>  if(KeyUp<2)</p><p><b>  {</b></p><p><b>  KeyUp=0

56、;</b></p><p>  return NO_KEY;</p><p><b>  }</b></p><p>  if(KeyUp==2)</p><p><b>  {</b></p><p><b>  KeyUp=3;</b>&

57、lt;/p><p>  return NO_KEY;</p><p><b>  }</b></p><p>  if(KeyUp==3)</p><p><b>  {</b></p><p><b>  KeyUp=0;</b></p>&

58、lt;p>  return KeyPre;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>

59、  if(KeyUp==0)</p><p><b>  {</b></p><p><b>  KeyUp=1;</b></p><p>  KeyPre=KeyTemp;</p><p><b>  }</b></p><p>  else if(K

60、eyUp==1)</p><p><b>  {</b></p><p>  if(KeyPre==KeyTemp)</p><p><b>  KeyUp=2;</b></p><p><b>  else</b></p><p>  KeyPre=K

61、eyTemp;</p><p><b>  }</b></p><p>  else if(KeyUp==3)</p><p><b>  {</b></p><p><b>  KeyUp=2;</b></p><p><b>  }<

62、;/b></p><p><b>  }</b></p><p>  return NO_KEY;</p><p><b>  }</b></p><p>  void Key_Process(uchar Key) //按鍵處理函數(shù)</p><p><b&g

63、t;  {</b></p><p><b>  uchar i;</b></p><p>  if(Key==NO_KEY)</p><p><b>  return;</b></p><p>  switch(SysMode)</p><p><b>

64、  {</b></p><p><b>  case 0:</b></p><p>  switch(Key)</p><p><b>  {</b></p><p><b>  case 0:</b></p><p><b>  

65、case 1:</b></p><p><b>  case 2:</b></p><p><b>  case 3:</b></p><p><b>  case 4:</b></p><p><b>  case 5:</b></p&

66、gt;<p><b>  case 6:</b></p><p><b>  case 7:</b></p><p><b>  case 8:</b></p><p><b>  case 9:</b></p><p>  DispBuf[

67、PassPosi]=LINECHAR;</p><p>  PassInBuf[PassPosi]=Key;</p><p>  if(PassPosi<5)</p><p>  PassPosi++;</p><p>  Sys_Speaker(SHORT_TIME);</p><p><b>  b

68、reak;</b></p><p>  case BACKKEY:</p><p>  DispBuf[PassPosi]=BLANKCHAR;</p><p>  PassInBuf[PassPosi]=BLANKCHAR;</p><p>  if(PassPosi>1)</p><p>  Pa

69、ssPosi--;</p><p>  Sys_Speaker(SHORT_TIME);</p><p><b>  break;</b></p><p>  case ENTERKEY:</p><p>  for(i=0;i<5;i++)</p><p><b>  {<

70、/b></p><p>  if(PassInBuf[i+1]!=PassWord[i])</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  if(i>=5)</b></p><

71、p><b>  {</b></p><p>  Fill_Buf_O();</p><p>  PassPosi=1;</p><p>  LOCKCON=1;</p><p>  ErrorCnt=0;</p><p>  Sys_Speaker(LONG_TIME);</p>

72、<p>  SysMode=2;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  ErrorCnt++;</p><p>  if(Error

73、Cnt>2)</p><p><b>  {</b></p><p>  ErrorCnt=0;</p><p>  Fill_Buf_A();</p><p>  PassPosi=1;</p><p>  Sys_Speaker(LONGER_TIME);</p><

74、p>  SysMode=1;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  Fill_Buf_P();</p><p>  PassPosi=1;&

75、lt;/p><p>  Sys_Speaker(LONG_TIME);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case LOCKKEY:</

76、p><p>  Fill_Buf_P();</p><p>  PassPosi=1;</p><p>  Sys_Speaker(SHORT_TIME);</p><p>  break;</p><p><b>  }</b></p><p><b> 

77、 break;</b></p><p><b>  case 2:</b></p><p>  if(Key==LOCKKEY)</p><p><b>  {</b></p><p>  Fill_Buf_P();</p><p>  SysMode=0;<

78、;/p><p>  LOCKCON=0;</p><p>  Sys_Speaker(SHORT_TIME);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(Key==SETKEY)//密碼重置</

79、p><p><b>  {</b></p><p>  if(SET==0)</p><p><b>  {</b></p><p>  Fill_Buf_B();</p><p><b>  SET=1;</b></p><p>

80、;<b>  break;</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  if(SET==1)</p><p><

81、b>  {</b></p><p>  switch(Key)</p><p><b>  {</b></p><p><b>  case 0:</b></p><p><b>  case 1:</b></p><p><b

82、>  case 2:</b></p><p><b>  case 3:</b></p><p><b>  case 4:</b></p><p><b>  case 5:</b></p><p><b>  case 6:</b>&

83、lt;/p><p><b>  case 7:</b></p><p><b>  case 8:</b></p><p><b>  case 9:</b></p><p>  DispBuf[PassPosi]=LINECHAR;</p><p>  P

84、assInBuf[PassPosi]=Key;</p><p>  if(PassPosi<5)</p><p>  PassPosi++;</p><p>  Sys_Speaker(SHORT_TIME);</p><p><b>  break;</b></p><p>  case

85、BACKKEY:</p><p>  DispBuf[PassPosi]=BLANKCHAR;</p><p>  PassInBuf[PassPosi]=BLANKCHAR;</p><p>  if(PassPosi>1)</p><p>  PassPosi--;</p><p>  Sys_Speaker

86、(SHORT_TIME);</p><p><b>  break;</b></p><p>  case ENTERKEY:</p><p>  if(PassPosi<5)</p><p><b>  break;</b></p><p><b>  if

87、(p==0)</b></p><p><b>  {p=1;</b></p><p>  Fill_Buf_B();</p><p>  PassPosi=1;</p><p>  for(i=0;i<5;i++)</p><p>  (PassInBuf1[i]=P

88、assInBuf[i+1]);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  {for(i=0;i<5;i++)</p><p&g

89、t;<b>  {</b></p><p>  if(PassInBuf[i+1]!=PassInBuf1[i])</p><p><b>  {</b></p><p><b>  h=1;</b></p><p><b>  break;</b><

90、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(h==1)</b></p><p><b>  {</b></p><p><b>  h=0;</b&g

91、t;</p><p>  Fill_Buf_A();</p><p>  PassPosi=1;</p><p>  LOCKCON=0;</p><p>  Sys_Speaker(LONG_TIME);</p><p>  SysMode=1;</p><p><b>  brea

92、k;</b></p><p><b>  }</b></p><p>  for(q=0;q<5;q++)</p><p>  PassWord[q]=PassInBuf[q+1];</p><p>  Fill_Buf_P();</p><p>  SysMode=0;<

93、/p><p>  LOCKCON=0;</p><p>  PassPosi=1;</p><p><b>  p=0;</b></p><p><b>  SET=0;</b></p><p>  Sys_Speaker(LONG_TIME);</p><p

94、><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break; </b></p><p><b>  }</b></p><

95、;p><b>  }</b></p><p>  /////////初始化程序///////////////////////////////////////////////////////////</p><p>  void Ini_Timer0() //初始化T0</p><p><b>  {</b&g

96、t;</p><p>  TMOD&=0XF0;</p><p>  TMOD|=0X01;</p><p><b>  TR0=0;</b></p><p>  TH0=(65536-10000)/256;</p><p>  TL0=(65536-10000)%256;</p&g

97、t;<p><b>  TR0=1;</b></p><p><b>  ET0=1;</b></p><p><b>  }</b></p><p>  void Timer0() interrupt 1 //T0中斷函數(shù)</p><p><b&g

98、t;  {</b></p><p><b>  TR0=0;</b></p><p>  TH0=(65536-10000)/256;</p><p>  TL0=(65536-10000)%256;</p><p><b>  TR0=1;</b></p><p&g

99、t;  TimerBit=1;</p><p><b>  }</b></p><p>  void Ini_System() //系統(tǒng)初始化</p><p><b>  {</b></p><p>  PassPosi=1;</p><p>  LOCKCON=0;&

100、lt;/p><p>  Ini_Timer0();</p><p>  Fill_Buf_P();</p><p><b>  EA=1;</b></p><p><b>  }</b></p><p>  ////////主程序/////////////////////////

101、///////////////////////////////////////</p><p>  void main()</p><p><b>  {</b></p><p>  uchar KeyTemp;</p><p>  Ini_System();</p><p><b>

102、;  while(1)</b></p><p><b>  {</b></p><p>  if(TimerBit==1)</p><p><b>  {</b></p><p>  Disp_LED(i);</p><p><b>  i++;<

103、/b></p><p><b>  if(i>5)</b></p><p><b>  i=0;</b></p><p>  Sys_Alarm();</p><p>  KeyTemp=Scan_Key();</p><p>  Key_Process(KeyT

104、emp);</p><p>  TimerBit=0;</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  總結(jié)</b></p

105、><p>  本文詳細(xì)介紹了如何使用AT89C51單片和其他元器件設(shè)計一款電子密碼鎖。首先介紹了系統(tǒng)的具體要求實現(xiàn)的功能,在此基礎(chǔ)上將整個系統(tǒng)劃分為鍵盤模塊、顯示模塊、報警模塊、電子鎖控制模塊和單片機模塊;然后給出了每個模塊的硬件電路圖,并對硬件電路圖作了相應(yīng)的說明;最后根據(jù)功能和硬件電路圖給出了系統(tǒng)相關(guān)模塊的子程序和系統(tǒng)主程序。</p><p>  通過本密碼鎖的設(shè)計,使我對單片機有了更深的

106、了解。特別是鍵盤掃描方法,以前只是理論上知識,而本次設(shè)計讓我有機會去實踐了這一知識。</p><p>  本設(shè)計只是一個簡單的密碼鎖,還有很多功能可以添加上去,如密碼不必必須是5位,少于5位也可以;密碼的明碼顯示等</p><p><b>  參考文獻(xiàn):</b></p><p>  《51單片機C語言應(yīng)用開發(fā)技術(shù)大全》龍脈工作室 劉坤、宋戈、

107、趙紅波、張憲棟 編著,人民郵電出版社</p><p>  《51單片機應(yīng)用設(shè)計與仿真——基于Keil與Proteus》丁明亮、唐前輝 主編,北京航空航天大學(xué)出版社</p><p><b>  附:</b></p><p><b>  1、整體電路圖</b></p><p><b>  2

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論