找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机+mfrc522 RFID+LCD12864射频门禁系统程序

  [复制链接]
跳转到指定楼层
楼主
射频识别门禁系统


单片机源程序如下:
  1. #include "reg52.h"
  2. #include "mfrc522.h"        
  3. #include <string.h>
  4. #include <12864.h>
  5. #include <i2c.h>
  6. #include <waishe.h>
  7. #include <key.h>

  8. unsigned char aaddrr,addr;
  9. unsigned char eepromreadnum[4];
  10. char returnkey=1;

  11. void Timer0Init()                //定时器0初始化
  12. {
  13.         EA=0;//打开总中断
  14.         ET0=1;//打开定时器0中断允许
  15.         TR0=1;//打开定时器        
  16.         TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

  17.         TH0=0XFC;        //给定时器赋初值,定时1ms
  18.         TL0=0X18;                        
  19. }


  20.   void main( )
  21. {   
  22.    int failflag,y,successflag;
  23.          int KeyValue=12;
  24.    beep=0;
  25.    RFID_Init();
  26.    LCDInit();
  27.    Timer0Init();
  28.          if(At24c02Read(255)!=0x65)                //eeprom初次上电初始化
  29.          {
  30.                   delay(1000);
  31.                   ShowQQChar(0x82,"初次上电",4);
  32.                   ShowQQChar(0x91,"初始化中...",6);
  33.                   ShowQQChar(0x8a,"请稍等",3);
  34.                   for(y=0;y<255;y++)
  35.                   {
  36.                                  At24c02Write(y,0xff);                //eeprom区全部清零
  37.                                  delay(1000);
  38.                         }
  39.                   At24c02Write(255,0x65);               
  40.                   delay(1000);
  41.                         At24c02Write(248,0x25);
  42.                   delay(1000);
  43.                         At24c02Write(249,0x28);
  44.                   delay(1000);        
  45.                         At24c02Write(250,0xa5);
  46.                   delay(1000);
  47.                         At24c02Write(251,0x51);
  48.                   delay(1000);
  49.          }
  50. while(1)
  51. {

  52.          unsigned char status,i,k;
  53.          k=0;
  54.          LCD_show();
  55.          status = PcdRequest(PICC_REQIDL, g_ucTempbuf);//寻天线区内未进入休眠状态的卡   
  56.          if (status != MI_OK)
  57.    {   
  58.                         PcdReset();
  59.                   PcdAntennaOff();
  60.                         PcdAntennaOn();
  61.             continue;
  62.    }                     
  63.          status = PcdAnticoll(g_ucTempbuf);      //防冲撞,此时g_ucTempbuf的值为卡号
  64.    if(status != MI_OK)   
  65.          continue;   
  66.           ////////卡号打印////////////////////////
  67.          led1=0;
  68.          WRCommand(0x01); //清除显示 DDRAM
  69.          ShowQQChar(0x90,"卡号:",3);

  70.   while(aaddrr<252)                         //卡号比对程序段
  71.   {
  72.           k=0;
  73.                 for(i=0;i<4;i++)                       //卡号占用四个地址,比对四次
  74.                 {
  75.                 eepromreadnum[i]=At24c02Read(aaddrr);                     //读取EEPROM地址1内的数据保存在        g_ucTempbuf[]中
  76.                 aaddrr++;
  77.                 ShowNUMChar(0x93+i,g_ucTempbuf[i]);    //显示卡号
  78.                 if(eepromreadnum[i]==g_ucTempbuf[i])               //卡号开始进行比对
  79.                 {
  80.                         k=k+i;                               //四次比对成功0+1+2+3
  81.                   delay(1000);
  82.                 }                                
  83.                 else k=0;                        //比对失败
  84.                 if(k==6)
  85.                   {
  86.                          failflag=0;
  87.                      aaddrr=252;                 
  88.               }
  89.                 }
  90.   }
  91. aaddrr=0;                    //地址回到首位,以便下次比较


  92.   if(k==6)                    //卡号对比成功
  93.         {        
  94.                 relay=0;
  95.                 ShowQQChar(0x8a,"请通过\xfd",3);                  
  96.                 beep_Init(1);
  97.         }
  98.         if(k!=6)                    //卡号对比失败
  99.         {
  100.                  beep_Init(0);
  101.                  delay(50000);
  102.                  WRCommand(0x01);
  103.                  failflag=1;                  //卡号对比失败标志位
  104.         }
  105.   if(failflag==1)
  106.   {
  107.                 ShowQQChar(0x91,"是否输入密码",6);
  108.                 ShowQQChar(0x8a,"添加卡号",4);
  109.                 delay(500);
  110.    while(returnkey)
  111.          {
  112.             EA=0;
  113.                 KeyValue=KeyDown();
  114.                 if(KeyValue==11)
  115.                 {
  116.                  WRCommand(0x01);               
  117.                  delay(10000);                 
  118.                  successflag=inputmima();                 //密码输入函数
  119.                  delay(10000);
  120.                  WRCommand(0x01);
  121.                  delay(1000);
  122.                  if(successflag==1)
  123.                  {
  124.                   for(i=0;i<4;i++)             //显示卡号   g_ucTempbuf[]  所刷卡的卡号
  125.             {
  126.                                 ShowNUMChar(0x92+i,g_ucTempbuf[i]);
  127.                                 At24c02Write(addr,g_ucTempbuf[i]);         //将卡号存入eeprom中,addr为存入地址
  128.                                 addr++;         
  129.                                 delay(1000);        
  130.             }
  131.                  delay(10000);                 
  132.                  WRCommand(0x01);
  133.                  ShowQQChar(0x92,"存储成功",4);
  134.                  delay(10000);
  135.                  }                        
  136.                  returnkey=0;                     
  137.                 }
  138.      else if(KeyValue==10)
  139.                  returnkey=0;
  140.          else
  141.          EA=1;                                 
  142.          }

  143.   }
  144. returnkey=1;
  145.         
  146. delay(70000);    //延时等待
  147. WRCommand(0x01); //清除显示 DDRAM
  148. led1=1;
  149. relay=1;
  150.          
  151. }

  152. }

  153. void Timer0() interrupt 1
  154. {
  155.         static u16 i;
  156.         TH0=0XFC;        //给定时器赋初值,定时1ms
  157.         TL0=0X18;
  158.         i++;
  159.         if(i==5000)
  160.         {
  161.                 i=0;
  162.         returnkey=0;               
  163.         }        
  164. }
