<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 32. 電子密碼鎖設(shè)計

          32. 電子密碼鎖設(shè)計

          作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          1.實驗任務(wù)
          根據(jù)設(shè)定好的密碼,采用二個按鍵實現(xiàn)密碼的輸入功能,當(dāng)密碼輸入正確之后,鎖就打開,如果輸入的三次的密碼不正確,就鎖定按鍵3秒鐘,同時發(fā)現(xiàn)報警聲,直到?jīng)]有按鍵按下3種后,才打開按鍵鎖定功能;否則在3秒鐘內(nèi)仍有按鍵按下,就重新鎖定按鍵3秒時間并報警。
          2.電路原理

          圖4.32.1
          3.系統(tǒng)板上硬件連線
          (1).把“單片機系統(tǒng)”區(qū)域中的P0.0/AD0用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的SPKIN端子上;
          (2).把“音頻放大模塊”區(qū)域中的SPKOUT端子接喇叭和;
          (3).把“單片機系統(tǒng)”區(qū)域中的P2.0/A8-P2.7/A15用8芯排線連接到“四路靜態(tài)數(shù)碼顯示”區(qū)域中的任一個ABCDEFGH端子上;
          (4).把“單片機系統(tǒng)“區(qū)域中的P1.0用導(dǎo)線連接到“八路發(fā)光二極管模塊”區(qū)域中的L1端子上;
          (5).把“單片機系統(tǒng)”區(qū)域中的P3.6/WR、P3.7/RD用導(dǎo)線連接到“獨立式鍵盤”區(qū)域中的SP1和SP2端子上;
          4.程序設(shè)計內(nèi)容
          (1).密碼的設(shè)定,在此程序中密碼是固定在程序存儲器ROM中,假設(shè)預(yù)設(shè)的密碼為“12345”共5位密碼。
          (2).密碼的輸入問題:
          由于采用兩個按鍵來完成密碼的輸入,那么其中一個按鍵為功能鍵,另一個按鍵為數(shù)字鍵。在輸入過程中,首先輸入密碼的長度,接著根據(jù)密碼的長度輸入密碼的位數(shù),直到所有長度的密碼都已經(jīng)輸入完畢;或者輸入確認功能鍵之后,才能完成密碼的輸入過程。進入密碼的判斷比較處理狀態(tài)并給出相應(yīng)的處理過程。
          (3).按鍵禁止功能:初始化時,是允許按鍵輸入密碼,當(dāng)有按鍵按下并開始進入按鍵識別狀態(tài)時,按鍵禁止功能被激活,但啟動的狀態(tài)在3次密碼輸入不正確的情況下發(fā)生的。
          5.C語言源程序
          #include
          unsignedcharcodeps[]={1,2,3,4,5};
          unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
          0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
          unsignedcharpslen=9;
          unsignedchartemplen;
          unsignedchardigit;
          unsignedcharfuncount;
          unsignedchardigitcount;
          unsignedcharpsbuf[9];
          bitcmpflag;
          bithibitflag;
          biterrorflag;
          bitrightflag;
          unsignedintsecond3;
          unsignedintaa;
          unsignedintbb;
          bitalarmflag;
          bitexchangeflag;
          unsignedintcc;
          unsignedintdd;
          bitokflag;
          unsignedcharoka;
          unsignedcharokb;
          voidmain(void)
          {
          unsignedchari,j;
          P2=dispcode[digitcount];
          TMOD=0x01;
          TH0=(65536-500)/256;
          TL0=(65536-500)%256;
          TR0=1;
          ET0=1;
          EA=1;
          while(1)
          {
          if(cmpflag==0)
          {
          if(P3_6==0)//functionkey
          {
          for(i=10;i>0;i--)
          for(j=248;j>0;j--);
          if(P3_6==0)
          {
          if(hibitflag==0)
          {
          funcount++;
          if(funcount==pslen+2)
          {
          funcount=0;
          cmpflag=1;
          }
          P1=dispcode[funcount];
          }
          else
          {
          second3=0;
          }
          while(P3_6==0);
          }
          }
          if(P3_7==0)//digitkey
          {
          for(i=10;i>0;i--)
          for(j=248;j>0;j--);
          if(P3_7==0)
          {
          if(hibitflag==0)
          {
          digitcount++;
          if(digitcount==10)
          {
          digitcount=0;
          }
          P2=dispcode[digitcount];
          if(funcount==1)
          {
          pslen=digitcount;
          templen=pslen;
          }
          elseif(funcount>1)
          {
          psbuf[funcount-2]=digitcount;
          }
          }
          else
          {
          second3=0;
          }
          while(P3_7==0);
          }
          }
          }
          else
          {
          cmpflag=0;
          for(i=0;i{
          if(ps!=psbuf)
          {
          hibitflag=1;
          i=pslen;
          errorflag=1;
          rightflag=0;
          cmpflag=0;
          second3=0;
          gotoa;
          }
          }
          cc=0;
          errorflag=0;
          rightflag=1;
          hibitflag=0;
          a:cmpflag=0;
          }
          }
          }

          voidt0(void)interrupt1using0
          {
          TH0=(65536-500)/256;
          TL0=(65536-500)%256;
          if((errorflag==1)&&(rightflag==0))
          {
          bb++;
          if(bb==800)
          {
          bb=0;
          alarmflag=~alarmflag;
          }
          if(alarmflag==1)
          {
          P0_0=~P0_0;
          }
          aa++;
          if(aa==800)
          {
          aa=0;
          P0_1=~P0_1;
          }
          second3++;
          if(second3==6400)
          {
          second3=0;
          hibitflag=0;
          errorflag=0;
          rightflag=0;
          cmpflag=0;
          P0_1=1;
          alarmflag=0;
          bb=0;
          aa=0;
          }
          }
          if((errorflag==0)&&(rightflag==1))
          {
          P0_1=0;
          cc++;
          if(cc<1000)
          {
          okflag=1;
          }
          elseif(cc<2000)
          {
          okflag=0;
          }
          else
          {
          errorflag=0;
          rightflag=0;
          hibitflag=0;
          cmpflag=0;
          P0_1=1;
          cc=0;
          oka=0;
          okb=0;
          okflag=0;
          P0_0=1;
          }
          if(okflag==1)
          {
          oka++;
          if(oka==2)
          {
          oka=0;
          P0_0=~P0_0;
          }
          }
          else
          {
          okb++;
          if(okb==3)
          {
          okb=0;
          P0_0=~P0_0;
          }
          }
          }
          }


          關(guān)鍵詞: 電子密碼鎖單片機系

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();