⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 手持机嵌入式开发,本代码是基于c-c++.
💻 C
📖 第 1 页 / 共 5 页
字号:

	while (inkey() != vk_ESC) {
		rf_open();
		LcdSetIcon(LCD_ICON_CARD, 1);
		flag=0;
		
		ret = init_RFID(1);
			if (ret != MI_OK) {
				DisplayMidLine(4, "芯片初始化失败", ALIGN_CENTER, false);
				beep_err();
				goto next;
			}
		ret = RFID_Inventory1(resp);
			if (ret != MI_OK) {	
				//DisplayMidLine(3, "认证失败", ALIGN_CENTER, false);	
				//beep_err();
				tick_count_end=GetTickCount();
				if ((tick_count_end-tick_count_start)>3000){
					DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);
					DisplayMidLine(6, "                ", ALIGN_CENTER, false);
				}
				goto next;			
			}
		
		memset(uid,0,16);
		memcpy(uid,resp,8);
		one_two(0,3,uid[0]);
		one_two(2,3,uid[1]);
		one_two(4,3,uid[2]);
		one_two(6,3,uid[3]);
		one_two(8,3,uid[4]);
		one_two(10,3,uid[5]);
		one_two(12,3,uid[6]);
		one_two(14,3,uid[7]);
		
		ret = RFID_Write(2,uid,5,data,&lenr,resp); 
			if ((ret != MI_OK) || (resp[0] != MI_OK)) {
				DisplayMidLine(4,"   写失败   ", ALIGN_CENTER, false);	
				beep_err();
				goto next;
			}
		ret = ret = RFID_Read (2,uid, 5,1,&lenr,resp);
			if ((ret != MI_OK) || (resp[0] != MI_OK)) {
				DisplayMidLine(4,"   读失败   ", ALIGN_CENTER, false);	
				beep_err();
				goto next;
			}
		ret = RFID_Write_AFI(2,uid,afi,&lenr,resp); 
			if ((ret != MI_OK) || (resp[0] != MI_OK)) {
				DisplayMidLine(4," 修改AFI失败 ", ALIGN_CENTER, false);	
				beep_err();
				goto next;
			}	
	
		ret = RFID_Get_System_Information(2,uid,&lenr,resp); 
			if ((ret != MI_OK) || (resp[0] != MI_OK)) {
				DisplayMidLine(4,"获得系统信息失败", ALIGN_CENTER, false);
				beep_err();	
				goto next;
			}	

		beep_ok();
		DisplayMidLine(4, "刷卡成功", ALIGN_CENTER, false);
		flag=1;
		
		next:
		rf_close();
		SystemSleep(300);
		if (flag==1) tick_count_start=GetTickCount();
	}
	LcdSetIcon(LCD_ICON_CARD, 0);
}

//电子标签连续刷卡(允许一次刷多张卡)
void testRfid_more()
{
	unsigned char lenr, uid[16] , resp[200], flag, card_num,tmp[20];
	char ret = 0, afi=0x60;
	unsigned char  data[4]={0xAA,0xAA,0xAA,0xAA};
	long tick_count_start, tick_count_end;

	clrscr();
	DisplayMidLine(1, "电子标签测试", ALIGN_CENTER, false);
	DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);

	while (inkey() != vk_ESC) {
		rf_open();
		LcdSetIcon(LCD_ICON_CARD, 1);
		flag=0;
		
		ret = init_RFID(1);
			if (ret != MI_OK) {
				DisplayMidLine(4, "芯片初始化失败", ALIGN_CENTER, false);
				beep_err();
				goto next;
			}
		ret = RFID_Inventory16(&card_num,resp);
			if (ret != MI_OK) {	
				//DisplayMidLine(3, "认证失败", ALIGN_CENTER, false);	
				//beep_err();
				tick_count_end=GetTickCount();
				if ((tick_count_end-tick_count_start)>3000){
					DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);
					DisplayMidLine(6, "                ", ALIGN_CENTER, false);
				}
				goto next;			
			}
		
		beep_ok();
		sprintf(tmp,"%d张卡刷卡成功",card_num);
		DisplayMidLine(4,tmp,ALIGN_CENTER,false);
		//delay(2000);
		//DisplayMidLine(4, "刷卡成功", ALIGN_CENTER, false);
		flag=1;
		
		next:
		rf_close();
		SystemSleep(300);
		if (flag==1) tick_count_start=GetTickCount();
	}
	LcdSetIcon(LCD_ICON_CARD, 0);
}		

