武汉理工大学华夏学院
[5]陈冲,徐志,何明华. 一种新的RFID防碰撞算法的研究[J]. 福州大学学报(自然科学版), 2009,(03) .
[6]周永明. 一种改进的查询树射频识别防冲突新算法[J]. 广东轻工职业技术学院学报, 2006,(02) .
[7]李辉,刘国栋,胡小云,高丽芳,沈烨,郑映钦. 电子标签技术在出口鳗鱼产品监管中的应用研究[J]. 中国国境卫生检疫杂志, 2007,(06) .
[8]蔡志刚. 集装箱无线射频识别技术应用研究[J]. 港口装卸, 2005,(05) .
九、 程序附录
void InitRc522(void) {
PcdReset();
PcdAntennaOff(); PcdAntennaOn();
M500PcdConfigISOType( 'A' ); }
void InitAll(void) {
SET_MAIN_CLOCK_SOURCE(CRYSTAL); initUART(); InitRc522();
INT_GLOBAL_ENABLE(INT_OFF); //开启总中断 //init_time1();
INT_GLOBAL_ENABLE(INT_ON); //开启总中断 bWarn=0; bPass=0; SysTime=0; KeyTime=0; WaitTimes=0; KeyNum=0; KuaiN=0;
oprationcard=0; uart_count=0; uart_comp=0; bSendID=0; Pass(); }
void ctrlprocess(void) {
unsigned char ii; char status; uart_count=0;//
6
//设置主时钟为32M晶振 武汉理工大学华夏学院
PcdReset(); halWait(200); halWait(200);
status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);//寻天线区内未进入休眠状态的卡,返回卡片类型 2字节
if(status!=MI_OK) {
return; }
status=PcdAnticoll(&RevBuffer[2]);//防冲撞,返回卡的序列号 4字节 if(status!=MI_OK) {
return; }
memcpy(MLastSelectedSnr,&RevBuffer[2],4); status=PcdSelect(MLastSelectedSnr);//选卡 if(status!=MI_OK) {
return; }
if(oprationcard==READCARD)//读卡 {
oprationcard=0;
status=PcdAuthState(PICC_AUTHENT1A,KuaiN,PassWd,MLastSelectedSnr);// if(status!=MI_OK) {
bWarn=1; return; }
status=PcdRead(KuaiN,Read_Data); if(status!=MI_OK) {
bWarn=1; return; }
for(ii=0;ii<16;ii++) {
sendchar1(MLastSelectedSnr[ii]); }
bPass=1;
sprintf(s,(char
*)\tedSnr[3]);
7
武汉理工大学华夏学院
GUI_ClearScreen(); //LCD清屏
GUI_PutString5_7(25, 2, \ // 显示字符串 GUI_PutString5_7(8, 18, \ // 显示字符串
GUI_PutString5_7(8,40,(char *)s); //显示结果 LCM_Refresh(); PcdHalt(); }
else if(oprationcard==WRITECARD)//写卡 //if(oprationcard==WRITECARD)//写卡 {
oprationcard=0;
status=PcdAuthState(PICC_AUTHENT1A,KuaiN,PassWd,MLastSelectedSnr);// if(status!=MI_OK) {
bWarn=1; return; }
status=PcdWrite(KuaiN,&WriteData[0]); if(status!=MI_OK) {
bWarn=1; return; } bPass=1; PcdHalt(); } }
void ctrl_uart(void) {
uchar ii;
for(ii=0;ii<6;ii++) {
RevBuffer[ii+2]=0xff; }
// RevBuffer[8]=0x03; switch(RevBuffer[1]) {
case 0xa1://读数据
oprationcard=READCARD; for(ii=0;ii<6;ii++) {
PassWd[ii]=RevBuffer[ii+2]; }
8
武汉理工大学华夏学院
KuaiN=RevBuffer[8]; break;
case 0xa2://写数据
oprationcard=WRITECARD; for(ii=0;ii<6;ii++) {
PassWd[ii]=RevBuffer[ii+2]; }
KuaiN=RevBuffer[8]; for(ii=0;ii<4;ii++) {
WriteData[ii]=MLastSelectedSnr[ii]; }
setdatamode=0; break;
default: break; }
uart_comp=0; uart_count=0; }
void main(void) {
InitAll();
GUI_Init(); // GUI初始化 GUI_SetColor(1,0); // 显示色为亮点,背景色为暗点 GUI_PutString5_7(16, 2, \ // 显示字符串 GUI_PutString5_7(6, 20, \ // 显示字符串 LCM_Refresh(); //RevBuffer[8]=0x00; //RevBuffer[0]=0x02; //RevBuffer[1]=0xa0; while(1) {
uart_comp=1; if(uart_comp) {
ctrl_uart(); }
halWait(20); ctrlprocess(); switch(Key_Flag) {
case 1:
9
武汉理工大学华夏学院
Key_Flag=0;
RFIDDataSetting =0;
zgConfigPANIDSetting = 4; setmode= 1;
GUI_ClearScreen(); // 清屏 GUI_PutString5_7(25, 2, \ // 显示字符串 GUI_PutString5_7(5, 20, \显示字符串 GUI_PutString5_7(5,40,\ LCM_Refresh();
// 将显示缓冲区中的数据刷新到SO12864FPD-14ASBE(3S)上显示 break; case 2:
Key_Flag=0;
if((writemode==1)&&(setmode==0)){
RFIDDataSetting=MLastSelectedSnr[writebuffer]; RFIDDataSetting += 1;
if(RFIDDataSetting>128)RFIDDataSetting=0; MLastSelectedSnr[writebuffer]=RFIDDataSetting; if((writebuffer/4)==0){ sprintf(s,(char
*)\tedSnr[3]);
GUI_PutString5_7(8,16,(char *)s); //显示结果 LCM_Refresh();} }
if(setmode){ }
if(modeselect) {
modeselect=0; setdatamode=1; writemode=0; setmode=0;
RevBuffer[0]=0x09; RevBuffer[1]=0xa1;
GUI_ClearScreen(); //LCD清屏 GUI_PutString5_7(4, 20, \ // 显示字符串 LCM_Refresh(); }
break; case 3:
Key_Flag=0; if(setmode){}
10