|
mfrc522與MSP430F149開發(fā)板及51單片機連接(含上位機測試軟件)
0.png (274.56 KB, 下載次數(shù): 69)
下載附件
2017-5-12 03:34 上傳
0.png (318.2 KB, 下載次數(shù): 93)
下載附件
2017-5-12 03:34 上傳
0.png (135.09 KB, 下載次數(shù): 70)
下載附件
2017-5-12 03:34 上傳
51讀寫卡參考例程及上位機調試軟件:
0.png (78.73 KB, 下載次數(shù): 67)
下載附件
2017-5-12 03:37 上傳
0.png (56.29 KB, 下載次數(shù): 84)
下載附件
2017-5-12 03:35 上傳
0.png (51.29 KB, 下載次數(shù): 54)
下載附件
2017-5-12 03:34 上傳
51單片機源程序如下:
- #include "reg52.h"
- #include "main.h"
- #include "mfrc522.h"
- #include <string.h>
- //M1卡的某一塊寫為如下格式,則該塊為錢包,可接收扣款和充值命令
- //4字節(jié)金額(低字節(jié)在前)+4字節(jié)金額取反+4字節(jié)金額+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反
- unsigned char code data2[4] = {0x12,0,0,0};
- unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
- unsigned char g_ucTempbuf[20];
- unsigned char idata MLastSelectedSnr[4];
- unsigned char idata RevBuffer[30];
- unsigned char data SerBuffer[20];
- bit CmdValid;
- void iccardcode()
- {
- unsigned char cmd;
- unsigned char status;
-
- cmd = RevBuffer[0];
- switch(cmd)
- {
- case 1: // Halt the card //終止卡的操作
- status= PcdHalt();;
- RevBuffer[0]=1;
- RevBuffer[1]=status;
- break;
- case 2: // Request,Anticoll,Select,return CardType(2 bytes)+CardSerialNo(4 bytes)
- // 尋卡,防沖突,選擇卡 返回卡類型(2 bytes)+ 卡系列號(4 bytes)
- status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
- if(status!=0)
- {
- status= PcdRequest(RevBuffer[1],&RevBuffer[2]);
- if(status!=0)
- {
- RevBuffer[0]=1;
- RevBuffer[1]=status;
- break;
- }
- }
- RevBuffer[0]=3;
- RevBuffer[1]=status;
- break;
-
- case 3: // 防沖突 讀卡的系列號 MLastSelectedSnr
- status = PcdAnticoll(&RevBuffer[2]);
- if(status!=0)
- {
- RevBuffer[0]=1;
- RevBuffer[1]=status;
- break;
- }
- memcpy(MLastSelectedSnr,&RevBuffer[2],4);
- RevBuffer[0]=5;
- RevBuffer[1]=status;
- break;
- case 4: // 選擇卡 Select Card
- status=PcdSelect(MLastSelectedSnr);
- if(status!=MI_OK)
- {
- RevBuffer[0]=1;
- RevBuffer[1]=status;
- break;
- }
- RevBuffer[0]=3;
- RevBuffer[1]=status;
- break;
- case 5: // Key loading into the MF RC500's EEPROM
- status = PcdAuthState(RevBuffer[1], RevBuffer[3], DefaultKey, MLastSelectedSnr);// 校驗卡密碼
- RevBuffer[0]=1;
- RevBuffer[1]=status;
- break;
- case 6:
- RevBuffer[0]=1;
- RevBuffer[1]=status;
- break;
- case 7:
- RevBuffer[0]=1;
- RevBuffer[1]=status;
- break;
- case 8: // Read the mifare card
- // 讀卡
- status=PcdRead(RevBuffer[1],&RevBuffer[2]);
- if(status==0)
- {RevBuffer[0]=17;}
- else
- {RevBuffer[0]=1;}
- RevBuffer[1]=status;
- break;
- case 9: // Write the mifare card
- // 寫卡 下載密碼
- status=PcdWrite(RevBuffer[1],&RevBuffer[2]);
- RevBuffer[0]=1;
- RevBuffer[1]=status;
- break;
- case 10:
- PcdValue(RevBuffer[1],RevBuffer[2],&RevBuffer[3]);
- RevBuffer[0]=1;
- RevBuffer[1]=status;
- break;
- case 12: // 參數(shù)設置
- PcdBakValue(RevBuffer[1], RevBuffer[2]);
- RevBuffer[0]=1; //contact
- RevBuffer[1]=0;
- break;
- }
- }
- /////////////////////////////////////////////////////////////////////
- //系統(tǒng)初始化
- /////////////////////////////////////////////////////////////////////
- void InitializeSystem()
- {
- P0 = 0xFF; P1 = 0xFF; P3 = 0xFF;
- ET2 = 0;
- T2CON = 0x04;
- PCON = 0x80;
- SCON = 0x70;
- TMOD = 0x21; //TMOD = 0x22;
- TH1 = BAUD_9600;
- TL1 = TH1;
- TR1 = 1; // 波特率發(fā)生器
- TH0 = 0x60;
- TL0 = 0x60;
- TR0 = 0;
-
- ET0=0;
- ET1=0;
- EA=1;
- EX0=1;
- IT0 = 1;
- TR2=0;
- ES = 1;
- CmdValid=0;
- LED_GREEN = 1;
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- M500PcdConfigISOType( 'A' );
- LED_GREEN = 0;
- delay_10ms(10);
- LED_GREEN = 1;
- delay_10ms(10);
- LED_GREEN = 0;
- }
- /////////////////////////////////////////////////////////////////////
- //用T2做延時子程序
- /////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////
- // 接收和發(fā)送中斷
- ///////////////////////////////////////////////////////////////////////
- void isr_UART(void) interrupt 4 using 1
- {
- unsigned char len, i;
- unsigned int j=0;
-
- if(RI)
- {
- len=SBUF;
- RI=0;
- for(i=0;i<len;i++)
- {
- while(!RI)
- {
- j++;
- if(j>1000)
- {
- break;
- }
- }
- if(j<1000)
- {
- RevBuffer[i]=SBUF;
- RI=0;
- j=0;
- }
- else
- {
- break;
- }
- }
- if(i==len)
- {
- REN=0;
- CmdValid=1;
- }
- }
- else if(!RI && TI)
- {
- TI=0;
- len=RevBuffer[0];
- for(i=0;i<len+1;i++)
- {
- SBUF=RevBuffer[i];
- while(!TI);
- TI=0;
- }
- REN=1;
- }
- }
- void main( )
- {
- unsigned char baud;
- InitializeSystem( );
- while (1)
- {
- if (CmdValid)
- {
- CmdValid = FALSE;
- if(RevBuffer[0]==11) //為了加快相應速度 測試風鳴器
- {
- RevBuffer[2]=RevBuffer[1];
- RevBuffer[0]=1; //contact
- RevBuffer[1]=0;
- CALL_isr_UART();
- LED_GREEN = 1;
- delay_10ms(RevBuffer[2]);
- LED_GREEN = 0;
- }
- else if(RevBuffer[0]==13) //設置通訊波特率
- {
- switch(RevBuffer[1])
- {
- case 0:
- baud=BAUD_9600;
- break;
- case 1:
- baud=BAUD_14400;
- break;
- case 2:
- baud=BAUD_19200;
- break;
- case 3:
- baud=BAUD_28800;
- break;
- case 4:
- baud=BAUD_38400;
- break;
- case 5:
- baud=BAUD_57600;
- break;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
msp430單片機源程序:
- //
- //===========================================================================//
- #include "msp430x14x.h"
- #include "PIN_DEF.H"
- #include "RC522.H"
- #include "UART0_Func.c"
- #include "ctype.h"
- #include "BoardConfig.h"
- unsigned char UID[5],Temp[4] ;
- unsigned char RF_Buffer[18] ;
- unsigned char Password_Buffer[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF} ; // Mifare One 缺省密碼
- char MBRX[30] ;
- char MBKeyTP[30] ;
- char Event ;
- unsigned char DISP_MODE,i ; // 編輯控件顯示模式
- unsigned char des_on = 0 ; // DES加密標志
- void Key_TP_Task(void) ;
- //***************************************************************************//
- // //
- // 初始化主時鐘: MCLK = XT1×(FLL_FACTOR+1) //
- // //
- //***************************************************************************//
- void Init_CLK(void)
- {
- unsigned int qq;
- WDTCTL = WDTPW + WDTHOLD ; // 關看門狗
- BCSCTL1 &= ~XT2OFF; //打開XT2高速晶體振蕩器
- do
- {
- IFG1 &= ~OFIFG; //Clear oscFault flag清除振蕩器失效標志
- for(qq=0xff;qq>0;qq--);
- }while((IFG1&OFIFG)); //oscFault flag still set
-
- BCSCTL2 |= SELM_2; //MCLK=XT2
- //BCSCTL2 |= DIVM_0; //控制MCLK不分頻,默認
-
- BCSCTL2 |= SELS; //SMCLK=XT2
- //BCSCTL2 |= DIVS_0; //控制SMCLK不分頻,默認
- }
- void Delay(unsigned int time)
- {
- unsigned int i,k ;
- for(i=0;i<255;i++)
- for(k=0;k<time;k++)
- _NOP() ;
- }
- void Auto_Reader(void)
- {
- while(1)
- {
- if(PcdRequest(0x52,Temp)==MI_OK)
- {
- if(Temp[0]==0x04&&Temp[1]==0x00)
- PutString("MFOne-S50");
- else if(Temp[0]==0x02&&Temp[1]==0x00)
- PutString("MFOne-S70");
- else if(Temp[0]==0x44&&Temp[1]==0x00)
- PutString("MF-UltraLight");
- else if(Temp[0]==0x08&&Temp[1]==0x00)
- PutString("MF-Pro");
- else if(Temp[0]==0x44&&Temp[1]==0x03)
- PutString("MF Desire");
- else
- PutString("Unknown");
- if(PcdAnticoll(UID)==MI_OK)
- {
- PutString0("Card Id is:");
- tochar(UID[0]);
- tochar(UID[1]);
- tochar(UID[2]);
- tochar(UID[3]);
- while (!(IFG1 & UTXIFG0));
- TXBUF0 = '\n'; //發(fā)送換行指令
-
- RED_LED_ON ;
- Delay(200) ;
- RED_LED_OFF ;
- Delay(200) ;
- }
- }
- else GRE_LED_OFF ;
- }
- }
- void Find_Card(void)
- {
- if(PcdRequest(0x52,Temp)==MI_OK)
- {
- if(Temp[0]==0x04&&Temp[1]==0x00)
- PutString("MFOne-S50");
- else if(Temp[0]==0x02&&Temp[1]==0x00)
- PutString("MFOne-S70");
- else if(Temp[0]==0x44&&Temp[1]==0x00)
- PutString("MF-UltraLight");
- else if(Temp[0]==0x08&&Temp[1]==0x00)
- PutString("MF-Pro");
- else if(Temp[0]==0x44&&Temp[1]==0x03)
- PutString("MF Desire");
- else
- PutString("Unknown");
- PutString("SUCCESS!");
- }
- else PutString("Faile!");
- }
- void Init_Port(void)
- {
- P4DIR = RF_LPCTL + RF_SS + RF_SCLK + RF_DATA_OUT ;
- P2DIR |= BIT0+RF_LPCTL + RF_SS + RF_SCLK + RF_DATA_OUT;
- P1DIR = RF_LPCTL + RF_SS + RF_SCLK + RF_DATA_OUT ;
- }
- /*******************************************
- 函數(shù)名稱:HandleConfigMenu
- 功 能:處理PC的配置函數(shù)
- 參 數(shù):inputvalue--接收到的來自PC機的字符
- 返回值 :無
- ********************************************/
- void HandleConfigMenu(uchar inputvalue)
- {
- switch(toupper(inputvalue))
- {
- case 'A':
- Auto_Reader();
- break;
- case 'F':
- Find_Card();
- break;
- default:
- DisplayConfigMenu();
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (65.63 KB, 下載次數(shù): 77)
下載附件
2017-5-12 03:33 上傳
所有資料51hei提供下載:
TJDZ-RC522射頻卡用戶使用手冊資料Ver_1.0.rar
(990.57 KB, 下載次數(shù): 45)
2017-5-11 12:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|