void testRfid_operate()
{
	char ch;
	DisplayMidLine(1,"请选择操作方式",ALIGN_CENTER,true);
	DisplayMidLine(3,"1.一张卡操作",ALIGN_CENTER,false);
	DisplayMidLine(5,"2.多张卡操作",ALIGN_CENTER,false);
	while(1){
		ch=get_char();
		if (ch == 0x31){
			testRfid();
			break;
		}else if (ch == 0x32){
			testRfid_more();
			break;
		}else if (ch == vk_ESC){
			return;
		}
	}
	return;		
}


bool match_card(BYTE *card_no, int len, int *ptr)
{
	int i;
	
	for (i=0;i<60;i++) {
		if (memcmp(snr_array[i].snr,card_no,len)==0) {
			*ptr=i;
			if ((GetTickCount()-snr_array[i].tick_count)<30000) return true;
			else return false;
		}
	}
	
	*ptr=0xff;
	return false;
}


void testMifareOne_2()
{
	BYTE lenr, resp[200], type, flag;
	BYTE snr[8];
	BYTE sak[32];
	BYTE key[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
	int ret = 0, site;
	bool ret_bool;
	long tick_count_start, tick_count_end;

	clrscr();
	DisplayMidLine(1, "Mifare 1卡测试", ALIGN_CENTER, false);
	DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);

	while (inkey() != vk_ESC) {
		rf_open();
		LcdSetIcon(LCD_ICON_CARD, 1);
		flag=0;

		ret = Mif_request(&lenr, resp);
		if (ret != MI_OK) {
			tick_count_end=GetTickCount();
			if ((tick_count_end-tick_count_start)>3000)
				DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);
			goto next;
		}
		ret = Mif_anticoll(&lenr, snr);
		if (ret != MI_OK) {
			DisplayMidLine(4, "anticoll失败", ALIGN_CENTER, false);
			beep_err();
			flag=1;
			goto next;
		}
		
		ret = Mif_select(snr, sak);
		if (ret != MI_OK) {
			rf_close();
			DisplayMidLine(4, "select失败", ALIGN_CENTER, false);
			beep_err();
			flag=1;
			goto next;
		}
		ret = Mif_load_key(0, 5, key);
		if (ret != MI_OK) {
			rf_close();
			DisplayMidLine(4, "load_key失败", ALIGN_CENTER, false);
			beep_err();
			flag=1;
			goto next;
		}
		ret = Mif_authentication(0, 5/*area 5*/, snr);
		if (ret != MI_OK) {
			rf_close();
			DisplayMidLine(4, "认证失败", ALIGN_CENTER, false);
			flag=1;
			goto next;
		}
		
		ret_bool = match_card(snr, 4, &site);
		if (ret_bool==true) {
			if (get_char()==0x0d) {
				memcpy(snr_array[snr_array_ptr].snr,snr,4);
				snr_array[snr_array_ptr].tick_count=GetTickCount();
				snr_array_ptr++;
			}
			else goto next;
		}
		else {
			if (site==0xff) {
				memcpy(snr_array[snr_array_ptr].snr,snr,4);
				snr_array[snr_array_ptr].tick_count=GetTickCount();
				snr_array_ptr++;
			}
			else {
				snr_array[site].tick_count=GetTickCount();
			}
		}
		

		ret = Mif_read(5, resp);
		if (ret != MI_OK) {
			rf_close();
			DisplayMidLine(4, "读卡失败", ALIGN_CENTER, false);
			beep_err();
			flag=1;
			goto next;
		}

		beep_ok();
		DisplayMidLine(4, "刷卡成功", ALIGN_CENTER, false);
		flag=1;
		
		next:
		rf_close();
		SystemSleep(500);
		if (flag==1) tick_count_start=GetTickCount();
	}
	LcdSetIcon(LCD_ICON_CARD, 0);
}

