基于51單片機(jī)密碼鎖課程設(shè)計(jì)報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩29頁(yè)未讀, 繼續(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><b>  單片機(jī)課程設(shè)計(jì)報(bào)告</b></p><p>  題目:簡(jiǎn)易電子密碼鎖設(shè)計(jì)</p><p>  專業(yè): 自動(dòng)化 </p><p>  班級(jí): 2013屆1班 </p><

2、p>  姓名: </p><p>  同組隊(duì)員: </p><p>  學(xué)號(hào): </p><p>  日期: 2015

3、 年 3月 </p><p><b>  一.設(shè)計(jì)目的</b></p><p>  在日常的生活和工作中,住宅與部門的安全防范、單位的文件檔案、財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存多以加鎖的辦法來(lái)解決。若使用傳統(tǒng)的機(jī)械式鑰匙開鎖,人們常需要攜帶多把鑰匙,使用極不方便,且鑰匙丟失后安全性即大打折扣。隨著科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)日常生活中的安全保險(xiǎn)器件的要求越來(lái)越高。為了滿

4、足人們對(duì)鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生。密碼鎖具有安全性高、成本低、功耗低、易操作等優(yōu)點(diǎn)。</p><p>  在安全技術(shù)防范領(lǐng)域,具有防盜報(bào)警功能的電子密碼鎖逐漸代替?zhèn)鹘y(tǒng)的機(jī)械式密碼鎖,克服了機(jī)械式密碼鎖密碼量少,安全性能差的缺點(diǎn),使密碼鎖無(wú)論在技術(shù)上還是在性能上都大大提高一步。隨著大規(guī)模集成電路技術(shù)的發(fā)展,特別是單片機(jī)的問世,出現(xiàn)了帶微處理器的只能密碼鎖,它除了具有電子密碼鎖的功能

5、外,還引入了智能化管理、專家分析系統(tǒng)等功能,從而使密碼鎖具有很高的安全性、可靠性,應(yīng)用日益廣泛。</p><p>  本設(shè)計(jì)采用單片機(jī)為主控芯片,結(jié)合外圍電路,組成電子密碼鎖,用戶想要打開鎖,必先通過提供的鍵盤輸入正確的密碼才能將鎖打開,密碼輸入錯(cuò)誤就有提示,為了提高安全性,當(dāng)密碼輸入錯(cuò)誤次將報(bào)警。密碼可以由用戶自己修改設(shè)定,鎖開后才能修改密碼。修改密碼前必須再次輸入密碼,在輸入新密碼時(shí)候需要二次確認(rèn),以防止誤操

6、作。</p><p>  二.設(shè)計(jì)要求和方案選擇</p><p>  方案:用AT89C52設(shè)計(jì)的多功能密碼鎖。以單片機(jī)作為微控制器,可以實(shí)現(xiàn)基于以上優(yōu)點(diǎn),按鍵有效指示、輸入錯(cuò)誤、控制開鎖、錯(cuò)誤報(bào)警、密碼修改等功能,工作穩(wěn)定可靠,保密性高,實(shí)用性強(qiáng)。</p><p><b>  電子密碼鎖總體設(shè)計(jì)</b></p><p>

7、;<b>  三.硬件部分</b></p><p>  AT89C52簡(jiǎn)介:</p><p>  單片機(jī)AT89C52簡(jiǎn)介</p><p>  AT89C52是美國(guó)ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含4K bytes的可反復(fù)擦寫的只讀程序存儲(chǔ)器(EPROM)和128bytes的隨機(jī)存取數(shù)據(jù)序存器(RAM),器件采用A

8、TMEL公司的高密度/非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和FLASH存儲(chǔ)單元,AT89C52單片機(jī)為許多嵌入式控制系統(tǒng)提供了一種靈活行高且價(jià)廉的方案。</p><p><b>  主要特性:</b></p><p>  ? 與MCS-51 兼容</p><p>  ? 4K字節(jié)可編程FLAS

