找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1274|回复: 0
打印 上一主题 下一主题
收起左侧

多功能密码锁

[复制链接]
跳转到指定楼层
楼主
ID:270029 发表于 2018-1-3 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

#define GPIO_KEY P2

sbit LCD_E=P3^7;
sbit LCD_RW=P3^6;                                                               
sbit LCD_RS=P3^5;

sbit beep=P3^4;

uchar table[]="00:00:00";
char keyword1[]={1,2,3,4,5,6};
char table1[5]="pass!";
char table2[6]="wrong!";
char in[6]={-6,-6,-6,-6,-6,-6};
uchar num,miao=0,fen=0,shi=0,x,y,n1=0,n2=0,cmiao=0,cshi=0,cfen=0,i,ge1=0,shi1=0,bai1=0,qian1=0;
char KeyValue=-1,Key1=0,Key2=0;
int s=0;
char flag1=-1,flag2=-1;
char keyword;
uchar i=0,j,a=0;
char flag_pass=-1,flag_beep=-1,c;
void delay5ms();   
void write_com(uchar com);
void write_data(uchar dat);
void display(uchar b,uchar dat);
void init1();
void init2();
void Keyscan();
void input();
void show1();
void show2();
char store();
void unlock();
void delay2s();
void main()
{

     init1();
     beep=1;
   while(1)
        {

                 if(flag1==1)
                 {
                                                                 if(KeyValue==1)
                                                {
                                                                TR0=0;
                                                                a++;
                                                                KeyValue=-1;

                                                                if(a==4)
                                                                {
                                                                        TR0=1;
                                                                        a=0;
                                                                }

                                                 }
                                                 if(a!=0)
                                                 {
                                                         if(KeyValue==2)
                                                                {
                                                                    KeyValue=-1;
                                                                                switch(a)
                                                                                {
                                                                                        case 1:miao=miao+1;display(0x86,miao);break;
                                                                                        case 2:fen=fen+1;display(0x83,fen);  break;
                                                                                        case 3:shi=shi+1;display(0x80,shi);        break;                                                                                
                                                                                }
                                                                }
                                                                 if(KeyValue==3)
                                                                 {
                                                                   KeyValue=-1;
                                                                         switch(a)
                                                                         {
                                                                                                case 1:miao=miao-1;display(0x86,miao);break;
                                                                                                case 2:fen=fen-1;display(0x83,fen);  break;
                                                                                                case 3:shi=shi-1;display(0x80,shi);        break;
                                                                         }
                                                                 }                        
                                                        }
                 }
     Keyscan();
     input();
                unlock();
     if(flag_beep==1)
                 {
                 beep=0;
                 }
                 else
                 {
                 beep=1;
                 }
  }
}
void delay5ms()   //?? 0us
{
    uchar a,b;
    for(b=19;b>0;b--)
        for(a=130;a>0;a--);
}


void write_com(uchar com)
{
   LCD_E=0;
   LCD_RW= 0 ;
   LCD_RS=0;
   P1=com;

   delay5ms();
   LCD_E=1;
   delay5ms();
   LCD_E=0;
}
void write_data(uchar dat)
{
    LCD_E=0;
   LCD_RW=0;
   LCD_RS=1;
   P1=dat;

   delay5ms();
   LCD_E=1;
   delay5ms();
   LCD_E=0;
}

void init1()
{
   write_com(0x38);
   write_com(0x0c);
   write_com(0x06);
   write_com(0x01);
}
void init2()
{
   write_com(0x80);
        for(num=0;num<8;num++)
        {
         write_data(table[num]);
        }
                write_com(0xc0);
                for(i=0;i<8;i++)
                write_data(table[i]);
  TMOD=0X11;

        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;

  ET0=1;//????0??
  TR0=1;//?????0
  ET1=1;//????0??
  TR1=1;
  EA=1;




}
void display(uchar b,uchar dat)
{
   uchar shi,ge;
   shi=dat/10;
   ge=dat%10;
   write_com(b);
        delay5ms();
   write_data(0x30+shi);
   write_data(0x30+ge);

}


void Keyscan()
{
        uchar i;
        GPIO_KEY=0X0f;
        if(GPIO_KEY!=0X0f)
        {
                delay5ms();
                if(GPIO_KEY!=0X0f)
                {

                                switch(GPIO_KEY)
                                {
                                        case 0x07:KeyValue=12; break ;
                                        case 0x0b:KeyValue=8;        break ;
                                        case 0x0d:KeyValue=4;        break ;               
                                        case 0x0e:KeyValue=0;        break ;
                                }

                                GPIO_KEY=0XF0;
                                if(GPIO_KEY!=0XF0)
                                {
                                 delay5ms();
                                 if(GPIO_KEY!=0XF0)
                                                         switch(GPIO_KEY)
                                                         {
                                                                 case 0x70:KeyValue=KeyValue+1;break;
                                                                 case 0xb0:KeyValue=KeyValue+2;break;
                                                                 case 0xd0:KeyValue=KeyValue+3;break;
                                                                 case 0xe0:KeyValue=KeyValue+4;break;
                                                         }

                                                        while((i<50)&&(GPIO_KEY!=0XF0))
                                                                {
                                                                delay5ms();
                                                                        i++;
                                                                }
                                                                i=0;

                          }
                }
  }

}




void input()
{

        if(flag_pass==1)
                {
                        if(flag1==1)
                        {

                                        if(KeyValue==5)
                                        {
                                                KeyValue=-1;
                                                Key2++;
                                                if(Key2==4)
                                                        Key2=0;
                                        }               
                                        if(Key2!=0)
                                        {
                                                if(KeyValue==6)
                                                {
                                                        KeyValue=-1;
                                                         switch(Key2)
                                                         {
                                                                 case 1:cmiao=cmiao+1;display(0xc6,cmiao);break;
                                                                 case 2:cfen=cfen+1;display(0xc3,cfen);break;
                                                                 case 3:cshi=cshi+1;display(0xc0,cshi);break;

                                                         }
                                                }
                                                if(KeyValue==7)
                                                {
                                                        KeyValue=-1;
                                                         switch(Key2)
                                                         {
                                                                 case 1:cmiao=cmiao-1;display(0xc6,cmiao);break;
                                                                 case 2:cfen=cfen-1;display(0xc3,cfen);break;
                                                                 case 3:cshi=cshi-1;display(0xc0,cshi);break;
                                                         }         
                                                 }
                                        }
                                        if(KeyValue==9)
                                        {
                                                KeyValue=-1;
                                                s++;
                                        }
                                                if(KeyValue==10)
                                        {
                                                KeyValue=-1;
                                                s--;
                                        }        
                                                if(KeyValue==13)
                                                {
                                                        flag2=1;
                                                }
                                                if(KeyValue==14)
                                                {
                                                        flag2=2;        
                                                }
                        if(miao==cmiao&&fen==cfen&&shi==cshi&&Key2==0)
                 {
                         flag_beep=1;
       c=KeyValue;                        
                 }
                 if(c!=KeyValue)
                 {
                 flag_beep=-1;
                 }

                 show1();
                 show2();

        }
                        if(KeyValue==4)
                        {
                                KeyValue=-1;
                                init1();
                                init2();

                                flag1=1;
                        }
                                     if(KeyValue==8)
                                {
                                        KeyValue=-1;
                                        TR1=1;
                                }
                                        if(KeyValue==12)
                                {
                                        KeyValue=-1;
                                        TR1=0;
                                }        
  }
}
void unlock()
{
        uchar s1,m;
  char flag[6]={-1,-1,-1,-1,-1,-1};
    if(flag_pass==-1)
                {
                                if(KeyValue==2&&flag!=1)
                        {
                                for(s1=0;s1<6;s1++)
                                {
                                 if(in[s1]==keyword1[s1])
                                        flag[s1]=1;
                                 else
                                        flag[s1]=0;
                                }        

                                if(flag[0]==1&&flag[1]==1&&flag[2]==1&&flag[3]==1&&flag[4]==1&&flag[5]==1)
                                {
                                        flag_pass=1;
                                        write_com(0x80);
                                        for(m=0;m<5;m++)
                                        write_data(table1[m]);
                                }                                                        
                                else
                                {
                                        write_com(0x80);
                                        flag_pass=-1;
                                        for(m=0;m<6;m++)
                                        write_data(table2[m]);                                                
                                }
                        }

    if(KeyValue!=-1&&flag1!=1)
                 {
                          if(KeyValue!=1)
                                {
                                in[i]=store();
                                i++;
                          KeyValue=-1;
                                }
                                if(KeyValue==1)
                                {
                                i--;
                                in[i]=-6;
                                KeyValue=-1;
                                }
    }

                 write_com(0xc0);
             for(j=0;j<6;j++)
                 {
                         write_data(in[j]+0x30);
           }
         }
                else ;

}

void show1()
{

        if(n1>19) //????????
  {
   n1=0;
   miao++;
       if(miao>59)
                        {
                         miao=0;
                         fen++;
                                        if(fen>59)
                                         {
                                         fen=0;
                                         shi++;
                                                 if(shi>23)
                                                 {
                                                 shi=0;
                                                 }
                                         display(0x80,shi);
                                         }
                                         display(0x83,fen);
                        }
                        display(0x86,miao);
        }
}
void show2()
{

                if(n2>19)
                {
                        if(flag2==1)
                        {
                                        s++;
                        }
                        if(flag2==2)
                        {
                                        s--;                                       
                        }               
                             n2=0;               

                }
                 if(s<0)        
      s=0;        
                        qian1=s/1000;
                        bai1=s%1000/100;
                        shi1=s%100/10;
                        ge1=s%10;
                        write_com(0xc9);
                         write_data(qian1+0x30);
                        write_com(0xca);

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表