void testMifarePro_2()
{
	BYTE lenr, resp[200],resp1[200], type;
	int ret = 0,site;
	BYTE cmd[] = {0x00, 0x84, 0x00, 0x00, 0x08};
	bool ret_bool;
	BYTE *char_ptr,flag;
	long tick_count_start, tick_count_end;

	clrscr();
	DisplayMidLine(1, "Mifare Pro卡测试", ALIGN_CENTER, false);
	DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);

	while (inkey() != vk_ESC) {
		rf_open();
		LcdSetIcon(LCD_ICON_CARD, 1);
		flag=0;
		
		ret = MIFreset(&lenr, resp);
		if (ret != 0x9000) {
			tick_count_end=GetTickCount();
			if ((tick_count_end-tick_count_start)>3000)
				DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);
			goto next;
		}

		if (resp[0]==0x50) char_ptr=&resp[1];    //type B
		else char_ptr=&resp[2];                //type A
		
		ret_bool = match_card(char_ptr, 4, &site);
		if (ret_bool==true) {
			if (get_char()==0x0d) {
				memcpy(snr_array[snr_array_ptr].snr,char_ptr,4);
				snr_array[snr_array_ptr].tick_count=GetTickCount();
				snr_array_ptr++;
			}
			else goto next;
		}
		else {
			if (site==0xff) {
				memcpy(snr_array[snr_array_ptr].snr,char_ptr,4);
				snr_array[snr_array_ptr].tick_count=GetTickCount();
				snr_array_ptr++;
			}
			else {
				snr_array[site].tick_count=GetTickCount();
			}
		}

		ret = MIFcommand(5, cmd, &lenr, resp1);
		if (ret != 0x9000) {
			DisplayMidLine(4, "执行命令失败", ALIGN_CENTER, false);
			beep_err();
			flag=1;
			goto next;
		}


		beep_ok();
		DisplayMidLine(4, "刷卡成功", ALIGN_CENTER, false);
		flag=1;

		
		next:
		rf_close();
		SystemSleep(500);
		if (flag==1) tick_count_start=GetTickCount();
	}
	LcdSetIcon(LCD_ICON_CARD, 0);
}

//发卡(只允许一次刷一张卡)
void express_Rfid()
{
	unsigned char lenr, uid[16] , resp[200], flag;
	char ret = 0;
	unsigned char  data[48];
	long tick_count_start, tick_count_end;
	unsigned char product_name[21];
	unsigned char product_use[17];
	unsigned char product_time[17]="尚未服用";
	int real_len, i;

	clrscr();
	DisplayMidLine(1, "电子标签发行程序", ALIGN_CENTER, false);
	DisplayMidLine(4, "按任意键进入", ALIGN_CENTER, false);
	if (get_key()==vk_ESC) return;

	while (1) {
		
		clrscr();
		DisplayLine(0,"物品名:", ALIGN_LEFT, false);
		DisplayLine(2,"备注:", ALIGN_LEFT, false);

		gotoxy(7,0);
		if (get_key()==vk_ESC) break;
		while (1) {
			memset(product_name, 0, 21);
			ret=get_chinese(20, product_name, &real_len);
			if ((real_len==0)&&(ret==true)) continue;
			else break;
		}
		if (ret==false) break;

		clrscr();
		memset(resp, 0, 200);
		sprintf(resp, "物品名:%s",product_name);
		LcdDisplayString(0,0,resp);
		DisplayLine(2,"备注:", ALIGN_LEFT, false);

		gotoxy(5,2);
		if (get_key()==vk_ESC) break;
		while (1) {
			memset(product_use, 0, 17);
			ret=get_chinese(16, product_use, &real_len);
			if ((real_len==0)&&(ret==true)) continue;
			else break;
		}
		if (ret==false) break;

		clrscr();
		memset(resp, 0, 200);
		sprintf(resp, "物品名:%s",product_name);
		LcdDisplayString(0,0,resp);
		memset(resp, 0, 200);
		sprintf(resp, "备注:%s",product_use);
		LcdDisplayString(0,2,resp);

		if (get_key()==vk_ESC) break;

		memcpy(data, product_name, 20);
		memcpy(data+20, product_use, 16);
		memcpy(data+36, product_time, 16);

		LcdSetIcon(LCD_ICON_CARD, 1);
		while (1) {
			if (get_char()==vk_ESC) break;

			clrscr();
			DisplayMidLine(1, "电子标签发行程序", ALIGN_CENTER, false);
			DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);
		
			rf_open();
			flag=0;
			
			ret = init_RFID(1);
				if (ret != MI_OK) {
					DisplayMidLine(4, "芯片初始化失败", ALIGN_CENTER, false);
					beep_err();
					goto next;
				}
			ret = RFID_Inventory1(resp);
				if (ret != MI_OK) {	
					tick_count_end=GetTickCount();
					if ((tick_count_end-tick_count_start)>3000){
						DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);
					}
					goto next;			
				}
			
			memset(uid,0,16);
			memcpy(uid,resp,8);
			
			for (i=0;i<13;i++) {
				ret = RFID_Write(2,uid,i,data+i*4,&lenr,resp); 
				if ((ret != MI_OK) || (resp[0] != MI_OK)) {
					DisplayMidLine(4,"写卡失败", ALIGN_CENTER, false);	
					beep_err();
					goto next;
				}
			}

			beep_ok();
			DisplayMidLine(4, "刷卡成功", ALIGN_CENTER, false);
			flag=1;
			
			next:
			rf_close();
			SystemSleep(300);
			if (flag==1) break;
		}

		LcdSetIcon(LCD_ICON_CARD, 0);
	}
}