9、H存儲(chǔ)器(壽命:1000寫/</p><p><b>  擦循環(huán))</b></p><p>  ? 全靜態(tài)工作:0Hz-24KHz</p><p>  ? 三級(jí)程序存儲(chǔ)器保密鎖定</p><p>  ? 128*8位內(nèi)部RAM</p><p>  ? 32條可編程I/O線</p>&

10、lt;p>  ? 兩個(gè)16位定時(shí)器/計(jì)數(shù)器</p><p><b>  ? 5個(gè)中斷源</b></p><p><b>  ? 可編程串行通道</b></p><p>  ? 低功耗的閑置和掉電模式</p><p>  ? 片內(nèi)振蕩器和時(shí)鐘電路</p><p><

11、;b>  總電路圖 </b></p><p><b>  鍵盤電路</b></p><p>  按鍵與家庭電話式的按鍵方式</p><p><b>  復(fù)位電路</b></p><p><b>  晶振電路</b></p><p>&l

12、t;b>  顯示電路</b></p><p>  時(shí)刻顯示輸入輸出的內(nèi)容以及操作過程。</p><p><b>  報(bào)警電路</b></p><p>  當(dāng)輸入密碼錯(cuò)誤次數(shù)大于等于3次時(shí),會(huì)發(fā)出聲響報(bào)警。</p><p><b>  開鎖電路</b></p><

13、p><b>  四.軟件設(shè)計(jì)</b></p><p><b>  1.程序設(shè)計(jì)流程圖</b></p><p><b>  2.程序代碼</b></p><p>  #include <REG52.h></p><p>  #include<intrins

14、.h></p><p>  #define LCM_Data P0</p><p>  #define uchar unsigned char </p><p>  #define uint unsignedint</p><p>  #define w 6//定義密碼位數(shù)</p><p>  sbi

15、t lcd1602_rs=P2^5;</p><p>  sbit lcd1602_rw=P2^6;</p><p>  sbit lcd1602_en=P2^7;</p><p>  sbitScl=P3^4;//24C02串行時(shí)鐘</p><p>  sbitSda=P3^5;//24C02串行數(shù)據(jù)</p>&l

16、t;p>  sbit ALAM = P2^1;//報(bào)警</p><p>  sbit KEY = P2^0;//開鎖</p><p>  sbitopen_led=P2^2;//開鎖指示燈</p><p>  bit operation=0;//操作標(biāo)志位</p><p>  bit pass=0;//密碼正

17、確標(biāo)志</p><p>  bit ReInputEn=0;//重置輸入充許標(biāo)志</p><p>  bit s3_keydown=0;//3秒按鍵標(biāo)志位</p><p>  bit key_disable=0;//鎖定鍵盤標(biāo)志</p><p>  unsigned char countt0,second;//t0中斷計(jì)

18、數(shù)器,秒計(jì)數(shù)器</p><p>  void Delay5Ms(void);</p><p>  unsigned char code a[]={0xFE,0xFD,0xFB,0xF7}; //控盤掃描控制表</p><p>  unsigned char code b[]={"0123456789"};</p><p&g

19、t;  unsigned char code start_line[]= {"password: "};</p><p>  unsigned char code name[] = {"===Coded Lock==="}; //顯示名稱</p><p>  unsigned char code Correct[] =

20、 {" correct "};//輸入正確</p><p>  unsigned char code Error[] = {" error "}; //輸入錯(cuò)誤</p><p>  unsigned char code codepass[]= {" pass "

21、}; </p><p>  unsigned char code LockOpen[]= {" open "};//OPEN</p><p>  unsigned char code SetNew[] = {"SetNewWordEnable"};</p><p>  unsigned char

22、code Input[] = {"input: "};//INPUT</p><p>  unsigned char code ResetOK[] = {"ResetPasswordOK "};</p><p>  unsigned char code initword[]= {"Init password

23、..."};</p><p>  unsigned char code Er_try[]= {"error,try again!"};</p><p>  unsigned char code again[]= {"input again "};</p><p>  unsigned char Inp

