标题:
msp430f5529 RC522射频卡程序
[打印本页]
作者:
wubaqian
时间:
2019-9-3 11:10
标题:
msp430f5529 RC522射频卡程序
/*
波特率设置为9600
特别说明:
单片机与PC的通讯:
PC与单片机的连接:需要一个usb转ttl调试器B,B的RXD接P4.5口,TXD接4.4口,VCC接5v电压,GND接地即可。
PC端使用的串口调试助手是X—COM,将调试器B连接好单片机。单片机的数据线接到电脑上,编译好程序后,点击CCS上的开始调试。
然后将调试器插入电脑,在X-COM中 设置波特率为9600,停止位1,数据位8,串口选择调试器B的usb接口!(这步很重要)打开串口,即可开始串口调试。
此刻能实现的功能:
1.PC发送除A, F外的字符,单片机发送给电脑菜单信息。
单片机与RC522的通讯:
SDA p2.2
SCK P2.7
MOSI P3.3
MISO p3.4
IRQ 不接
RST p2.3
连接好上述引线后,能实现以下功能:
1.PC发送字符A,读出卡的型号和UID信息。
2.PC发送字符F,单次寻卡模式,接触一次显示一次卡的型号信息。
*/
#include "msp430.h"
#include "PIN_DEF.H"
#include "RC522.H"
#include "UART_Func.h"//串口已修改
#include "ctype.h"
unsigned char UID[5],Temp[4]; /*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) ;
void function1(void)
{
;
}
//***************************************************************************//
// //
// 初始化主时钟: MCLK = XT1×(FLL_FACTOR+1) //
// 我自己打的时钟,能成功。
// //
//***************************************************************************//
void Init_CLK(void)
{
P5SEL |= BIT2 + BIT3;//P5.2和P5.3选择XT2晶振功能
UCSCTL6 &= ~XT2OFF;//使能XT2
UCSCTL3 |= SELREF_2;//FLL模块的参考时钟源选择REFO
UCSCTL4 |= SELA_2;
do
{
UCSCTL7 &= ~(XT2OFFG+XT1LFOFFG+DCOFFG);//清除XT2,XT1,DCO故障失效标志位
SFRIFG1 &= ~OFIFG;//清除晶振故障失效中断标志位
}while(SFRIFG1&OFIFG);//测试晶振故障失效中断标志位
UCSCTL6 &= ~XT2DRIVE0;//减少XT2驱动能力,降低功耗
UCSCTL4 |= SELS_5 + SELM_5;//SMCLK=MCLK=XT2
}
void Delay(unsigned int time)
{
volatile 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 (!(UCA1IFG & UCTXIFG));//等待上一个字符发送完成
UCA1TXBUF = '\n'; //发送换行指令
RED_LED_ON;
Delay(200);
RED_LED_OFF;
Delay(200);//绿灯交替亮灭
}
function1();//可以在这里编写一下如何区别使用UID信息的函数。
}
else GRE_LED_OFF;
Delay(100);//延时一端时间
}
}
void Find_Card(void)
{
while(1)
{
if(PcdRequest(0x52,Temp)==MI_OK)
{
RED_LED_OFF;//红灯熄灭
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!");
break;//如果满足条件,退出循环
}
else PutString("Faile!");
GRE_LED_OFF;//绿灯熄灭
Delay(1000);//延时一端时间
}
}
/*************************
端口初始化
************************/
void Init_Port(void)
{
P4DIR |= BIT7;//P4.7输出,控制led
P3DIR |= BIT3;
P3DIR &= ~BIT4;//P3.4设为输入
P2DIR |= BIT2+BIT3+BIT7;
P1DIR |= BIT0;//控制led
}
/*******************************************
函数名称:HandleConfigMenu
功 能:处理PC的配置函数
参 数:inputvalue--接收到的来自PC机的字符
返回值 :无
********************************************/
void HandleConfigMenu(uchar inputvalue)
{
switch(toupper(inputvalue))
{
case 'A':
Auto_Reader();
break;
case 'F':
Find_Card();
break;
default:
DisplayConfigMenu();
}
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; // 关看门狗
Init_Port();//这里是引脚的配置函数,想要知道怎么连,就看这里
InitUART();//初始化串口通信
_EINT();//使能全局中断
PcdReset();//复位RC522
PcdAntennaOn();//开启天线发射
DisplayConfigMenu();//向PC发送菜单信息
while(1)
{
Send1Char('>');
Send1Char('\n');
i=Get1Char();//i暂存电脑发来的数据,已验证
HandleConfigMenu(i);//本函数用于数据分析
}
}
在此只显示部分内容,更多内容请下载后查看
proj 5529 RC522.zip
2019-9-3 11:10 上传
点击文件名下载附件
下载积分: 黑币 -5
180.88 KB, 下载次数: 16, 下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1