📄 main.c
字号:
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 + -