24、utData[6];//輸入密碼暫存區(qū)</p><p>  unsigned char CurrentPassword[6]={1,3,1,4,2,0}; //當(dāng)前密碼值</p><p>  unsigned char TempPassword[6];</p><p>  unsigned char N=0;//密碼

25、輸入位數(shù)記數(shù)</p><p>  unsigned char ErrorCont;//錯(cuò)誤次數(shù)計(jì)數(shù)</p><p>  unsigned char CorrectCont;//正確輸入計(jì)數(shù)</p><p>  unsigned char ReInputCont; //重新輸入計(jì)數(shù)</p><p>  unsigned cha

26、r code initpassword[6]={0,0,0,0,0,0};</p><p>  //=====================5ms延時(shí)==============================</p><p>  void Delay5Ms(void)</p><p><b>  {</b></p><p

27、>  unsignedintTempCyc = 5552;</p><p>  while(TempCyc--);</p><p><b>  }</b></p><p>  //===================400ms延時(shí)==============================</p><p>  v

28、oid Delay400Ms(void)</p><p><b>  {</b></p><p>  unsigned char TempCycA = 5;</p><p>  unsignedintTempCycB;</p><p>  while(TempCycA--)</p><p><

29、;b>  {</b></p><p>  TempCycB=7269;</p><p>  while(TempCycB--);</p><p><b>  }</b></p><p><b>  }</b></p><p>  //============

30、====================24C02======================================</p><p>  void mDelay(uint t) //延時(shí)</p><p><b>  { </b></p><p><b>  uchari;</b></p><p

31、>  while(t--)</p><p><b>  {</b></p><p>  for(i=0;i<125;i++)</p><p><b>  {;}</b></p><p><b>  }</b></p><p><b>

32、;  }</b></p><p>  void Nop(void) //空操作</p><p><b>  {</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p

33、><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  }</b></p><p><b>  /*起始條件*/</b></p><p>  void Start(void)</

34、p><p><b>  {</b></p><p><b>  Sda=1;</b></p><p><b>  Scl=1;</b></p><p><b>  Nop();</b></p><p><b>  Sda=0;

35、</b></p><p><b>  Nop();</b></p><p><b>  }</b></p><p><b>  /*停止條件*/</b></p><p>  void Stop(void)</p><p><b> 

36、 {</b></p><p><b>  Sda=0;</b></p><p><b>  Scl=1;</b></p><p><b>  Nop();</b></p><p><b>  Sda=1;</b></p><

37、p><b>  Nop();</b></p><p><b>  }</b></p><p><b>  /*應(yīng)答位*/</b></p><p>  voidAck(void)</p><p><b>  {</b></p><p

38、><b>  Sda=0;</b></p><p><b>  Nop();</b></p><p><b>  Scl=1;</b></p><p><b>  Nop();</b></p><p><b>  Scl=0;</b&

39、gt;</p><p><b>  }</b></p><p><b>  /*反向應(yīng)答位*/</b></p><p>  voidNoAck(void)</p><p><b>  {</b></p><p><b>  Sda=1;<

40、/b></p><p><b>  Nop();</b></p><p><b>  Scl=1;</b></p><p><b>  Nop();</b></p><p><b>  Scl=0;</b></p><p>&

41、lt;b>  }</b></p><p>  /*發(fā)送數(shù)據(jù)子程序,Data為要求發(fā)送的數(shù)據(jù)*/</p><p>  void Send(uchar Data)</p><p><b>  {</b></p><p>  ucharBitCounter=8;</p><p>  u

42、char temp;</p><p><b>  do</b></p><p><b>  {</b></p><p>  temp=Data;</p><p><b>  Scl=0;</b></p><p><b>  Nop();<

43、/b></p><p>  if((temp&0x80)==0x80)</p><p><b>  Sda=1;</b></p><p><b>  else</b></p><p><b>  Sda=0;</b></p><p><

44、;b>  Scl=1;</b></p><p>  temp=Data<<1;</p><p>  Data=temp;</p><p>  BitCounter--;</p><p><b>  }</b></p><p>  while(BitCounter);&

45、lt;/p><p><b>  Scl=0;</b></p><p><b>  }</b></p><p>  /*讀一字節(jié)的數(shù)據(jù),并返回該字節(jié)值*/</p><p>  uchar Read(void)</p><p><b>  {</b></p

46、><p>  uchar temp=0;</p><p>  uchar temp1=0;</p><p>  ucharBitCounter=8;</p><p><b>  Sda=1;</b></p><p><b>  do{</b></p><p&g

47、t;<b>  Scl=0;</b></p><p><b>  Nop();</b></p><p><b>  Scl=1;</b></p><p><b>  Nop();</b></p><p><b>  if(Sda)</b&g

48、t;</p><p>  temp=temp|0x01;</p><p><b>  else</b></p><p>  temp=temp&0xfe;</p><p>  if(BitCounter-1)</p><p><b>  {</b></p>

49、<p>  temp1=temp<<1;</p><p>  temp=temp1;</p><p><b>  }</b></p><p>  BitCounter--;</p><p><b>  }</b></p><p>  while(Bi

50、tCounter);</p><p>  return(temp);</p><p><b>  }</b></p><p>  voidWrToROM(uchar Data[],ucharAddress,ucharNum)</p><p><b>  {</b></p><p&

51、gt;<b>  uchari;</b></p><p>  uchar *PData;</p><p>  PData=Data;</p><p>  for(i=0;i<Num;i++)</p><p><b>  {</b></p><p><b>  

52、Start();</b></p><p>  Send(0xa0);</p><p><b>  Ack();</b></p><p>  Send(Address+i);</p><p><b>  Ack();</b></p><p>  Send(*(PDa

53、ta+i));</p><p><b>  Ack();</b></p><p><b>  Stop();</b></p><p>  mDelay(20);</p><p><b>  }</b></p><p><b>  }</b