复制代码

以上程序51hei提供下载  (无仿真工程):
门禁系统.rar (115.9 KB, 下载次数: 305)

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

使用道具 举报

沙发
ID:523305 发表于 2020-5-13 20:56 | 只看该作者
没仿真
回复

使用道具 举报

板凳
ID:756620 发表于 2020-5-22 14:48 | 只看该作者
楼主有没有具体的原理图和仿真图啊
回复

使用道具 举报

地板
ID:730070 发表于 2020-6-13 08:21 | 只看该作者
正在做433MHZ射频相关的,论坛上逛逛学习
回复

使用道具 举报

5#
ID:114068 发表于 2020-6-20 18:55 | 只看该作者
拿走了,谢谢!
回复

使用道具 举报

6#
ID:114068 发表于 2020-6-20 18:56 | 只看该作者
谢谢楼主咯
回复

使用道具 举报

7#
ID:784145 发表于 2020-6-23 21:34 | 只看该作者
没得原理图啊
回复

使用道具 举报

8#
ID:445876 发表于 2021-4-13 16:50 | 只看该作者
老哥你的定时器EA=0咋工作的啊,是不是不用定时器啊
回复

使用道具 举报

9#
ID:985761 发表于 2021-11-29 00:07 | 只看该作者
楼主,怎么编写管理员密码还有增加删减普通密码
回复

使用道具 举报

10#
ID:941265 发表于 2021-11-29 08:21 | 只看该作者
51黑,有你更精彩
回复

使用道具 举报

11#
ID:985761 发表于 2021-12-2 12:44 | 只看该作者
有没有器件清单
回复

使用道具 举报

12#
ID:864837 发表于 2023-6-6 09:30 | 只看该作者
谢谢 大佬,正在做433MHZ射频相关的,论坛上逛逛学习
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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