当前位置:   article > 正文

51单片机的RFID门禁系统_51单片机门禁系统

51单片机门禁系统

一.硬件方案

        本RFID系统设计可分为硬件部分和软件部分。硬件部分以MFRC522射频识别模块为核心,结合主控模块STC89C52设计系统的外围硬件电路,实现对射频卡的控制与MCU之间的互通。软件部分采用C语言进行系统的下位机程序的开发,完成与IC卡之间的通信,实现数据交换功能。整体电路主要由51单片机最小系统,LCD12864液晶显示模块,RFID无线模块,5V转3.3V稳压电路,蜂鸣器模块,AT24C02存储电路,继电器控制电路,按键模块;原理图如图:

 PCB如图:

 

二.设计功能

  • 通过按键输入密码,根据密码的正确与否来进行相应的操作;
  • 可使用管理员密码可以自行设定和修改密码;修改的密码自动保存至存储芯片,支持掉电保存;
  • IC卡感应,匹配成功开锁;匹配三次不成功,蜂鸣器报警;输入正确的密码后,驱动开锁电路。

三.软件设计

(1)LCD初始化

  1. /*******************************************************************/
  2. void lcd_init()
  3.    LCD_PSB = 1;         //并口方式    ,部分液晶不需要
  4.     write_cmd(0x36);      //扩充指令操作
  5.     delay(5);
  6.     write_cmd(0x30);      //基本指令操
  7.     delay(5);
  8.     write_cmd(0x0C);      //显示开,关光标
  9.     delay(5);
  10.     write_cmd(0x01);      //清除LCD的显示内容
  11.     delay(5);
  12. }


(2)修改密码

  1. case 3:        
  2.                display(1,0,4);      //密码设置
  3.                display2(3,0,table,8);
  4.                key_count=0;
  5.                while(1)
  6.                {  
  7.                   key_value=key_scan();      
  8.                   if(key_value==12
  9.                    { 
  10.                      states--;
  11.                      return;
  12.                     }
  13.              
  14.                   if(key_value>=0 && key_value <=9)//有按键输入
  15.                   {                                                  
  16.                     table[key_count++]=key_value+'0';
  17.                     display2(3,0,table,8);            
  18.                   }
  19.                   
  20.                   if(key_value==11)//退格
  21.                   {                                    
  22.                     table[--key_count]='-';
  23.                     display2(3,0,table,8);                 
  24.                   }
  25.                    if(key_count==8 && key_value == 15) //按下确定键
  26.                   
  27.                   { 
  28.                   
  29.                     for(i=0;i<8;i++)
  30.                      KEY_BUF[i]=table[i];    
  31.                         EEPROM_WRITE(7,KEY_BUF,8);//写入EEPROM
  32.                  
  33.                    break;
  34.                    }
  35.                 }              
  36.                 
  37.                break ;


(3)匹配密码

  1.   case 1:        
  2.                display(1,0,2);    //密码输入
  3.                display2(3,0,table,8);
  4.                key_count=0;
  5.                while(1)
  6.                {  
  7.                   key_value=key_scan();      
  8.                   if(key_value==12
  9.                    { 
  10.                      states--;
  11.                      return;
  12.                     }
  13.                   if(key_value==13)
  14.                   {
  15.                    states++;
  16.                    return;
  17.                   }                 
  18.                   if(key_value>=0 && key_value <=9)//有按键输入
  19.                   {                                                  
  20.                     table[key_count++]=key_value+'0';
  21.                     display2(3,0,table,8);            
  22.                   }
  23.                   
  24.                   if(key_value==11)//退格
  25.                   {                                    
  26.                     table[--key_count]='-';
  27.                     display2(3,0,table,8);                 
  28.                   }
  29.                   if(key_count==8)
  30.                   {
  31.                      if( table[0]==KEY_BUF[0] &&
  32.                          table[1]==KEY_BUF[1] &&
  33.                           table[2]==KEY_BUF[2] &&
  34.                          table[3]==KEY_BUF[3] &&
  35.                          table[4]==KEY_BUF[4] &&
  36.                          table[5]==KEY_BUF[5] &&
  37.                          table[6]==KEY_BUF[6] &&
  38.                          table[7]==KEY_BUF[7] )      //密吗正确 
  39.                 
  40.                      { 
  41.                        bPass=1;
  42.                        relay_ON();//灯开关
  43.                        display(2,0,5);
  44.                        relay_OFF();
  45.                        break;                  
  46.                     
  47.                      }
  48.                       else      //密码错误
  49.                       {    
  50.                         relay_OFF();
  51.                         beep1()     ;
  52.                         bWarn=1;
  53.                         display(2,0,6);
  54.                          break;
  55.                      }                      
  56.                   }
  57.                }
  58.                break ;

(3)主程序源码

  1. void main(void)      //主函数
  2. {    
  3.     INT8U key;
  4.     Delay_ms(50); //让硬件稳定
  5.     init_all();       //执行初始化函数
  6.     relay_OFF();   //关继电器
  7.     LED_BLINK_1(); //led test
  8.     beep1();       //beep test     
  9.     display(0,0,0);     //显示初始化
  10.     while(1)
  11.     {
  12.        key=key_scan(); //按键操作
  13.        if(key==12)  if(states>0) states--;
  14.                     else states=0;    //上一功能
  15.        
  16.        if(key==13) if(++states>3) states=3;    //下一功能
  17.        ctrl_process(); //进入RC522操作
  18.     }
  19. }      

资料链接:https://pan.baidu.com/s/1KkmG5-HjxLwf_3w9jcIkiQ?pwd=oyni 
提取码:oyni

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/772133
推荐阅读
相关标签
  

闽ICP备14008679号