找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于单片机的门禁技术(c语言)

[复制链接]
跳转到指定楼层
楼主
ID:111204 发表于 2016-4-26 17:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  • 可以读普通的mifare卡,测试完全通过,通过向扇区写入门码进行加密
  • #include "reg52.h"
  • #include "main.h"
  • #include "mfrc522.h"
  • #include<intrins.h>         //oˉêy′|àíí·Îļt       
  • #include<string.h>          //×Ö·û′®′|àíí·Îļt
  • #include<stdio.h>           // êäèëêä3öoˉêyí·Îļt
  • unsigned char code data1[16] = {0x00,0x00,0x00,0xAA,0xFF,0xFF,0xFF,0x55,0x00,0x00,0x00,0xAA,0x01,0xFE,0x01,0xFE};//
  • //M1¿¨μÄÄ3ò»¿éD′Îaèçϸñê½£¬Ôò¸Ã¿éÎaÃŽû£¬2»í¬μÄÃÅDT¸ÄÃÅÂë¼′¿é
  • //4×Ö½úÃÅÂ루μí×Ö½úÔúÇ°£©£«4×Ö½úÃÅÂëè¡·′£«4×Ö½úÃÅÂ룫1×Ö½ú¿éμØÖ·£«1×Ö½ú¿éμØÖ·è¡·′£«1×Ö½ú¿éμØÖ·£«1×Ö½ú¿éμØÖ·è¡·′
  • unsigned char code data2[16] = {0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xff,0x00,0x00,0x00,0x00,0x01,0xFE,0x01,0xFE};//
  • //M1¿¨μÄÄ3ò»¿éD′Îaèçϸñê½£¬Ôò¸Ã¿éÎaÃŽû£¬2»í¬μÄÃÅDT¸ÄÃÅÂë¼′¿é
  • //4×Ö½úÃÅÂ루μí×Ö½úÔúÇ°£©£«4×Ö½úÃÅÂëè¡·′£«4×Ö½úÃÅÂ룫1×Ö½ú¿éμØÖ·£«1×Ö½ú¿éμØÖ·è¡·′£«1×Ö½ú¿éμØÖ·£«1×Ö½ú¿éμØÖ·è¡·′
  • unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; //ÃüÂë
  • unsigned char TYPE_DATA[2];//ààDí
  • unsigned char ID_DATA[4];  //IDμØÖ·
  • unsigned char value_DATA[4];//¿¨àïÃæμÄÖμ                                                                                                           
  • unsigned char g_ucTempbuf[20];//
  • unsigned char code  DIS1[] = {"D£Ô°ÃŽû1üàíÏμí3"};
  • unsigned char code  DIS2[] = {"ID£o"};
  • unsigned char code  DIS3[] = {"»′o£1¤Ñ§ÔoËTéá "};
  • unsigned char code  DIS4[] = {"½øÃÅÇëË¢¿¨£¡    "};
  • unsigned char code  DIS6[] = {"0123456789ABCDEF"};
  • unsigned char code  DIS7[]=  {"Çë½ø£¡          "};
  • unsigned char tt=0,key_data,key_olddata,mode,profalg,kaimengtime;
  • unsigned int  a,b;
  • void main( )
  • {
  •      unsigned char status;
  •      InitializeSystem( );
  •          ckcsh();
  •      PcdReset();
  •      PcdAntennaOff(); //1رÕììÏß
  •      PcdAntennaOn();  //¿aÆôììÏß
  •      while ( 1 )
  •      {                          
  •                key();//°′¼ü¼ì2a
  •          status = PcdRequest(PICC_REQALL, g_ucTempbuf); //Ñ°¿¨
  •                  if(status!=MI_OK)//û¿¨
  •                  {
  •                          ID_DATA[0]=0x00;
  •                         ID_DATA[1]=0x00;
  •                         ID_DATA[2]=0x00;
  •                         ID_DATA[3]=0x00;
  •                         profalg=0;
  •                         b=0;
  •                  }
  •          if (status == MI_OK)//óD¿¨
  •          {                                 
  •                          if(profalg==0)
  •                                  {
  •                                  pro();
  •                                  profalg=1;
  •                                  }
  •                                  TYPE_DATA[0]=g_ucTempbuf[0];
  •                                  TYPE_DATA[1]=g_ucTempbuf[1];
  •                                  status = PcdAnticoll(g_ucTempbuf);       //·à3å×2 £¬·μ»Ø¿¨Æ¬IDoÅ 4×Ö½ú
  •                          if (status == MI_OK)
  •                          {
  •                                                  status = PcdSelect(g_ucTempbuf);    //Ñ¡¶¨¿¨Æ¬  ,êäè뿨ƬIDoÅ
  •                                          if (status == MI_OK)
  •                                          {
  •                                                         ID_DATA[0]=g_ucTempbuf[0];
  •                                                         ID_DATA[1]=g_ucTempbuf[1];
  •                                                         ID_DATA[2]=g_ucTempbuf[2];
  •                                                         ID_DATA[3]=g_ucTempbuf[3];
  •                                                         writek();//D′¿¨
  •                                                         readk();//¶á¿¨
  •                                          }        
  •                          }
  •                  }               
  •                                  LCD12864();//ÏÔê¾′|àí°üਿaÃÅ′|àí       
  •                                  PcdHalt();//ÃüáƬ½øèëDYÃß×′쬣¬òòÎaÑ°¿¨ÃüáîêÇÑ°ÕòËùóDμÄ¿¨°üà¨DYÃßμÄ¿¨£¬ÕaìõÃüáî¿éòÔè¥μô       
  •          }
  • }
  • void InitializeSystem()//êäèëêä3ö¿ú3õê¼»ˉ
  • {
  •      P0 = 0xFF;
  •          P1 = 0xFF;
  •          P2 = 0xFF;
  •          P3 = 0xFF;
  • }
  • void Delay(unsigned int time)//Ñóê±oˉêy
  • {
  •   unsigned int i,k  ;
  •   for(i=0;i<255;i++)
  •     for(k=0;k<time;k++)
  •       _nop_();       
  • }
  • void ckcsh()       //3õê¼»ˉoˉêy£¬3õê¼»ˉLCD
  • {
  •         fmq=1;
  •         lcd_init();                                       
  •         Delay(1);
  • }
  • void LCD12864()
  • {
  •         unsigned char i;
  •         lcd_pos(1,0);              //éèÖÃÏÔê¾Î»ÖÃÎaμú1DD
  •         for(i=0;i<16;i++)
  •         {
  •                 lcd_wdat(DIS1);
  •          }
  •         lcd_pos(2,0);             //éèÖÃÏÔê¾Î»ÖÃÎaμú2DD
  •         for(i=0;i<4;i++)
  •         {
  •                 lcd_wdat(DIS2);
  •         }
  •         lcd_wdat(DIS6[ID_DATA[0]/16]);        // ID
  •         lcd_wdat(DIS6[ID_DATA[0]%16]);        //
  •         lcd_wdat(DIS6[ID_DATA[1]/16]);        //
  •         lcd_wdat(DIS6[ID_DATA[1]%16]);        //
  •         lcd_wdat(DIS6[ID_DATA[2]/16]);        //
  •         lcd_wdat(DIS6[ID_DATA[2]%16]);        //
  •         lcd_wdat(DIS6[ID_DATA[3]/16]);        //
  •         lcd_wdat(DIS6[ID_DATA[3]%16]);        //
  •         lcd_pos(3,0);             //éèÖÃÏÔê¾Î»ÖÃÎaμú3DD
  •         for(i=0;i<16;i++)
  •         {
  •                 lcd_wdat(DIS3);
  •         }
  •         lcd_pos(4,0);             //éèÖÃÏÔê¾Î»ÖÃÎaμú4DD
  •         if(b==0xaa)        //Çë½ø
  •         {
  •                 for(i=0;i<16;i++)
  •                 {
  •                 lcd_wdat(DIS7);
  •                 }
  •                 P41=0; //¼ìμçÆ÷¿a
  •             kaimengtime=100;
  •         }
  •         if(kaimengtime==0) //μ±¿aÃÅê±¼äμ½μÄ»° 1Øμô¼ìμçÆ÷
  •         {
  •             P41=1; //¼ìμçÆ÷1Ø
  •                  for(i=0;i<16;i++)
  •                 {
  •                 lcd_wdat(DIS4);
  •                 }
  •         }
  • }
  • bit lcd_busy() //¼ì2éLCDÃ|×′ì¬ , lcd_busyÎa1ê±£¬Ã|£¬μè′y¡£lcd-busyÎa0ê±,ÏD£¬¿éD′Ö¸áîóëêy¾Y¡£
  • {
  •     bit result;
  •     LCD_RS = 0;
  •     LCD_RW = 1;
  •     LCD_EN = 1;
  •     result = (bit)(P0&0x80);
  •     LCD_EN = 0;
  •     return(result);
  • }
  • void lcd_wcmd(unsigned char cmd) //D′Ö¸áîêy¾Yμ½LCD , RS=L£¬RW=L£¬E=¸ßÂö3壬D0-D7=Ö¸áîÂë¡£
  • {
  •     while(lcd_busy());
  •     LCD_RS = 0;
  •     LCD_RW = 0;
  •     LCD_EN = 0;
  •     P0 = cmd;
  •     _nop_();
  •     _nop_();
  •     LCD_EN = 1;
  •     LCD_EN = 0;
  • }
  • void lcd_wdat(unsigned char dat) //D′ÏÔê¾êy¾Yμ½LCD ,RS=H£¬RW=L£¬E=¸ßÂö3壬D0-D7=êy¾Y¡£
  • {
  •     while(lcd_busy());
  •     LCD_RS = 1;
  •     LCD_RW = 0;
  •     LCD_EN = 0;
  •         P0 = dat;
  •     LCD_EN = 1;
  •     LCD_EN = 0;
  • }
  • void lcd_init()// LCD3õê¼»ˉé趨
  • {
  •     P42=1;
  •     LCD_RST = 0;                 //òo¾§¸′λ
  •     Delay(3);
  •     LCD_RST = 1;
  •     Delay(3);
  •     lcd_wcmd(0x34);      //à©3äÖ¸áî2ù×÷
  •     Delay(5);
  •     lcd_wcmd(0x30);      //»ù±¾Ö¸áî2ù×÷
  •     Delay(5);
  •     lcd_wcmd(0x0C);      //ÏÔ꾿a£¬1Ø1a±ê
  •     Delay(5);
  •     lcd_wcmd(0x01);      //Çå3yLCDμÄÏÔê¾ÄúèY
  •     Delay(5);
  • }
  • void lcd_pos(unsigned char X,unsigned char Y)//é趨ÏÔê¾Î»ÖÃ
  • {
  •    unsigned char  pos;
  •    if (X==1)
  •      {X=0x80;}
  •    else if (X==2)
  •      {X=0x90;}
  •    else if (X==3)
  •      {X=0x88;}
  •    else if (X==4)
  •      {X=0x98;}
  •    pos = X+Y ;
  •    lcd_wcmd(pos); //ÏÔê¾μØÖ·
  • }
  • void  clr_screen()// ÇåÆáoˉêy
  • {
  •    lcd_wcmd(0x34);//à©3äÖ¸áî2ù×÷
  •    lcd_wcmd(0x30);//»ù±¾Ö¸áî2ù×÷
  •    lcd_wcmd(0x01);//ÇåÆá
  • }
  • void pro()//·äÃùÆ÷Æô¶ˉoˉêy
  • {
  • fmq=0;
  • TMOD=0x11;//éèÖö¨ê±Æ÷0Îa1¤×÷·½ê½1
  • TH0=(65536-50000)/256;//¸ø¶¨ê±Æ÷×°3õÖμ ¸ß°Ëλ
  • TL0=(65536-50000)%256;//¸ø¶¨ê±Æ÷×°3õÖμ μí°Ëλ
  • EA=1;   //¿a×üÖD¶Ï
  • ET0=1;  //
  • TR0=1;  //
  • }
  • void key()//16¼ü °′¼üé¨Ãè¼ì2a
  • {
  •         keya=0;
  •         keyb=1;
  •         keyc=1;
  •         keyd=1;
  •         Delay(1);
  •     switch(P2&0xf0)
  •         {
  •                      case 0xe0:
  •                          key_data=1;
  •                          fmq=0;
  •                      break;
  •                          case 0xd0:
  •                          key_data=4;
  •                          break;
  •                          case 0xb0:
  •                          key_data=7;
  •                          break;
  •                          case 0x70:
  •                          key_data=0;
  •                          break;
  •                          default:
  •                          key_data=0Xff;
  •                  break;
  •         }
  •         keya=1;
  •         keyb=0;
  •         keyc=1;
  •         keyd=1;
  •         Delay(1);
  •         switch(P2&0xf0)
  •         {
  •                      case 0xe0:
  •                          key_data=2;
  •                      break;
  •                          case 0xd0:
  •                          key_data=5;
  •                          break;
  •                          case 0xb0:
  •                          key_data=8;
  •                          break;
  •                          case 0x70:
  •                          key_data=13;
  •                          break;
  •                          default:
  •                  break;
  •         }
  •         keya=1;
  •         keyb=1;
  •         keyc=0;
  •         keyd=1;
  •         Delay(1);
  •         switch(P2&0xf0)
  •         {
  •                      case 0xe0:
  •                          key_data=3;
  •                      break;
  •                          case 0xd0:
  •                          key_data=6;
  •                          break;
  •                          case 0xb0:
  •                          key_data=9;
  •                          break;
  •                          case 0x70:
  •                          key_data=15;
  •                          break;
  •                          default:       
  •                  break;
  •         }
  •         keya=1;
  •         keyb=1;
  •         keyc=1;
  •         keyd=0;
  •         Delay(1);
  •         switch(P2&0xf0)
  •         {
  •                      case 0xe0:
  •                          key_data=10;
  •                      break;
  •                          case 0xd0:
  •                          key_data=11;
  •                          break;
  •                          case 0xb0:
  •                          key_data=12;
  •                          break;
  •                          case 0x70:
  •                          key_data=14;
  •                          break;
  •                          default:
  •                  break;
  •         }
  •         if(key_data!=key_olddata)        //°′¼üÖμ¸üDÂóë·ñ
  •         {
  •                 key_olddata=key_data;
  •                         if(key_data!=0Xff)
  •                         {
  •                           if( key_data==14)//·¢¿¨
  •                           {
  •                            mode=3;
  •                           }
  •                           if( key_data==12)//Ç忨
  •                           {
  •                            mode=2;
  •                           }
  •                            pro();
  •                         }
  •         }
  •        
  • }
  • void time0() interrupt 1// ÖD¶Ï·tÎñ×ó3ìDò£¬·äÃùÆ÷éùòô½øèë3′Σ¬¿aÃÅê±¼ä-1
  • {
  • TH0=(65536-50000)/256;//¸ø¶¨ê±Æ÷×°3õÖμ ¸ß°Ëλ
  • TL0=(65536-50000)%256;//¸ø¶¨ê±Æ÷×°3õÖμ μí°Ëλ
  • tt++;
  • if(tt==3)
  •         {       
  •         tt=0;
  •                 fmq=1;
  •         }
  • if(kaimengtime>0)
  •         {       
  •      kaimengtime--;
  •         }       
  • }
  • void readk()//¶á¿¨£¬bμÄÖμ¼°Îa±êÖ¾
  • {       
  • unsigned char status;
  • status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//PICC_AUTHENT1A ÑéÖ¤ÃüÂëÄ£ê½60AÃüÂë 61BÃüÂ룬¡°1¡±¿éμØÖ·£¬DefaultKey3õê¼ÃüÂ룬g_ucTempbuf IDoÅ
  •          if (status == MI_OK) //ÑéÖ¤ÃüÂë
  •          {                                                                                                                                                                                                                                                                                                                                                                                        
  •         status = PcdRead(1, g_ucTempbuf);//¶á¿éμØÖ·¡°1¡±μÄêy¾Y£¬·μ»ØÖμ′æÔú        g_ucTempbuf
  •                 if (status == MI_OK)
  •                           {
  •                                 value_DATA[0]=g_ucTempbuf[0];
  •                                 value_DATA[1]=g_ucTempbuf[1];
  •                                 value_DATA[2]=g_ucTempbuf[2];
  •                                 value_DATA[3]=g_ucTempbuf[3];       
  •                                 b=value_DATA[3];                                                                                                                                                       
  •                           }
  •      }
  • }       
  • void writek()//¸øÃŽû¿¨D′èëÖ죬00»òÕßaa AA¿éòÔ¿aÃÅ 00μÄ2»¿éòÔ¿aÃÅ
  • {
  •     unsigned char status;
  •       if( mode==3)//D′èë0xaa3äÖμ
  •                 {       
  •                         mode=0;
  •                     status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//PICC_AUTHENT1A ÑéÖ¤ÃüÂëÄ£ê½60AÃüÂë 61BÃüÂ룬¡°1¡±¿éμØÖ·£¬DefaultKey3õê¼ÃüÂ룬g_ucTempbuf IDoÅ
  •                         if (status == MI_OK) //ÑéÖ¤ÃüÂë
  •                           {                                                                                                                                                                                                                                                                                                                                         
  •                                   status = PcdWrite(1, data1);//D′èëÃÅÂë
  •                                   if (status == MI_OK)
  •                                         {
  •                                         pro();
  •                                     }
  •                           }
  •                 }
  •                 if(mode==2) //D′èë0x00
  •                 {
  •                         mode=0;
  •                 status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//PICC_AUTHENT1A ÑéÖ¤ÃüÂëÄ£ê½60AÃüÂë 61BÃüÂ룬¡°1¡±¿éμØÖ·£¬DefaultKey3õê¼ÃüÂ룬g_ucTempbuf IDoÅ
  •                     if (status == MI_OK) //ÑéÖ¤ÃüÂë
  •                     {                                                                                                                                                                                                                                                                                                                                         
  •                                   status = PcdWrite(1, data2);//D′èëÃÅÂë
  •                                   if (status == MI_OK)
  •                                          {
  •                                                   pro();
  •                                          }
  •                     }
  •                 }
  • }

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2016-4-27 06:16 来自手机 | 只看该作者
楼主 缺少头文件
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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