微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 基于AT89C52的电子密码锁

基于AT89C52的电子密码锁

时间:10-02 整理:3721RD 点击:

         用4*3组成0-9数字键及确认键、删除键;用8位数码管组成显示电路提示信息,当输入密码时,只显示“—”,当密码位数输入完毕按下“确定”键时,对输入的密码与设定的密码进行比较,若密码正确,则开锁,此处用LED发光二极管亮1s作为提示;若密码不正确,禁止按键输入3s,同时发出“嘀、嘀”报警声。


/*电子密码锁设计*/
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
uchar  smg[16];        //存放数字;
uchar code key[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};        //数码管位选
char num,k,x;
void display();
void key_scan();
int a,b,c,d,e,f,g,h,mima; //密码初值
sbit fmq=P3^6;        //蜂鸣器输入端
sbit led=P3^0;// 密码正确,灯亮  
void delay(uint i) //延时函数
{
   uint j;
   while(i--)
   {
            for(j=0;j<120;j++);
   }
}
void beep()          //蜂鸣器滴滴响;
{
   uint i;
   for(i=0;i<5;i++)           //蜂鸣器响五次(无源蜂鸣器)
  {
      fmq=0;
          delay(300);
          fmq=1;
          delay(300);
          P2=0xff;
          P0=0x00;
  }  
  fmq=1;
}
void key_scan()//按下一次按键K加1,X加1,将按下的数存入数组smg[];
{
            uchar temp;
         P1=0xf0;
         temp=P1;
         if(temp!=0xf0)
         {
            delay(25);
                P1=0xf0;
                temp=P1;
                if(temp!=0xf0)
                {
                   P1=0xfe;
                   temp=P1;
                   switch(temp)
                   {
                          case(0xee):P0=0x40;smg[x]=num;num=0;k++;x++;delay(200);break;
                          case(0xde):P0=0x40;smg[x]=num;num=1;k++;x++;delay(200);break;       
                          case(0xbe):P0=0x40;smg[x]=num;num=2;k++;x++;delay(200);break;
                          case(0x7e):P0=0x40;smg[x]=num;num=3;k++;x++;delay(200);break;
                          
                   }
                   P1=0xfd;
                   temp=P1;
                   switch(temp)
                   {
                      case(0xed):P0=0x40;smg[x]=num;num=4;k++;x++;delay(200);break;
                          case(0xdd):P0=0x40;smg[x]=num;num=5;k++;x++;delay(200);break;       
                          case(0xbd):P0=0x40;smg[x]=num;num=6;k++;x++;delay(200);break;
                          case(0x7d):P0=0x40;smg[x]=num;num=7;k++;x++;delay(200);break;
                   }                                               
                   P1=0xfb;
                   temp=P1;
                   switch(temp)
                   {
                      case(0xeb):P0=0x40;smg[x]=num;num=8;k++;x++;delay(200);break;
                          case(0xdb):P0=0x40;smg[x]=num;num=9;k++;x++;delay(200);break;       
                          case(0xbb):P0=0x40;   //确认键,密码正确灯亮,密码错误,蜂鸣器响
                          if((mima==1)&(k==6))
                          {
                            led=1;
                                delay(1000);
                                led=0;
                                k=0;
                          }
                          else
                          {
                             beep();
                               
                                 k=0;
                          }break;
                          case(0x7b):P0=0x40; k--;delay(200);mima=1;x--;num=smg[x]; break;//删除键按下,删除-,将上一次按下的数字赋给num
                          
                          
                   }
                  
                }
         }
}
void display()//k等于几,代表按下几次按键,显示几个-;
{
    if(k==1)
          {
             P2=key[0];
                 
               
                 if(a==num)
             {
              mima=1;
             }
         else
        {
               mima=0;
         }
                        
          }
          while(k==2)
                     {
                                    P2=key[0];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[1];
                                        delay(1);
                                        P2=0xff;
                                       
                                        if(b==num)
                                 {
                                      mima=1&mima;
                                   }
                                   else
                                   {
                                             mima=0;
                                   }
                                   key_scan();
                                 }
           while(k==3)
                     {
                                    P2=key[0];
                                       
                                        delay(1);
                                        P2=0xff;
                                        P2=key[1];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[2];
                                        delay(1);
                                        P2=0xff;
                                       
                                        if(c==num)
                                 {
                                      mima=1&mima;
                                   }
                                   else
                                   {
                                             mima=0;
                                   }
                                   key_scan();
                                 }
               
       while(k==4)
           {
                        P2=key[0];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[1];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[2];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[3];
                                        delay(1);
                                        P2=0xff;
                                       
                                        if(d==num)
                                 {
                                      mima=1&mima;
                                   }
                                   else
                                   {
                                             mima=0;
                                   }
                                   key_scan();
           }
           while(k==5)
           {
                        P2=key[0];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[1];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[2];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[3];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[4];
                                        delay(1);
                                        P2=0xff;
                                       
                                        if(e==num)
                                 {
                                      mima=1&mima;
                                   }
                                   else
                                   {
                                             mima=0;
                                   }
                                   key_scan();
           }
               while(k>=6)
           {
                       P2=key[0];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[1];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[2];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[3];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[4];
                                        delay(1);
                                        P2=0xff;
                                        P2=key[5];
                                        delay(1);
                                        P2=0xff;
                                        k=6;
                                        if(f==num)
                                 {
                                      mima=1&mima;
                                   }
                                   else
                                   {
                                             mima=0;
                                   }
                                  
                                   key_scan();
                                  
           }
          
           while(k<=0)
           {
             P2=0xff;
                 P0=0x00;
                 k=0;
                 mima=0;
                 key_scan();
           }
}
void main()
{
   a=6;b=5;c=4;d=3;e=2;f=1;
   k=0;
   led=0;
   fmq=1;
   x=0;
   while(1)
   {
         key_scan();
          display();
          
   }
}

不错,很实用。

这个真是大好的小编呀!

谢谢小编热心分享,我有同学正用得到

谢谢小编分享,学习学习

学习了~~~~~~~~~~~~~~~

支持一个!

不错,很实用。

吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱吱

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top