实用的LED电子密码锁_陈妃炳的空间_百度空间

用八位LED做的简单的电子密码锁,开锁成功红灯亮,失败黄灯亮。可以设6位密码,修改密码等功能。

#include "reg51.h"
#include "intrins.h"     //_nop_();延时函数用
#define uchar unsigned char
#define uint unsigned int
#define GET_OUT1 P0
#define GET_OUT2 P2
#define BIT_OUT P1
#define KEY_IO P3
unsigned long temp;
uchar data keytemp,key,temp2,temp1,a,b,c,d,e,f,a1,b1,c1,d1,e1,f1,flay=0;
uchar dis_buff[8]={0,0,0,0,0,0,0,0};
sbit LED_YEN=P1^1;
sbit LED_REN=P1^0;
bit flag_key=0;
bit queyan=0;
bit shemima=0;
uchar code tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
void Delay(uint n)
{
uchar k,j;
for(k=0;k<n;k++)
for(j=0;j<125;j++)
;
}
//////////LED动态显示/////////////////
void deplay_led(void)
{
uchar L;
uchar m=0xfb;
for(L=0;L<6;L++)
{
    BIT_OUT=0xff;
    GET_OUT1=tab[dis_buff[L]];
    GET_OUT2=tab[dis_buff[L]];
    BIT_OUT=m;
    Delay(4);
    m=(m<<1)|0x01;
    }
}
///////////////////////////////////////////
void qing_0(void) //用来清零
{
flay=0;

temp=000000;
dis_buff[0]=temp/10000000;
dis_buff[1]=(temp%10000000)/1000000;
dis_buff[2]=(temp%1000000)/100000;
dis_buff[3]=(temp%100000)/10000;
dis_buff[4]=(temp%10000)/1000;
dis_buff[5]=(temp%1000)/100;
dis_buff[6]=(temp%100)/10;
dis_buff[7]=temp%10;
}
//////////////////按键程序///////////////////
void scanpay(void)
{
uchar i,t=0xef;       //1110 1111   
KEY_IO=0x0f;
keytemp=(~KEY_IO)&0x0f;
if(keytemp!=0)                //0000 0000 ;0000 1000; 0000 0100; 0000 0010; 0000 0001;
{
Delay(1);
for(i=0;i<4;i++)
   {
   KEY_IO=t;
   keytemp=(~KEY_IO)&0x0f;
   if(keytemp!=0&flag_key==0)
    {
     flag_key=1;
     switch(keytemp)
     {
     case 0x08:key=0*4+i;break;
     case 0x04:key=1*4+i;break;
     case 0x02:key=2*4+i;break;
     case 0x01:key=3*4+i;break;
     default:break;
     }
    switch(key)
     {
     case 0:temp=1;flay+=1;break;
     case 1:temp=2;flay+=1;break;
     case 2:temp=3;flay+=1;break;
                case 3:temp=4;flay+=1;break;
                case 4:temp=5;flay+=1;break;
                case 5:temp=6;flay+=1;break;
                case 6:temp=7;flay+=1;break;
                case 7:temp=8;flay+=1;break;
                case 8:temp=9;flay+=1;break;
                case 9:temp=0;flay+=1;break;
     case 10:{shemima=1;qing_0();}break; //上密码按键
     case 11:queyan=1;break;              //解密码按键
                case 12:qing_0();break;              //xx键
     default:break;
     }
    }
   t=(t<<1)|0x01;
   }
}
   else flag_key=0;

}
//////////////////////////////////上密码
void xianshi_led1(void)
{
if(flay<=6&&shemima==0)
   {
    if(flay==1)
    {
      a=temp;
      dis_buff[5]=a;
   }
if(flay==2)
     {
          b=temp;
    dis_buff[4]=b;
      }
if(flay==3)
     {
       c=temp;
       dis_buff[3]=c;
      }
if(flay==4)
      {
        d=temp;
        dis_buff[2]=d;
    }
if(flay==5)
      {
        e=temp;
     dis_buff[1]=e;
    }
if(flay==6)
      {
        f=temp;
        dis_buff[0]=f;
       }
}
}
////////////////////////////////////////////////解密码
void xianshi_led2(void)
{
if(shemima==1)
   {
     if(flay<=6)
   {
     if(flay==1)
    {
      a1=temp;
      dis_buff[5]=a1;
   }
if(flay==2)
     {
          b1=temp;
    dis_buff[4]=b1;
      }
if(flay==3)
     {
       c1=temp;
       dis_buff[3]=c1;
      }
if(flay==4)
      {
        d1=temp;
        dis_buff[2]=d1;
    }
if(flay==5)
      {
        e1=temp;
     dis_buff[1]=e1;
    }
if(flay==6)
      {
        f1=temp;
        dis_buff[0]=f1;
       }
     }
    }
}
  
///////////////////////////////////////////////
main()
{
while(1)
{
   scanpay();
   deplay_led();
   xianshi_led1();
   xianshi_led2();
   if(queyan==1&&flay==6)
     {
     if(a==a1&&b==b1&&c==c1&&d==d1&&e==e1&&f==f1)
      {
        LED_REN=0;
      }
     else LED_YEN=0;
      }
     }
}      



郑重声明:资讯 【实用的LED电子密码锁_陈妃炳的空间_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——