• <rp id="wfxtb"><acronym id="wfxtb"></acronym></rp><em id="wfxtb"></em><dd id="wfxtb"><big id="wfxtb"><video id="wfxtb"></video></big></dd>
  • <rp id="wfxtb"></rp>

    <mark id="wfxtb"><center id="wfxtb"></center></mark>

      <rp id="wfxtb"><span id="wfxtb"><u id="wfxtb"></u></span></rp>

      <rp id="wfxtb"><object id="wfxtb"></object></rp>

      注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! 打開購物車 查看留言付款方式聯系我們
      初中電子 單片機教材一 單片機教材二
      搜索上次看見的商品或文章:
      商品名、介紹 文章名、內容
      首頁 電子入門 學單片機 免費資源 下載中心 商品列表 象棋在線 在線繪圖 加盟五一 加入收藏 設為首頁
      本站推薦:
      32. 電子密碼鎖設計
      文章長度[] 加入時間[2008/5/30] 更新時間[2025/5/13 16:22:10] 級別[0] [評論] [收藏]
       
      1.實驗任務
      根據設定好的密碼,采用二個按鍵實現密碼的輸入功能,當密碼輸入正確之后,鎖就打開,如果輸入的三次的密碼不正確,就鎖定按鍵3秒鐘,同時發現報警聲,直到沒有按鍵按下3種后,才打開按鍵鎖定功能;否則在3秒鐘內仍有按鍵按下,就重新鎖定按鍵3秒時間并報警。
      2.電路原理圖
      圖4.32.1
      3.系統板上硬件連線
      (1).            把“單片機系統”區域中的P0.0/AD0用導線連接到“音頻放大模塊”區域中的SPK IN端子上;
      (2).            把“音頻放大模塊”區域中的SPK OUT端子接喇叭和;
      (3).            把“單片機系統”區域中的P2.0/A8-P2.7/A15用8芯排線連接到“四路靜態數碼顯示”區域中的任一個ABCDEFGH端子上;
      (4).            把“單片機系統“區域中的P1.0用導線連接到“八路發光二極管模塊”區域中的L1端子上;
      (5).            把“單片機系統”區域中的P3.6/WR、P3.7/RD用導線連接到“獨立式鍵盤”區域中的SP1和SP2端子上;
      4.程序設計內容
      (1).            密碼的設定,在此程序中密碼是固定在程序存儲器ROM中,假設預設的密碼為“12345”共5位密碼。
      (2).            密碼的輸入問題:
      由于采用兩個按鍵來完成密碼的輸入,那么其中一個按鍵為功能鍵,另一個按鍵為數字鍵。在輸入過程中,首先輸入密碼的長度,接著根據密碼的長度輸入密碼的位數,直到所有長度的密碼都已經輸入完畢;或者輸入確認功能鍵之后,才能完成密碼的輸入過程。進入密碼的判斷比較處理狀態并給出相應的處理過程。
      (3).            按鍵禁止功能:初始化時,是允許按鍵輸入密碼,當有按鍵按下并開始進入按鍵識別狀態時,按鍵禁止功能被激活,但啟動的狀態在3次密碼輸入不正確的情況下發生的。
      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;i<pslen;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(cc<1000)
              {
                okflag=1;
              }
              else if(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;
                    }
                }
          }
      }
      1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。
      2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! 以上可能是本站收集或者轉載的文章,本站可能沒有文章中的元件或產品,如果您需要類似的商品請 點這里查看商品列表!
      本站協議。 版權信息。 關于我們。 本站地圖。 營業執照。 發票說明。 付款方式。 聯系方式
      深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102
      E-mail:51dz$163.com($改為@);Tel:(0755)27947428
      工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389
      91嫩草黄片动漫版