找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7622|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)+mfrc522 RFID+LCD12864射頻門禁系統(tǒng)程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
射頻識(shí)別門禁系統(tǒng)


單片機(jī)源程序如下:
  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()                //定時(shí)器0初始化
  12. {
  13.         EA=0;//打開(kāi)總中斷
  14.         ET0=1;//打開(kāi)定時(shí)器0中斷允許
  15.         TR0=1;//打開(kāi)定時(shí)器        
  16.         TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開(kāi)啟動(dòng)。

  17.         TH0=0XFC;        //給定時(shí)器賦初值,定時(shí)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,"請(qǐng)稍等",3);
  34.                   for(y=0;y<255;y++)
  35.                   {
  36.                                  At24c02Write(y,0xff);                //eeprom區(qū)全部清零
  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);//尋天線區(qū)內(nèi)未進(jìn)入休眠狀態(tài)的卡   
  56.          if (status != MI_OK)
  57.    {   
  58.                         PcdReset();
  59.                   PcdAntennaOff();
  60.                         PcdAntennaOn();
  61.             continue;
  62.    }                     
  63.          status = PcdAnticoll(g_ucTempbuf);      //防沖撞,此時(shí)g_ucTempbuf的值為卡號(hào)
  64.    if(status != MI_OK)   
  65.          continue;   
  66.           ////////卡號(hào)打印////////////////////////
  67.          led1=0;
  68.          WRCommand(0x01); //清除顯示 DDRAM
  69.          ShowQQChar(0x90,"卡號(hào):",3);

  70.   while(aaddrr<252)                         //卡號(hào)比對(duì)程序段
  71.   {
  72.           k=0;
  73.                 for(i=0;i<4;i++)                       //卡號(hào)占用四個(gè)地址,比對(duì)四次
  74.                 {
  75.                 eepromreadnum[i]=At24c02Read(aaddrr);                     //讀取EEPROM地址1內(nèi)的數(shù)據(jù)保存在        g_ucTempbuf[]中
  76.                 aaddrr++;
  77.                 ShowNUMChar(0x93+i,g_ucTempbuf[i]);    //顯示卡號(hào)
  78.                 if(eepromreadnum[i]==g_ucTempbuf[i])               //卡號(hào)開(kāi)始進(jìn)行比對(duì)
  79.                 {
  80.                         k=k+i;                               //四次比對(duì)成功0+1+2+3
  81.                   delay(1000);
  82.                 }                                
  83.                 else k=0;                        //比對(duì)失敗
  84.                 if(k==6)
  85.                   {
  86.                          failflag=0;
  87.                      aaddrr=252;                 
  88.               }
  89.                 }
  90.   }
  91. aaddrr=0;                    //地址回到首位,以便下次比較


  92.   if(k==6)                    //卡號(hào)對(duì)比成功
  93.         {        
  94.                 relay=0;
  95.                 ShowQQChar(0x8a,"請(qǐng)通過(guò)\xfd",3);                  
  96.                 beep_Init(1);
  97.         }
  98.         if(k!=6)                    //卡號(hào)對(duì)比失敗
  99.         {
  100.                  beep_Init(0);
  101.                  delay(50000);
  102.                  WRCommand(0x01);
  103.                  failflag=1;                  //卡號(hào)對(duì)比失敗標(biāo)志位
  104.         }
  105.   if(failflag==1)
  106.   {
  107.                 ShowQQChar(0x91,"是否輸入密碼",6);
  108.                 ShowQQChar(0x8a,"添加卡號(hào)",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();                 //密碼輸入函數(shù)
  119.                  delay(10000);
  120.                  WRCommand(0x01);
  121.                  delay(1000);
  122.                  if(successflag==1)
  123.                  {
  124.                   for(i=0;i<4;i++)             //顯示卡號(hào)   g_ucTempbuf[]  所刷卡的卡號(hào)
  125.             {
  126.                                 ShowNUMChar(0x92+i,g_ucTempbuf[i]);
  127.                                 At24c02Write(addr,g_ucTempbuf[i]);         //將卡號(hào)存入eeprom中,addr為存入地址
  128.                                 addr++;         
  129.                                 delay(1000);        
  130.             }
  131.                  delay(10000);                 
  132.                  WRCommand(0x01);
  133.                  ShowQQChar(0x92,"存儲(chǔ)成功",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);    //延時(shí)等待
  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;        //給定時(shí)器賦初值,定時(shí)1ms
  157.         TL0=0X18;
  158.         i++;
  159.         if(i==5000)
  160.         {
  161.                 i=0;
  162.         returnkey=0;               
  163.         }        
  164. }
復(fù)制代碼

以上程序51hei提供下載  (無(wú)仿真工程):
門禁系統(tǒng).rar (115.9 KB, 下載次數(shù): 314)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:523305 發(fā)表于 2020-5-13 20:56 | 只看該作者
沒(méi)仿真
回復(fù)

使用道具 舉報(bào)

板凳
ID:756620 發(fā)表于 2020-5-22 14:48 | 只看該作者
樓主有沒(méi)有具體的原理圖和仿真圖啊
回復(fù)

使用道具 舉報(bào)

地板
ID:730070 發(fā)表于 2020-6-13 08:21 | 只看該作者
正在做433MHZ射頻相關(guān)的,論壇上逛逛學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

5#
ID:114068 發(fā)表于 2020-6-20 18:55 | 只看該作者
拿走了,謝謝!
回復(fù)

使用道具 舉報(bào)

6#
ID:114068 發(fā)表于 2020-6-20 18:56 | 只看該作者
謝謝樓主咯
回復(fù)

使用道具 舉報(bào)

7#
ID:784145 發(fā)表于 2020-6-23 21:34 | 只看該作者
沒(méi)得原理圖啊
回復(fù)

使用道具 舉報(bào)

8#
ID:445876 發(fā)表于 2021-4-13 16:50 | 只看該作者
老哥你的定時(shí)器EA=0咋工作的啊,是不是不用定時(shí)器啊
回復(fù)

使用道具 舉報(bào)

9#
ID:985761 發(fā)表于 2021-11-29 00:07 | 只看該作者
樓主,怎么編寫管理員密碼還有增加刪減普通密碼
回復(fù)

使用道具 舉報(bào)

10#
ID:941265 發(fā)表于 2021-11-29 08:21 | 只看該作者
51黑,有你更精彩
回復(fù)

使用道具 舉報(bào)

11#
ID:985761 發(fā)表于 2021-12-2 12:44 | 只看該作者
有沒(méi)有器件清單
回復(fù)

使用道具 舉報(bào)

12#
ID:864837 發(fā)表于 2023-6-6 09:30 | 只看該作者
謝謝 大佬,正在做433MHZ射頻相關(guān)的,論壇上逛逛學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表