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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 33. 4×4鍵盤及8位數(shù)碼管顯示構(gòu)成的電子密碼鎖

          33. 4×4鍵盤及8位數(shù)碼管顯示構(gòu)成的電子密碼鎖

          作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          1.實驗任務(wù)
          用4×4組成0-9數(shù)字鍵及確認鍵。
          用8位數(shù)碼管組成顯示電路提示信息,當輸入密碼時,只顯示“8.”,當密碼位數(shù)輸入完畢按下確認鍵時,對輸入的密碼與設(shè)定的密碼進行比較,若密碼正確,則門開,此處用LED發(fā)光二極管亮一秒鐘做為提示,同時發(fā)出“叮咚”聲;若密碼不正確,禁止按鍵輸入3秒,同時發(fā)出“嘀、嘀”報警聲;若在3秒之內(nèi)仍有按鍵按下,則禁止按鍵輸入3秒被重新禁止。
          2.電路原理

          圖4.33.1
          3.系統(tǒng)板上硬件連線
          (1).把“單片機系統(tǒng)”區(qū)域中的P0.0-P0.7用8芯排線連接到“動態(tài)數(shù)碼顯示”區(qū)域中的ABCDEFGH端子上。
          (2).把“單片機系統(tǒng)“區(qū)域中的P2.0-P2.7用8芯排線連接到“動態(tài)數(shù)碼顯示”區(qū)域中的S1S2S3S4S5S6S7S8端子上。
          (3).把“單片機系統(tǒng)”區(qū)域中的P3.0-P3.7用8芯排線連接到“4×4行列式鍵盤”區(qū)域中的R1R2R3R4C1C2C3C4端子上。
          (4).把“單片機系統(tǒng)”區(qū)域中的P1.0用導線連接到“八路發(fā)光二極管模塊”區(qū)域中的L2端子上。
          (5).把“單片機系統(tǒng)”區(qū)域中的P1.7用導線連接到“音頻放大模塊”區(qū)域中的SPKIN端子上。
          (6).把“音頻放大模塊”區(qū)域中的SPKOUT接到喇叭上。
          4.程序設(shè)計內(nèi)容
          (1).4×4行列式鍵盤識別技術(shù):有關(guān)這方面內(nèi)容前面已經(jīng)討論過,這里不再重復。
          (2).8位數(shù)碼顯示,初始化時,顯示“P”,接著輸入最大6位數(shù)的密碼,當密碼輸入完后,按下確認鍵,進行密碼比較,然后給出相應(yīng)的信息。在輸入密碼過程中,顯示器只顯示“8.”。當數(shù)字輸入超過6個時,給出報警信息。在密碼輸入過程中,若輸入錯誤,可以利用“DEL”鍵刪除剛才輸入的錯誤的數(shù)字。
          (3).4×4行列式鍵盤的按鍵功能分布圖如圖4.33.2所示:
          7

          8

          9


          4

          5

          6


          1

          2

          3

          Del
          0



          Enter








          圖4.33.2

          5.C語言源程序
          #include
          unsignedcharps[]={1,2,3,4,5};
          unsignedcharcodedispbit[]={0xfe,0xfd,0xfb,0xf7,
          0xef,0xdf,0xbf,0x7f};
          unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
          0x6d,0x7d,0x07,0x7f,0x6f,
          0x77,0x7c,0x39,0x5e,0x79,0x71,
          0x00,0x40,0x73,0xff};
          unsignedchardispbuf[8]={18,16,16,16,16,16,16,16};
          unsignedchardispcount;
          unsignedcharflashcount;
          unsignedchartemp;
          unsignedcharkey;
          unsignedcharkeycount;
          unsignedcharpslen=5;
          unsignedchargetps[6];
          bitkeyoverflag;
          biterrorflag;
          bitrightflag;
          unsignedintsecond3;
          unsignedintaa,bb;
          unsignedintcc;
          bitokflag;
          bitalarmflag;
          bithibitflag;
          unsignedcharoka,okb;
          voidmain(void)
          {
          unsignedchari,j;
          TMOD=0x01;
          TH0=(65536-500)/256;
          TL0=(65536-500)%256;
          TR0=1;
          ET0=1;
          EA=1;
          while(1)
          {
          P3=0xff;
          P3_4=0;
          temp=P3;
          temp=temp&0x0f;
          if(temp!=0x0f)
          {
          for(i=10;i>0;i--)
          for(j=248;j>0;j--);
          temp=P3;
          temp=temp&0x0f;
          if(temp!=0x0f)
          {
          temp=P3;
          temp=temp&0x0f;
          switch(temp)
          {
          case0x0e:
          key=7;
          break;
          case0x0d:
          key=8;
          break;
          case0x0b:
          key=9;
          break;
          case0x07:
          key=10;
          break;
          }
          temp=P3;
          P1_1=~P1_1;
          if((key>=0)&&(key<10))
          {
          if(keycount<6)
          {
          getps[keycount]=key;
          dispbuf[keycount+2]=19;
          }
          keycount++;
          if(keycount==6)
          {
          keycount=6;

          }
          elseif(keycount>6)
          {
          keycount=6;
          keyoverflag=1;//keyoverflow
          }
          }
          elseif(key==12)//deletekey
          {
          if(keycount>0)
          {
          keycount--;
          getps[keycount]=0;
          dispbuf[keycount+2]=16;
          }
          else
          {
          keyoverflag=1;
          }
          }
          elseif(key==15)//enterkey
          {
          if(keycount!=pslen)
          {
          errorflag=1;
          rightflag=0;
          second3=0;
          }
          else
          {
          for(i=0;i{
          if(getps!=ps)
          {
          i=keycount;
          errorflag=1;
          rightflag=0;
          second3=0;
          gotoa;
          }
          }
          errorflag=0;
          rightflag=1;
          a:i=keycount;
          }
          }
          temp=temp&0x0f;
          while(temp!=0x0f)
          {
          temp=P3;
          temp=temp&0x0f;
          }
          keyoverflag=0;//?????????
          }
          }
          P3=0xff;
          P3_5=0;
          temp=P3;
          temp=temp&0x0f;
          if(temp!=0x0f)
          {
          for(i=10;i>0;i--)
          for(j=248;j>0;j--);
          temp=P3;
          temp=temp&0x0f;
          if(temp!=0x0f)
          {
          temp=P3;
          temp=temp&0x0f;
          switch(temp)
          {
          case0x0e:
          key=4;
          break;
          case0x0d:
          key=5;
          break;
          case0x0b:
          key=6;
          break;
          case0x07:
          key=11;
          break;
          }
          temp=P3;
          P1_1=~P1_1;
          if((key>=0)&&(key<10))
          {
          if(keycount<6)
          {
          getps[keycount]=key;
          dispbuf[keycount+2]=19;
          }
          keycount++;
          if(keycount==6)
          {
          keycount=6;
          }
          elseif(keycount>6)
          {
          keycount=6;
          keyoverflag=1;//keyoverflow
          }
          }
          elseif(key==12)//deletekey
          {
          if(keycount>0)
          {
          keycount--;
          getps[keycount]=0;
          dispbuf[keycount+2]=16;
          }
          else
          {
          keyoverflag=1;
          }
          }
          elseif(key==15)//enterkey
          {
          if(keycount!=pslen)
          {
          errorflag=1;
          rightflag=0;
          second3=0;
          }
          else
          {
          for(i=0;i{
          if(getps!=ps)
          {
          i=keycount;
          errorflag=1;
          rightflag=0;
          second3=0;
          gotoa4;
          }
          }
          errorflag=0;
          rightflag=1;
          a4:i=keycount;
          }
          }
          temp=temp&0x0f;
          while(temp!=0x0f)
          {
          temp=P3;
          temp=temp&0x0f;
          }
          keyoverflag=0;//?????????
          }
          }

          P3=0xff;
          P3_6=0;
          temp=P3;
          temp=temp&0x0f;
          if(temp!=0x0f)
          {
          for(i=10;i>0;i--)
          for(j=248;j>0;j--);
          temp=P3;
          temp=temp&0x0f;
          if(temp!=0x0f)
          {
          temp=P3;
          temp=temp&0x0f;
          switch(temp)
          {
          case0x0e:
          key=1;
          break;
          case0x0d:
          key=2;
          break;
          case0x0b:
          key=3;
          break;
          case0x07:
          key=12;
          break;
          }
          temp=P3;
          P1_1=~P1_1;
          if((key>=0)&&(key<10))
          {
          if(keycount<6)
          {
          getps[keycount]=key;
          dispbuf[keycount+2]=19;
          }
          keycount++;
          if(keycount==6)
          {
          keycount=6;
          }
          elseif(keycount>6)
          {
          keycount=6;
          keyoverflag=1;//keyoverflow
          }
          }
          elseif(key==12)//deletekey
          {
          if(keycount>0)
          {
          keycount--;
          getps[keycount]=0;
          dispbuf[keycount+2]=16;
          }
          else
          {
          keyoverflag=1;
          }
          }
          elseif(key==15)//enterkey
          {
          if(keycount!=pslen)
          {
          errorflag=1;
          rightflag=0;
          second3=0;
          }
          else
          {
          for(i=0;i{
          if(getps!=ps)
          {
          i=keycount;
          errorflag=1;
          rightflag=0;
          second3=0;
          gotoa3;
          }
          }
          errorflag=0;
          rightflag=1;
          a3:i=keycount;
          }
          }
          temp=temp&0x0f;
          while(temp!=0x0f)
          {
          temp=P3;
          temp=temp&0x0f;
          }
          keyoverflag=0;//?????????
          }
          }
          P3=0xff;
          P3_7=0;
          temp=P3;
          temp=temp&0x0f;
          if(temp!=0x0f)
          {
          for(i=10;i>0;i--)
          for(j=248;j>0;j--);
          temp=P3;
          temp=temp&0x0f;
          if(temp!=0x0f)
          {
          temp=P3;
          temp=temp&0x0f;
          switch(temp)
          {
          case0x0e:
          key=0;
          break;
          case0x0d:
          key=13;
          break;
          case0x0b:
          key=14;
          break;
          case0x07:
          key=15;
          break;
          }
          temp=P3;
          P1_1=~P1_1;
          if((key>=0)&&(key<10))
          {
          if(keycount<6)
          {
          getps[keycount]=key;
          dispbuf[keycount+2]=19;
          }
          keycount++;
          if(keycount==6)
          {
          keycount=6;
          }
          elseif(keycount>6)
          {
          keycount=6;
          keyoverflag=1;//keyoverflow
          }
          }
          elseif(key==12)//deletekey
          {
          if(keycount>0)
          {
          keycount--;
          getps[keycount]=0;
          dispbuf[keycount+2]=16;
          }
          else
          {
          keyoverflag=1;
          }
          }
          elseif(key==15)//enterkey
          {
          if(keycount!=pslen)
          {
          errorflag=1;
          rightflag=0;
          second3=0;
          }
          else
          {
          for(i=0;i{
          if(getps!=ps)
          {
          i=keycount;
          errorflag=1;
          rightflag=0;
          second3=0;
          gotoa2;
          }
          }
          errorflag=0;
          rightflag=1;
          a2:i=keycount;
          }
          }
          temp=temp&0x0f;
          while(temp!=0x0f)
          {
          temp=P3;
          temp=temp&0x0f;
          }
          keyoverflag=0;//?????????
          }
          }

          }
          }
          voidt0(void)interrupt1using0
          {
          TH0=(65536-500)/256;
          TL0=(65536-500)%256;
          flashcount++;
          if(flashcount==8)
          {
          flashcount=0;
          P0=dispcode[dispbuf[dispcount]];
          P2=dispbit[dispcount];
          dispcount++;
          if(dispcount==8)
          {
          dispcount=0;
          }
          }
          if((errorflag==1)&&(rightflag==0))
          {
          bb++;
          if(bb==800)
          {
          bb=0;
          alarmflag=~alarmflag;
          }
          if(alarmflag==1)//soundalarmsignal
          {
          P1_7=~P1_7;
          }
          aa++;
          if(aa==800)//lightalarmsignal
          {
          aa=0;
          P1_0=~P1_0;
          }
          second3++;
          if(second3==6400)
          {
          second3=0;
          errorflag=0;
          rightflag=0;
          alarmflag=0;
          bb=0;
          aa=0;
          }
          }
          elseif((errorflag==0)&&(rightflag==1))
          {
          P1_0=0;
          cc++;
          if(cc<1000)
          {
          okflag=1;
          }
          elseif(cc<2000)
          {
          okflag=0;
          }
          else
          {
          errorflag=0;
          rightflag=0;
          P1_7=1;
          cc=0;
          oka=0;
          okb=0;
          okflag=0;
          P1_0=1;
          }
          if(okflag==1)
          {
          oka++;
          if(oka==2)
          {
          oka=0;
          P1_7=~P1_7;
          }
          }
          else
          {
          okb++;
          if(okb==3)
          {
          okb=0;
          P1_7=~P1_7;
          }
          }
          }
          if(keyoverflag==1)
          {
          P1_7=~P1_7;
          }
          }


          評論


          相關(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); })();