54、></p><p>  voidRdFromROM(uchar Data[],ucharAddress,ucharNum)</p><p><b>  {</b></p><p><b>  uchari;</b></p><p>  uchar *PData;</p><

55、p>  PData=Data;</p><p>  for(i=0;i<Num;i++)</p><p><b>  {</b></p><p><b>  Start();</b></p><p>  Send(0xa0);</p><p><b> 

56、 Ack();</b></p><p>  Send(Address+i);</p><p><b>  Ack();</b></p><p><b>  Start();</b></p><p>  Send(0xa1);</p><p><b>  

57、Ack();</b></p><p>  *(PData+i)=Read();</p><p><b>  Scl=0;</b></p><p><b>  NoAck();</b></p><p><b>  Stop();</b></p><

58、p><b>  }</b></p><p><b>  }</b></p><p>  //=======================================LCD1602=============================</p><p>  #define yi 0x80 </p>

59、<p>  //LCD第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)</p><p>  #define er 0x80+0x40 </p><p>  //LCD第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地址是0x40)</p><p>  //----------------延時(shí)函數(shù),后面經(jīng)常調(diào)用-------

60、---------------</p><p>  void delay(uintxms)//延時(shí)函數(shù),有參函數(shù)</p><p><b>  {</b></p><p><b>  uintx,y;</b></p><p>  for(x=xms;x>0;x--)</p><

61、;p>  for(y=110;y>0;y--);</p><p><b>  }</b></p><p>  //--------------------------寫指令---------------------------</p><p>  write_1602com(uchar com)//****液晶寫入指令函數(shù)****&

62、lt;/p><p><b>  {</b></p><p>  lcd1602_rs=0;//數(shù)據(jù)/指令選擇置為指令 ......</p><p>  lcd1602_rw=0; //讀寫選擇置為寫</p><p>  P0=com;//送入數(shù)據(jù)</p><p><b>  delay(1)

63、;</b></p><p>  lcd1602_en=1;//拉高使能端,為制造有效的下降沿做準(zhǔn)備</p><p><b>  delay(1);</b></p><p>  lcd1602_en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令</p><p><b>  }</b>&l

64、t;/p><p>  //-------------------------寫數(shù)據(jù)-----------------------------</p><p>  write_1602dat(uchardat)//***液晶寫入數(shù)據(jù)函數(shù)****</p><p><b>  {</b></p><p>  lcd1602_rs=

65、1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)</p><p>  lcd1602_rw=0; //讀寫選擇置為寫</p><p>  P0=dat;//送入數(shù)據(jù)</p><p><b>  delay(1);</b></p><p>  lcd1602_en=1; //en置高電平,為制造下降沿做準(zhǔn)備</p><p

