|
- 可以讀普通的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();
- }
- }
- }
- }
|
評分
-
查看全部評分
|