|
/*
波特率設置為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);//本函數用于數據分析
}
}
在此只顯示部分內容,更多內容請下載后查看
|
評分
-
查看全部評分
|