66、><b>  delay(1);</b></p><p>  lcd1602_en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令</p><p><b>  }</b></p><p>  //-------------------------初始化-------------------------</p&

67、gt;<p>  voidlcd_init(void)</p><p><b>  {</b></p><p>  write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)</p><p>  write_1602com(0x0c);//開顯示不顯示光標(biāo)</p><

68、;p>  write_1602com(0x06);//整屏不移動(dòng),光標(biāo)自動(dòng)右移</p><p>  write_1602com(0x01);//清顯示</p><p><b>  }</b></p><p>  //==============將按鍵值編碼為數(shù)值=========================</p>&l

69、t;p>  unsigned char coding(unsigned char m)</p><p><b>  {</b></p><p>  unsigned char k;</p><p><b>  switch(m)</b></p><p><b>  {</b&

70、gt;</p><p>  case (0x18): k=1;break;</p><p>  case (0x28): k=2;break;</p><p>  case (0x48): k=3;break;</p><p>  case (0x88): k='A';break;</p><p>  

71、case (0x14): k=4;break;</p><p>  case (0x24): k=5;break;</p><p>  case (0x44): k=6;break;</p><p>  case (0x84): k='B';break;</p><p>  case (0x12): k=7;break;<

72、;/p><p>  case (0x22): k=8;break;</p><p>  case (0x42): k=9;break;</p><p>  case (0x82): k='C';break;</p><p>  case (0x11): k='*';break;</p><p&g

73、t;  case (0x21): k=0;break;</p><p>  case (0x41): k='#';break;</p><p>  case (0x81): k='D';break;</p><p><b>  }</b></p><p>  return(k);</

74、p><p><b>  }</b></p><p>  //=====================按鍵檢測(cè)并返回按鍵值===============================</p><p>  unsigned char keynum(void)</p><p><b>  {</b><

