單片機源程序如下:
#include "reg52.h"
#include "main.h"
#include "mfrc522.h"
#include "LCD12864.h"
#include #include sbit BEEP=P0^1 ; #define SET_BEEP BEEP = 0 #define CLR_BEEP BEEP = 1 //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; unsigned char code ASCII_NUM[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; unsigned char idata LastKeyA[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//NO.2卡 unsigned char idata NewKeyA[6]={0x19,0x84,0x07,0x15,0x76,0x14};//NO.2卡 unsigned char idata NewKey[16]={0x19,0x84,0x07,0x15,0x76,0x14, 0xff,0x07,0x80,0x69, 0x19,0x84,0x07,0x15,0x76,0x14}; unsigned char idata Read_Data[16]={0x00}; //unsigned char idata RevBuffer[30]; //unsigned char idata MLastSelectedSnr[4]; unsigned char data OperationCard; uchar data bWarn,bPass; #define REGCARD 0xa1 #define CONSUME 0xa2 #define READCARD 0xa3 #define ADDMONEY 0xa4 void KeyScan(void) { if(REGCARDBTN == 0)//注冊 { delay_10ms(1); if(REGCARDBTN == 0 ) OperationCard = REGCARD; LCD_PutString(0,3,"注冊:"); } if(CONSUMEBTN == 0)//消費 { delay_10ms(1); if(CONSUMEBTN == 0 ) OperationCard = CONSUME; LCD_PutString(0,3,"消費: "); } if(ADDMONEYBTN == 0)//充值 { delay_10ms(1); if(ADDMONEYBTN == 0 ) OperationCard = ADDMONEY; LCD_PutString(0,3,"充值: "); } if(READCARDBTN == 0)//讀卡信息 { delay_10ms(1); if(READCARDBTN == 0 ) OperationCard = READCARD; LCD_PutString(0,3,"查詢: "); } } /* void delay(void) { uint i ; for(i=0;i++;i<100) ; } void ShortBeep(void) { uint i; for(i=0;i<3;i++) { SET_BEEP; delay_10ms(3); CLR_BEEP; delay(); } } void LongBeep(void) { uint i; for(i=0;i<20;i++) { SET_BEEP; delay_10ms(5); CLR_BEEP; delay(); } } */ void Warn(void) { uchar data ii; for(ii=0;ii<3;ii++) { SET_BEEP;//ShortBeep();如果是有源蜂鳴器就一句SET_BEEP就ok了 delay_10ms(5); CLR_BEEP; delay_10ms(5); } } void Pass(void) { SET_BEEP;//LongBeep();如果是有源蜂鳴器就一句SET_BEEP就ok了 delay_10ms(30); CLR_BEEP; } void CtrlProcess(void) { // unsigned char idata Write_First_Data[16]; char string[]=" "; unsigned char idata Write_Consume_Data[16]; signed long money_value; float f_money_value; unsigned char ii; char status; status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);//尋天線區(qū)內未進入休眠狀態(tài)的卡,返回卡片類型 2字節(jié) if(status!=MI_OK) return; for(ii=0;ii<2;ii++) { string[2*ii] = ASCII_NUM[(RevBuffer[ii]>>4)&0x0f]; string[2*ii+1] = ASCII_NUM[RevBuffer[ii]&0x0f]; } string[4] = '