久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3379|回復: 4
打印 上一主題 下一主題
收起左側

電子密碼鎖設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:166437 發表于 2017-2-25 09:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1.實驗任務
根據設定好的密碼,采用二個按鍵實現密碼的輸入功能,當密碼輸入正確之后,鎖就打開,如果輸入的三次的密碼不正確,就鎖定按鍵3秒鐘,同時發現報警聲,直到沒有按鍵按下3種后,才打開按鍵鎖定功能;否則在3秒鐘內仍有按鍵按下,就重新鎖定按鍵3秒時間并報警。
2.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) //前面有按下功能鍵1次和按數字鍵1次,來完成密碼長度的輸入
{
                          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!=psbuf)
                  {
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; //LED2發光二極管閃
       }
     second3++;
     if(second3==6400) //4次后(8次變換),自動復位到按ENTER前的狀態
       {
         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;               //LED2發光二極管亮
     cc++;
     if(cc<1000)
       {
         okflag=1;
       }
       else if(cc<2000)
         {
           okflag=0;
         }
         else             //自動復位到按ENTER前的狀態
           {
              errorflag=0;
              rightflag=0;
              hibitflag=0;
              cmpflag=0;
              P0_1=1;            //LED2發光二極管滅
              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;
              }
         }
    }
}
                                                                                                                        
                              
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:185637 發表于 2017-4-2 18:32 | 只看該作者

 好東西  值得擁有
回復

使用道具 舉報

板凳
ID:251766 發表于 2017-11-21 14:42 | 只看該作者
好東西哈,謝謝分享
回復

使用道具 舉報

地板
ID:259267 發表于 2017-12-11 20:30 | 只看該作者
東西哈,謝謝分享
回復

使用道具 舉報

5#
ID:264121 發表于 2017-12-20 10:44 | 只看該作者
kooklee 發表于 2017-4-2 18:32
**** 作者被禁止或刪除 內容自動屏蔽 ****

來學習學習
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 最新高清无码专区 | 精品福利在线视频 | 午夜精品在线观看 | 懂色av一区二区三区在线播放 | 亚洲综合色婷婷 | 日韩在线视频播放 | 黄视频国产 | 亚洲免费高清 | 欧美成人一区二区三区 | 中文字幕在线一区二区三区 | 懂色av色香蕉一区二区蜜桃 | 精品欧美 | 欧美在线免费 | 色综合99 | 亚洲视频一区在线 | 波多野结衣电影一区 | 精品国产91亚洲一区二区三区www | 成人做爰69片免费观看 | 国产在线二区 | 毛片一区二区三区 | 在线a视频网站 | 7777精品伊人久久精品影视 | 亚洲一区二区免费看 | 亚洲成av人片在线观看 | 亚洲国产精品久久久 | 99国产精品久久久久久久 | 亚洲国产欧美日韩 | 精品99久久久久久 | 黄色精品 | 在线一级片 | 亚洲一区二区在线播放 | 99久久久国产精品免费消防器 | 日韩成人免费视频 | 欧美一区二区成人 | 日韩视频 中文字幕 | 午夜爽爽男女免费观看hd | 国产视频一区二区 | 97国产精品 | 精品欧美一区二区三区免费观看 | 日本一区二区在线视频 | 欧美精品久久久 |