75、;/p><p>  unsigned char row,col,i;</p><p><b>  P1=0xf0;</b></p><p>  if((P1&0xf0)!=0xf0)</p><p><b>  {</b></p><p>  Delay5Ms();<

76、;/p><p>  Delay5Ms();</p><p>  if((P1&0xf0)!=0xf0)</p><p><b>  {</b></p><p>  row=P1^0xf0; //確定行線</p><p><b>  i=0;</b>&l

77、t;/p><p>  P1=a[i];//精確定位</p><p>  while(i<4)</p><p><b>  {</b></p><p>  if((P1&0xf0)!=0xf0)</p><p><b>  {</b></p>&l

78、t;p>  col=~(P1&0xff); //確定列線</p><p>  break; //已定位后提前退出 </p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b>

79、;</p><p><b>  i++;</b></p><p><b>  P1=a[i];</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

80、/b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  while((P

81、1&0xf0)!=0xf0);</p><p>  return (row|col);//行線與列線組合后返回</p><p><b>  }</b></p><p>  else return 0;//無(wú)鍵按下時(shí)返回0</p><p><b>  }</b></p>

82、<p>  //=======================一聲提示音,表示有效輸入========================</p><p>  voidOneAlam(void)</p><p><b>  {</b></p><p><b>  ALAM=0;</b></p>&l

83、t;p>  Delay5Ms();</p><p><b>  ALAM=1;</b></p><p><b>  }</b></p><p>  //========================二聲提示音,表示操作成功========================</p><p>  

84、voidTwoAlam(void)</p><p><b>  {</b></p><p><b>  ALAM=0;</b></p><p>  Delay5Ms();</p><p><b>  ALAM=1;</b></p><p>  Delay

85、5Ms();</p><p><b>  ALAM=0;</b></p><p>  Delay5Ms();</p><p><b>  ALAM=1;</b></p><p><b>  }</b></p><p>  //==============

86、==========三聲提示音,表示錯(cuò)誤========================</p><p>  voidThreeAlam(void)</p><p><b>  {</b></p><p><b>  ALAM=0;</b></p><p>  Delay5Ms();</p&g

87、t;<p><b>  ALAM=1;</b></p><p>  Delay5Ms();</p><p><b>  ALAM=0;</b></p><p>  Delay5Ms();</p><p><b>  ALAM=1;</b></p>&

88、lt;p>  Delay5Ms();</p><p><b>  ALAM=0;</b></p><p>  Delay5Ms();</p><p><b>  ALAM=1;</b></p><p><b>  }</b></p><p>  /

89、/=====================顯示輸入的N個(gè)數(shù)字,用H代替以便隱藏============================</p><p>  voidDisplayOne(void)</p><p><b>  {</b></p><p>  //DisplayOneChar(9+N,1,'*');</p

90、><p>  write_1602com(yi+5+N);</p><p>  write_1602dat('*');</p><p><b>  }</b></p><p>  //=======================顯示提示輸入=========================</p>

91、;<p>  voidDisplayChar(void)</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  if(pass==1)</p><p><b>  {</b></p><p>  //D

92、isplayListChar(0,1,LockOpen);</p><p>  write_1602com(er);</p><p>  for(i=0;i<16;i++)</p><p><b>  {</b></p><p>  write_1602dat(LockOpen[i]);</p>&

93、lt;p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  if(N==0)</b></p&g

94、t;<p><b>  {</b></p><p>  //DisplayListChar(0,1,Error);</p><p>  write_1602com(er);</p><p>  for(i=0;i<16;i++)</p><p><b>  {</b></p

95、><p>  write_1602dat(Error[i]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b><

96、;/p><p>  //DisplayListChar(0,1,start_line);</p><p>  write_1602com(er);</p><p>  for(i=0;i<16;i++)</p><p><b>  {</b></p><p>  write_1602dat(s

97、tart_line[i]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  voidDispla

98、yInput(void)</p><p><b>  {</b></p><p>  unsigned char i;</p><p>  if(CorrectCont==1)</p><p><b>  {</b></p><p>  //DisplayListChar(0

99、,0,Input);</p><p>  write_1602com(er);</p><p>  for(i=0;i<16;i++)</p><p><b>  {</b></p><p>  write_1602dat(Input[i]);</p><p><b>  }&l

100、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //========================重置密碼==================================================</p><p>  

101、//==================================================================================</p><p>  voidResetPassword(void)</p><p><b>  {</b></p><p>  unsigned char i;</p&

102、gt;<p>  unsigned char j;</p><p>  if(pass==0)</p><p><b>  {</b></p><p><b>  pass=0;</b></p><p>  DisplayChar();</p><p>  Th

103、reeAlam();</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(ReInputEn==1)</p><p><b>  {</b

104、></p><p><b>  if(N==6)</b></p><p><b>  {</b></p><p>  ReInputCont++;</p><p>  if(ReInputCont==2)</p><p><b>  {</b&g

105、t;</p><p>  for(i=0;i<6;)</p><p><b>  {</b></p><p>  if(TempPassword[i]==InputData[i])//將兩次輸入的新密碼作對(duì)比</p><p><b>  i++;</b></p><p&g

106、t;<b>  else</b></p><p><b>  {</b></p><p>  //DisplayListChar(0,1,Error);</p><p>  write_1602com(er);</p><p>  for(j=0;j<16;j++)</p>&l

107、t;p><b>  {</b></p><p>  write_1602dat(Error[j]);</p><p><b>  }</b></p><p>  ThreeAlam();//錯(cuò)誤提示</p><p><b>  pass=0;</b></p

108、><p>  ReInputEn=0;//關(guān)閉重置功能,</p><p>  ReInputCont=0;</p><p>  DisplayChar();</p><p><b>  break;</b></p><p><b>  }</b></p>&l

109、t;p><b>  } </b></p><p><b>  if(i==6)</b></p><p><b>  {</b></p><p>  //DisplayListChar(0,1,ResetOK);</p><p>  write_1602com(er);&l

110、t;/p><p>  for(j=0;j<16;j++)</p><p><b>  {</b></p><p>  write_1602dat(ResetOK[j]);</p><p><b>  }</b></p><p>  TwoAlam();//操作成

111、功提示</p><p>  WrToROM(TempPassword,0,6);//將新密碼寫入24C02存儲(chǔ)</p><p>  ReInputEn=0;</p><p><b>  }</b></p><p>  ReInputCont=0;</p><p>  CorrectCont=0;

112、</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  OneAlam();</p><p>  //DisplayListChar(0, 1, again);

113、//顯示再次輸入一次</p><p>  write_1602com(er);</p><p>  for(j=0;j<16;j++)</p><p><b>  {</b></p><p>  write_1602dat(again[j]);</p><p><b>  }

114、</b></p><p>  for(i=0;i<6;i++)</p><p><b>  {</b></p><p>  TempPassword[i]=InputData[i];//將第一次輸入的數(shù)據(jù)暫存起來(lái)</p><p><b>  }</b></p>

115、<p><b>  }</b></p><p>  N=0;//輸入數(shù)據(jù)位數(shù)計(jì)數(shù)器清零</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

116、<p><b>  }</b></p><p>  //=======================輸入密碼錯(cuò)誤超過三過,報(bào)警并鎖死鍵盤======================</p><p>  voidAlam_KeyUnable(void)</p><p><b>  {</b></p>

117、<p><b>  P1=0x00;</b></p><p><b>  {</b></p><p>  ALAM=~ALAM;</p><p>  Delay5Ms();</p><p><b>  }</b></p><p><b&

118、gt;  }</b></p><p>  //=======================取消所有操作============================================</p><p>  void Cancel(void)</p><p><b>  {</b></p><p> 

119、 unsigned char i;</p><p>  unsigned char j;</p><p>  //DisplayListChar(0, 1, start_line); </p><p>  write_1602com(er);</p><p>  for(j=0;j<16;j++)</p><p>

120、;<b>  {</b></p><p>  write_1602dat(start_line[j]);</p><p><b>  }</b></p><p>  TwoAlam();//提示音</p><p>  for(i=0;i<6;i++)</p><p&

121、gt;<b>  {</b></p><p>  InputData[i]=0;</p><p><b>  }</b></p><p>  KEY=1;//關(guān)閉鎖</p><p>  ALAM=1;//報(bào)警關(guān)</p><p>  operation=0;

122、//操作標(biāo)志位清零</p><p>  pass=0;//密碼正確標(biāo)志清零</p><p>  ReInputEn=0;//重置輸入充許標(biāo)志清零</p><p>  ErrorCont=0;//密碼錯(cuò)誤輸入次數(shù)清零</p><p>  CorrectCont=0;//密碼正確輸入次數(shù)清零</p><

123、;p>  ReInputCont=0;//重置密碼輸入次數(shù)清零 </p><p>  open_led=1;</p><p>  s3_keydown=0;</p><p>  key_disable=0;</p><p>  N=0;//輸入位數(shù)計(jì)數(shù)器清零</p><p><b>  }

124、</b></p><p>  //==========================確認(rèn)鍵,并通過相應(yīng)標(biāo)志位執(zhí)行相應(yīng)功能===============================</p><p>  void Ensure(void)</p><p><b>  {</b></p><p>  uns

125、igned char i,j;</p><p>  RdFromROM(CurrentPassword,0,6); //從24C02里讀出存儲(chǔ)密碼</p><p><b>  if(N==6)</b></p><p><b>  {</b></p><p>  if(ReInputEn==0)

126、//重置密碼功能未開啟</p><p><b>  {</b></p><p>  for(i=0;i<6;)</p><p><b>  {</b></p><p>  if(CurrentPassword[i]==InputData[i])</p>&l

127、t;p><b>  {</b></p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

128、<p>  ErrorCont++;</p><p>  if(ErrorCont==3)//錯(cuò)誤輸入計(jì)數(shù)達(dá)三次時(shí),報(bào)警并鎖定鍵盤</p><p><b>  {</b></p><p>  write_1602com(er);</p><p>  for(i=0;i<16;i++)</p&g

129、t;<p><b>  {</b></p><p>  write_1602dat(Error[i]);</p><p><b>  }</b></p><p><b>  do</b></p><p>  Alam_KeyUnable();</p>

130、<p><b>  while(1);</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  TR0=1;//開啟定時(shí)</p&g

131、t;<p>  key_disable=1;//鎖定鍵盤</p><p><b>  pass=0;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b>

132、</p><p><b>  }</b></p><p><b>  if(i==6)</b></p><p><b>  {</b></p><p>  CorrectCont++;</p><p>  if(CorrectCont==1)//正確

133、輸入計(jì)數(shù),當(dāng)只有一次正確輸入時(shí),開鎖,</p><p><b>  {</b></p><p>  //DisplayListChar(0,1,LockOpen);</p><p>  write_1602com(er);</p><p>  for(j=0;j<16;j++)</p><p&g

134、t;<b>  {</b></p><p>  write_1602dat(LockOpen[j]);</p><p><b>  }</b></p><p>  TwoAlam(); //操作成功提示音</p><p>  KEY=0;//開鎖</p>

135、<p>  pass=1;//置正確標(biāo)志位</p><p>  TR0=1;//開啟定時(shí)</p><p>  open_led=0;//開鎖指示燈亮</p><p>  for(j=0;j<6;j++)//將輸入清除</p><p><b>  {</b>&l

136、t;/p><p>  InputData[i]=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else//當(dāng)兩次正確輸入時(shí),開啟重置密碼功能</p><p><b>  {</b>&

137、lt;/p><p>  //DisplayListChar(0,1,SetNew);</p><p>  write_1602com(er);</p><p>  for(j=0;j<16;j++)</p><p><b>  {</b></p><p>  write_1602dat(SetN

138、ew[j]);</p><p><b>  }</b></p><p>  TwoAlam();//操作成功提示</p><p>  ReInputEn=1;//允許重置密碼輸入</p><p>  CorrectCont=0;//正確計(jì)數(shù)器清零</p><p>

139、;<b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  //=========================當(dāng)?shù)谝淮问褂没蛲浢艽a時(shí)可以用131420對(duì)其密碼初始化============</p><

140、;p>  {if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&&(InputData[5]==0))</p><p><b>  {</b></p>

141、<p>  WrToROM(initpassword,0,6); //強(qiáng)制將初始密碼寫入24C02存儲(chǔ)</p><p>  //DisplayListChar(0,1,initword);//顯示初始化密碼</p><p>  write_1602com(er);</p><p>  for(j=0;j<16;j++)</p>

142、<p><b>  {</b></p><p>  write_1602dat(initword[j]);</p><p><b>  }</b></p><p>  TwoAlam();</p><p>  Delay400Ms();</p><p>  Tw

143、oAlam();</p><p><b>  N=0;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  //DisplayLi

144、stChar(0,1,Error);</p><p>  write_1602com(er);</p><p>  for(j=0;j<16;j++)</p><p><b>  {</b></p><p>  write_1602dat(Error[j]);</p><p><b&

145、gt;  }</b></p><p>  ThreeAlam();//錯(cuò)誤提示音</p><p><b>  pass=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&g

146、t;<b>  }</b></p><p>  else//當(dāng)已經(jīng)開啟重置密碼功能時(shí),而按下開鎖鍵,</p><p><b>  {</b></p><p>  //DisplayListChar(0,1,Er_try);</p><p>  write_1602com(er);<

147、;/p><p>  for(j=0;j<16;j++)</p><p><b>  {</b></p><p>  write_1602dat(Er_try[j]);</p><p><b>  }</b></p><p>  ThreeAlam();</p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論