色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于51單片機(jī)的電子密碼鎖設(shè)計(jì)與應(yīng)用

          基于51單片機(jī)的電子密碼鎖設(shè)計(jì)與應(yīng)用

          作者: 時(shí)間:2008-10-15 來源:網(wǎng)絡(luò) 收藏

          1.實(shí)驗(yàn)任務(wù)

          根據(jù)設(shè)定好的密碼,采用二個(gè)按鍵實(shí)現(xiàn)密碼的輸入功能,當(dāng)密碼輸入正確之后,鎖就打開,如果輸入的三次的密碼不正確,就鎖定按鍵3秒鐘,同時(shí)發(fā)現(xiàn)報(bào)警聲,直到?jīng)]有按鍵按下3種后,才打開按鍵鎖定功能;否則在3秒鐘內(nèi)仍有按鍵按下,就重新鎖定按鍵3秒時(shí)間并報(bào)警。

          2.電路原理圖

          圖4.32.1

          3.系統(tǒng)板上硬件連線

          (1). 把“系統(tǒng)”區(qū)域中的p0.0/ad0用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的spk in端子上;

          (2). 把“音頻放大模塊”區(qū)域中的spk out端子接喇叭和;

          (3). 把“系統(tǒng)”區(qū)域中的p2.0/a8-p2.7/a15用8芯排線連接到“四路靜態(tài)數(shù)碼顯示”區(qū)域中的任一個(gè)abcdefgh端子上;

          (4). 把“系統(tǒng)“區(qū)域中的p1.0用導(dǎo)線連接到“八路發(fā)光二極管模塊”區(qū)域中的l1端子上;

          (5). 把“單片機(jī)系統(tǒng)”區(qū)域中的p3.6/wr、p3.7/rd用導(dǎo)線連接到“獨(dú)立式鍵盤”區(qū)域中的sp1和sp2端子上;

          4.程序設(shè)計(jì)內(nèi)容

          (1). 密碼的設(shè)定,在此程序中密碼是固定在程序存儲(chǔ)器rom中,假設(shè)預(yù)設(shè)的密碼為“12345”共5位密碼。

          (2). 密碼的輸入問題:

          由于采用兩個(gè)按鍵來完成密碼的輸入,那么其中一個(gè)按鍵為功能鍵,另一個(gè)按鍵為數(shù)字鍵。在輸入過程中,首先輸入密碼的長度,接著根據(jù)密碼的長度輸入密碼的位數(shù),直到所有長度的密碼都已經(jīng)輸入完畢;或者輸入確認(rèn)功能鍵之后,才能完成密碼的輸入過程。進(jìn)入密碼的判斷比較處理狀態(tài)并給出相應(yīng)的處理過程。

          (3). 按鍵禁止功能:初始化時(shí),是允許按鍵輸入密碼,當(dāng)有按鍵按下并開始進(jìn)入按鍵識別狀態(tài)時(shí),按鍵禁止功能被激活,但啟動(dòng)的狀態(tài)在3次密碼輸入不正確的情況下發(fā)生的。

          5.c語言源程序
          #include at89x52.h>
           
          unsigned char code ps[]={1,2,3,4,5};
          unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
          0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
           
          unsigned char pslen=9;
          unsigned char templen;
          unsigned char digit;
          unsigned char funcount;
          unsigned char digitcount;
          unsigned char psbuf[9];
          bit cmpflag;
          bit hibitflag;
          bit errorflag;
          bit rightflag;
          unsigned int second3;
          unsigned int aa;
          unsigned int bb;
          bit alarmflag;
          bit exchangeflag;
          unsigned int cc;
          unsigned int dd;
          bit okflag;
          unsigned char oka;
          unsigned char okb;
           
          void main(void)
          {
          unsigned char i,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) //function key
          {
          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) //digit key
          {
          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;
          }
          else if(funcount>1)
          {
          psbuf[funcount-2]=digitcount;
          }
          }
          else
          {
          second3=0;
          }
          while(p3_7==0);
          }
          }
          }
          else
          {
          cmpflag=0;
          for(i=0;ipslen;i++)
          {
          if(ps[i]!=psbuf[i])
          {
          hibitflag=1;
          i=pslen;
          errorflag=1;
          rightflag=0;
          cmpflag=0;
          second3=0;
          goto a;
          }
          }
          cc=0;
          errorflag=0;
          rightflag=1;
          hibitflag=0;
          a: cmpflag=0;
          }
          }
          }
           
          void t0(void) interrupt 1 using 0
          {
          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(cc1000)
          {
          okflag=1;
          }
          else if(cc2000)
          {
          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)閉