基于51单片机的射频密码锁

该设计详述了一款使用STC89C52单片机的电子密码锁系统,包括硬件电路如液晶显示、矩阵按键、继电器、射频IC卡和蜂鸣器等模块,以及软件程序设计,如密码处理和用户交互功能。系统提供星号隐藏密码输入、错误提示、多次尝试锁定、密码修改和RFID解锁等功能,增强了安全性与用户体验。
摘要由CSDN通过智能技术生成

一.硬件方案

        本设计以STC89C52为主控芯片的单片机密码锁,其硬件部分由单片机主控器电路,液晶显示电路, 矩阵按键电路,继电器驱动电路,射频IC卡电路,蜂鸣器报警电路组成;软件部分由程序主函数,各硬件模块初始化函数,显示屏驱动函数,4*4矩阵按键处理函数,EEPROM存储函数组成。整体通过识别用户输入的密码实现密码锁的。

二.设计功能

(1)在用户输入密码时,在显示屏不是显示实际密码,均采用*号显示;

(2)设计开锁密码位六位密码的电子密码锁;

(3)当密码输入正确时,系统开锁,显示屏显示“OPEN”;当密码输入错误时,系统不开锁,显示屏显示“ERROR”,蜂鸣器进行鸣响三次提示;

(4)当用户三次输入密码错误时,蜂鸣器报警,系统进入锁定状态,用户无法再输入密码。;

(5)4*4的矩阵按键功能为:0-9的数字键,A、B、C、D的功能键,和*、#按键;

(6)用户可对密码进行修改(仅且支持6位数密码),修改密码之前必须再次输入密码,当确认二次新密码正确时,修改密码成功;如果两次新密码不一致,修改密码不成功。当修改密码成功后,单片机将覆盖EEPROM的旧密码。

(7)输入正确的密码继电器闭合,可以驱动电子锁通断电;

(8)支持RFID解锁,可先对IC卡进行注册、删除等操作;注册成功后,可使用IC卡进行解锁。

三.设计原理图

       原理图主要采用AD软件进行设计,如图:

四.程序设计

    主程序源码如下:

//==============================主函数===============================
void main()
{
   unsigned char KEY,NUM;
  unsigned char i,j;
   P1=0xFF; 
  EA=1;
  TMOD=0x01;
  IT1=1;//下降沿有效
  EX1=1;//外部中断1开
     
  TH0=0;//T0赋初值
  TL0=0;
  TR0=1;//t0开始计时
   TL1=0x3c;
   TH1=0xb0;
   ET1=1;  
   TR1=0;
   Delay400Ms();   //启动等待,等LCM讲入工作状态
   lcd_init();   //LCD初始化
  write_1602com(yi);//日历显示固定符号从第一行第0个位置之后开始显示
  init_rc522();
  init_eeprom();
  read_eeprom();
  for(i=0;i<16;i++)
  {
    write_1602dat(name[i]);//向液晶屏写日历显示的固定符号部分
  }
  write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示
  for(i=0;i<16;i++)
  {
    write_1602dat(start_line[i]);//写显示时间固定符号,两个冒号
  }
  write_1602com(er+9);  //设置光标位置
  write_1602com(0x0f);  //设置光标为闪烁
   Delay5Ms(); //延时片刻(可不要)

   N=0;                            //初始化数据输入位数
   while(1)
   {
     
    ctrl();
    if(key_disable==1)
      Alam_KeyUnable();
    else
      ALAM=1;                //关报警

    KEY=keynum();
    if(KEY!=0||IrOK==1)
    {  
      if(key_disable==1)
      {
        second=0;
      }
      else
      {
        NUM=coding(Im[2],KEY);
        {
          switch(NUM)
          {
            case ('A'): if(chushihua==1)
                        {
                         current_id++;
                        if(current_id>5)
                   current_id=0; 
                   }          break;
            case ('B'):  if(chushihua==1)
                         write_eeprom_jj(current_id)  ;               break;
            case ('C'): if(chushihua==1)
                         write_eeprom_j(current_id)  ;           break;
            case ('D'): chushihua=0;ResetPassword();    break;      //重新设置密码
            case ('*'): chushihua=0;Cancel();        break;      //取消当前输入
            case ('#'): chushihua=0; Ensure();         break;     //确认键,
            default: 
            {  
                chushihua=0;
              //DisplayListChar(0,1,Input);
              write_1602com(er);
              for(i=0;i<16;i++)
              {
                write_1602dat(Input[i]);
              }
                operation=0;
              if(N<6)                             //当输入的密码少于6位时,接受输入并保存,大于6位时则无效。
              {  
                OneAlam();                //按键提示音            
                //DisplayOneChar(6+N,1,'*');
                 for(j=0;j<=N;j++)
                {
                  write_1602com(er+6+j);
                  write_1602dat('*');
                }
                InputData[N]=NUM;
                N++;
              }
              else                    //输入数据位数大于6后,忽略输入
              {
                N=6;
                 break;
              }
            }
          }
        }
      }
     } 
  }
}

资料链接:https://pan.baidu.com/s/1AocImbubd1WYWz8Qn81LFw?pwd=j4qh 
提取码:j4qh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值