//写卡
void write_Rfid()
{
	unsigned char lenr, uid[16] , resp[200], flag, tmp[16];
	char ret = 0, *char_ptr1, *char_ptr2;
	unsigned char  data[48];
	long tick_count_start, tick_count_end;
	unsigned char product_name[21];
	unsigned char product_use[17];
	unsigned char product_time[16]="尚未使用";
	int real_len, i;

	flag=1;
	while (inkey() != vk_ESC) {
		if (flag==1) {
			clrscr();
			DisplayMidLine(1, "物品使用情况记录", ALIGN_CENTER, false);
			DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);
			flag=0;
		}

		LcdSetIcon(LCD_ICON_CARD, 1);
		rf_open();
		
		ret = init_RFID(1);
		if (ret != MI_OK) {
			goto next;
		}

		ret = RFID_Inventory1(resp);
		if (ret != MI_OK) {	
			goto next;			
		}
			
		memset(uid,0,16);
		memcpy(uid,resp,8);
/*
		gotoxy(0,0);
		printf("%s",GetCurrentDate());
		printf("%s",GetCurrentTime());
		get_key();
*/
		char_ptr1=(unsigned char *)GetCurrentDate();
		memcpy(product_time, char_ptr1, 8);
		product_time[8]=0x20;
		char_ptr2=(unsigned char *)GetCurrentTime();
		memcpy(product_time+9, char_ptr2, 5);
		memcpy(data+36, product_time, 16);
		
		for (i=9;i<13;i++) {
			ret = RFID_Write(2,uid,i,data+i*4,&lenr,resp); 
			if ((ret != MI_OK) || (resp[0] != MI_OK)) {
				DisplayMidLine(4,"写卡失败", ALIGN_CENTER, false);	
				beep_err();
				flag=1;
				goto next;
			}
		}

		beep_ok();
		rf_close();
		DisplayMidLine(4,"记录成功",ALIGN_CENTER,false);
		flag=1;
		get_key();
		continue;

		next:
		rf_close();
		SystemSleep(300);
		if (flag==1) tick_count_start=GetTickCount();
	}

	LcdSetIcon(LCD_ICON_CARD, 0);
}

//读卡(允许一次刷几张卡)
void read_Rfid()
{
	unsigned char lenr, uid[16] , resp[200], flag, card_num, tmp[16],resp1[200], i, j;
	char ret = 0,ch;
	unsigned char  data[49*16];
	long tick_count_start, tick_count_end;
	unsigned char product_name[21];
	unsigned char product_use[17];
	unsigned char product_time[17];
	int real_len;

	flag=1;
	while (inkey() != vk_ESC) {
		if (flag==1) {
			clrscr();
			DisplayMidLine(1, "电子标签阅读程序", ALIGN_CENTER, false);
			DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);
			flag=0;
		}

		LcdSetIcon(LCD_ICON_CARD, 1);
		rf_open();
		
		ret = init_RFID(1);
		if (ret != MI_OK) {
			goto next;
		}

		ret = RFID_Inventory16(&card_num,resp);
		if (ret != MI_OK) {	
			goto next;			
		}

		memset(data, 0, 61*16);
		for (i=0;i<card_num;i++) {
			ret = RFID_Read(2,resp+i*8,0,13,&lenr,data+49*i); 
			if ((ret != MI_OK) || (data[49*i] != 0x00)) {
				DisplayMidLine(4,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -