找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4529|回复: 12
收起左侧

密码锁

  [复制链接]
ID:77698 发表于 2015-5-25 22:34 | 显示全部楼层 |阅读模式
/********************************************************************************

                    电子密码锁主函数

*******************************************************************************/

#include<reg51.h>
#include<12864.h>
#include<keypad.h>
#include<24C01.h>

#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^5;
sbit LED2=P1^6;
sbit INIT=P2^2;
sbit SOUND=P1^7;

uchar idata key[6]={0,0,0,0,0,0};
uchar idata iic[6]={0,1,2,3,4,5};

void press(uchar *s)
{
           uchar dat;
//**************************************************
       P3=0xf0;                                                                //保存第一位密码
           while(P3==0xf0);
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
                         Left();
                         star_12864(star,0x05,16);
             }
           s++;                  
//**************************************************
           P3=0xf0;                                                          //保存第二位密码
           while(P3==0xf0);                                                 
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
                         Left();
                         star_12864(star,0x05,24);
                  }
           s++;       
//**************************************************
           P3=0xf0;                                                          //保存第三位密码
           while(P3==0xf0);                                                 
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
                         Left();
                         star_12864(star,0x05,32);
                  }
           s++;       
//**************************************************
           P3=0xf0;                                                          //保存第四位密码
           while(P3==0xf0);                                                 
           dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
                         Left();
                         star_12864(star,0x05,40);
                  }
           s++;       
//**************************************************
           P3=0xf0;                                                          //保存第五位密码
           while(P3==0xf0);                                                 
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
                         Left();
                         star_12864(star,0x05,48);
                  }
           s++;       
//**************************************************
           P3=0xf0;                                                          //保存第六位密码
           while(P3==0xf0);                                                 
       dat=key_scan();
           if((dat!=0x0a)&&(dat!=0x0b))
         {   *s=dat;
                         Left();
                         star_12864(star,0x05,56);
                  }
//**************************************************
           do{P3=0xf0;                                                        //键入Enter键盘继续执行下面语句,否则等待
              while(P3==0xf0);                                                 
          dat=key_scan();
              }while(dat!=0x0b);
}

void Delay10ms(void)           //延时10ms
{
        uint i,j,k;
        for(i=5;i>0;i--)
        for(j=4;j>0;j--)
        for(k=248;k>0;k--);

}

void main()
{
      uchar dat;
      uchar i=0,j=0,k;
      uchar x;
          LED1=1;
          LED2=1;
          SOUND=0;
          INIT=1;
      if(INIT==0)                   //密码初始化
      {
             x=SendB(iic,0x50,6);
                 Delay10ms();
      }             //首先从IIC器件中读出密码以供下面输入密码进行比较
      x=ReadB(iic,0x50,6);
      Init_12864();
          for(i=0;i<150;i++){Delay10ms();}
//**********************************若密码不正确,循环执行do{}while()********************************************
do{
             LED1=1;
             System();                  //显示:"请输入密码"字幕  
             press(key);
                 if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5])) //密码比较,若密码正确责进入系统,若密码不正确则显示密码错误,重新输入密码
         {
                    true();
                    do
                    {
                       P3=0xf0;                                                        //键入1或2继续执行下面语句,否则等待
                   while(P3==0xf0);                                                 
               dat=key_scan();
                 }while(dat!=0x01&&dat!=0x02);
                    if(dat==1)                                                       //开锁
                    {
                        LED1=0;
                                unlock();
                            for(i=0;i<100;i++){Delay10ms();}
                    continue;
                     }
                    if(dat==2)                                                        //修改密码
                   {
                       do{
                              System();
                                  press(key);
                                  again();
                                  press(iic);
                                      if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5]))
                                      {
                                          succeed();                                //修改密码成功
                                                  for(i=0;i<100;i++){Delay10ms();}
                                      Delay10ms();
                              x=SendB(iic,0x50,6);
                                      Delay10ms();       
                          x=ReadB(iic,0x50,6);break;
                                       }
                                      else                             //修改密码不成功,重新修改
                                          {
                                              repeat();
                                                  for(i=0;i<100;i++){Delay10ms();}
                                           }
                                  }while(1);   
                    }
                 
                 }
                else                                                                           //密码不正确,重新输入密码
                {
                    j++;
                        if(j==3)
                        {
                           for(i=0;i<8;i++)
                           {
                              LED2=0;
                                  for(k=0;k<5;k++){Delay10ms();}
                                  LED2=1;
                                  for(k=0;k<5;k++){Delay10ms();}
                                }
                                j=0;
                         }
                        error();
                        for(i=0;i<50;i++){Delay10ms();}
                 }
}while(1);         

                    
          
}


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

ID:80284 发表于 2015-6-8 16:15 | 显示全部楼层
密码锁挺不错的 ,在这一方面可以学习
回复

使用道具 举报

ID:82937 发表于 2015-6-17 12:19 | 显示全部楼层
要用什么模块啊
回复

使用道具 举报

ID:113580 发表于 2016-4-11 20:56 | 显示全部楼层
赞赞赞赞赞赞
回复

使用道具 举报

ID:121746 发表于 2016-5-18 16:56 | 显示全部楼层
不是c语言怎么做
回复

使用道具 举报

ID:123712 发表于 2016-7-22 09:39 | 显示全部楼层
谢谢楼主分享资料,学习中
回复

使用道具 举报

ID:66032 发表于 2016-7-23 08:15 | 显示全部楼层
现在的密码锁已不再是简单的指纹识别和密码设置, 要加彩色LCD, Zigbee, WIFI和手机连接,设置IP和网关, 当密码丢失和忘记可以通过手机重新找回密码和设置密码。很简单的例子, 你的房子租给别人住了一段时间, 别人不租了, 以前的办法是更换锁芯, 现在的办法只需重置密码。
回复

使用道具 举报

ID:136393 发表于 2016-10-24 21:32 | 显示全部楼层
有仿真吗
回复

使用道具 举报

ID:144301 发表于 2016-10-24 21:59 | 显示全部楼层
不知道这个密码怎么连续输入
回复

使用道具 举报

ID:144301 发表于 2016-10-24 21:59 | 显示全部楼层
不知道这个密码怎么连续输入
回复

使用道具 举报

ID:145054 发表于 2016-10-29 13:39 | 显示全部楼层
用protus仿真仿真
回复

使用道具 举报

ID:168327 发表于 2017-3-5 16:13 | 显示全部楼层
啦啦啦啦啦啦啦啦啦啦啦啦
回复

使用道具 举报

ID:171085 发表于 2017-3-16 21:23 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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