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

📄 main.c

📁 手持机嵌入式开发,本代码是基于c-c++.
💻 C
📖 第 1 页 / 共 5 页
字号:
	HDEV dev;
	static BYTE buffer[264];

	clrscr();
	while (!ic_exist()) {
		ShowMessage("AT45D01", "请插入IC卡...", MB_OK | MB_CANCEL, false);
		if (inkey() == vk_ESC) return;
		delay(500);
	}
	clrscr();
	while (!(dev = open(AT45D041, 0))) {
		ShowMessage("AT45D01", "请插入正确卡片", MB_OK | MB_CANCEL, false);
		if (inkey() == vk_ESC) return;
		delay(500);
	}

	clrscr();
	DisplayLine(0, "读取结果", ALIGN_CENTER, false);
	DisplayLine(3, "【取消】【写卡】", ALIGN_RIGHT, false);

	memset(buff, 0, sizeof(buff));
	read(dev, addr, buff, 6);
	DisplayLine(1, buff, ALIGN_RIGHT, false);

	if (get_key() == vk_ESC) {
		close(dev);
		return;
	}

	clrscr();
	gotoxy(0, 1);
	DisplayLine(0, "输入新内容", ALIGN_CENTER, false);
	DisplayOkCancel(MB_OK | MB_CANCEL);
	if (getstr(buff, 6, &len)) {
		write(dev, addr, buff, 6);
	}
	else {
		close(dev);
		return;
	}

	clrscr();
	DisplayMidLine(1, "写入完毕", ALIGN_CENTER, false);
	DisplayMidLine(5, "按任意键继续", ALIGN_CENTER, false);
	get_key();
	close(dev);
}

void testAt1604()
{
	//char buff[10], pwd[] = {0xF0, 0xF0};
	char buff[10], pwd[] = {0xFF, 0xFF}, pwd1[] = {0xF6, 0xF6}, pwd2[] = {0xa5, 0xa5};
	int len;
	int i, addr = 0;
	HDEV dev;

	clrscr();
	while (!ic_exist()) {
		ShowMessage("AT1604", "请插入IC卡...", MB_OK | MB_CANCEL, false);
		if (inkey() == vk_ESC) return;
		delay(500);
	}
	clrscr();
	while (!(dev = open(AT1604, 0))) {
		ShowMessage("AT1604", "请插入正确卡片", MB_OK | MB_CANCEL, false);
		if (inkey() == vk_ESC) return;
		delay(500);
	}

	if (!ic_verify(dev, AT1604_PWD_SC, pwd)) {
		DisplayLine(0, "验密SC错误", ALIGN_CENTER, false);
		DisplayMidLine(3, "默认密码F0F0", ALIGN_CENTER, false);
		DisplayOkCancel(MB_CANCEL);
		get_key();
		close(dev);
		return;
	}

	clrscr();
	DisplayLine(0, "验密SC通过", ALIGN_CENTER, false);
	delay(500);

	if (!ic_verify(dev, AT1604_PWD_SC1, pwd1)) {
		DisplayLine(0, "验密SC1错误", ALIGN_CENTER, false);
		DisplayMidLine(3, "默认密码F6F6", ALIGN_CENTER, false);
		DisplayOkCancel(MB_CANCEL);
		get_key();
		close(dev);
		return;
	}
	clrscr();
	DisplayLine(0, "验密SC1通过", ALIGN_CENTER, false);
	delay(500);

	setopt(SELECT_AT1604_ZONE, AT1604_ZONE_1);
	clrscr();
	DisplayLine(0, "读取结果", ALIGN_CENTER, false);
	DisplayOkCancel(MB_OK);

	memset(buff, 0, sizeof(buff));
	read(dev, addr, buff, 6);
	DisplayLine(1, buff, ALIGN_RIGHT, false);

	if (get_key() == vk_ESC) {
		close(dev);
		return;
	}

	if (!ic_verify(dev, AT1604_PWD_EZ1, pwd1)) {
		DisplayLine(0, "验密EZ1错误", ALIGN_CENTER, false);
		DisplayMidLine(3, "默认密码F6F6", ALIGN_CENTER, false);
		DisplayOkCancel(MB_CANCEL);
		get_key();
		close(dev);
		return;
	}
	clrscr();
	DisplayLine(0, "验密EZ1通过", ALIGN_CENTER, false);
	delay(500);

	clrscr();
	gotoxy(0, 1);
	DisplayLine(0, "输入新内容", ALIGN_CENTER, false);
	DisplayOkCancel(MB_OK | MB_CANCEL);
	if (getstr(buff, 6, &len)) {
		write(dev, addr, buff, 6);
	} else {
		close(dev);
		return;
	}

	clrscr();
	DisplayMidLine(1, "写入完毕", ALIGN_CENTER, false);
	DisplayMidLine(5, "按任意键继续", ALIGN_CENTER, false);
	get_key();
	close(dev);
}

void testAt1608()
{
	char buff[10], pwd1[] = {0x50, 0x21, 0x00}, pwd2[] = {0x50, 0x21, 0x08}, pwd3[] = {0x34, 0x34, 0x34};
	int len;
	int i, addr = 100;
	HDEV dev;

	clrscr();
	while (!ic_exist()) {
		ShowMessage("AT1608", "请插入IC卡...", MB_OK | MB_CANCEL, false);
		if (inkey() == vk_ESC) return;
		delay(500);
	}
	clrscr();
	while (!(dev = open(AT1608, 0))) {
		ShowMessage("AT1608", "请插入正确卡片", MB_OK | MB_CANCEL, false);
		if (inkey() == vk_ESC) return;
		delay(500);
	}

#if 1
	if (!ic_verify(dev, AT1608_PWD_W8, pwd3)) {
		DisplayLine(0, "验密写错误", ALIGN_CENTER, false);
		DisplayMidLine(3, "默认密码502100", ALIGN_CENTER, false);
		DisplayOkCancel(MB_CANCEL);
		if (get_key()) {
			close(dev);
			return;
		}
	}
	clrscr();
	DisplayLine(0, "验密通过", ALIGN_CENTER, false);
	get_key();
#else
	if (!ic_verify(dev, AT1608_PWD_R1, pwd2)) {
		DisplayLine(0, "验密读错误", ALIGN_CENTER, false);
		DisplayMidLine(3, "默认密码502108", ALIGN_CENTER, false);
		DisplayOkCancel(MB_CANCEL);
		if (get_key()) {
			close(dev);
			return;
		}
	}

	clrscr();
	DisplayLine(0, "验密通过", ALIGN_CENTER, false);
	get_key();
#endif

	clrscr();
	DisplayLine(0, "读取结果", ALIGN_CENTER, false);
	DisplayOkCancel(MB_OK);

	memset(buff, 0, sizeof(buff));
	setopt(SELECT_AT1608_ZONE, AT1608_ZONE_1);
	read(dev, addr, buff, 6);
	DisplayLine(1, buff, ALIGN_RIGHT, false);

	if (get_key() == vk_ESC) {
		close(dev);
		return;
	}

#if 0
	clrscr();
	if (!ic_verify(dev, AT1608_PWD_W1, pwd1)) {
		DisplayLine(0, "验密写错误", ALIGN_CENTER, false);
		DisplayMidLine(3, "默认密码502100", ALIGN_CENTER, false);
		DisplayOkCancel(MB_CANCEL);
		if (get_key()) {
			close(dev);
			return;
		}
	}
#endif

	clrscr();
	gotoxy(0, 1);
	DisplayLine(0, "输入新内容", ALIGN_CENTER, false);
	DisplayOkCancel(MB_OK | MB_CANCEL);
	if (getstr(buff, 6, &len)) {
		write(dev, addr, buff, 6);
	} else {
		close(dev);
		return;
	}

	clrscr();
	DisplayMidLine(1, "写入完毕", ALIGN_CENTER, false);
	DisplayMidLine(5, "按任意键继续", ALIGN_CENTER, false);
	get_key();
	close(dev);
}

void testCpuSamCard(HDEV hDev)
{
	BYTE len, buf[100], str[100], cmd[100], cmdlen;
	int ret;

	switch (hDev) {
	case CPU1:
		DisplayMidLine(3, "复位CPU卡", ALIGN_CENTER, false);
		break;
	case CPU1_38400:
		DisplayMidLine(3, "复位CPU38400卡", ALIGN_CENTER, false);
		break;
	case SAM1:
		DisplayMidLine(3, "复位SAM卡", ALIGN_CENTER, false);
		break;
	case SAM1_38400:
		DisplayMidLine(3, "复位SAM38400卡", ALIGN_CENTER, false);
		break;
	}

	delay(500);	
	ret = icc_open(hDev, buf, &len);
	binstr(buf, str, len, true);
	clrscr();
	//printf("返回:%04x,%02x\n数据:%s", ret, (int)len, str);
	printf("返回:%04x,%02x\n", ret, (int)len);
	get_key();
	if (len) {
		clrscr();
		if (ShowInputBox("发送指令", buf, 14, MB_OK | MB_CANCEL) == MR_CANCEL) return;
		if (strlen(buf) == 0) strcpy(buf, "0084000008");
		cmdlen = strbin(buf, cmd, 14, false);
		ret = icc_command(hDev, cmd, cmdlen, buf, &len);
		binstr(buf, str, len, true);
		clrscr();
		printf("返回:%04x,%02x\n数据:%s", ret, (int)len, str);
		get_key();
	}
	icc_close(hDev);
}


// ------------------------------------------------------------------------
// File System Test
void testFormatFlash()
{
	if (ShowMessage("格式化", "所有数据将丢失!", MB_OK | MB_CANCEL, true) == MR_CANCEL)
		return;
		
	DisplayLine(0, "格式化", ALIGN_CENTER, false);
	DisplayMidLine(3, "正在进行...", ALIGN_CENTER, false);
	file_system_format();
	clrscr();
	DisplayMidLine(3, "格式化完成", ALIGN_CENTER, false);
	DisplayOkCancel(MB_OK);
	get_key();
}

int indexFile = 1;

void testCreateFile()
{
	char buffer[300];
	int handle, len;

	if (ShowInputBox("输入文件名", buffer, &len, MB_OK | MB_CANCEL) == MR_CANCEL)
		return;

	if (len == 0)
		sprintf(buffer, "DEMO%d.TXT", indexFile++);
	
	handle = file_create(buffer);
	if (handle < 0) {
		clrscr();
		DisplayLine(0, "创建失败", ALIGN_CENTER, false);
		DisplayLine(1, buffer, ALIGN_LEFT, false);
		DisplayOkCancel(MB_CANCEL);
		get_key();
		return;
	}
	
	clrscr();
	file_close(handle);
	ShowMessage("创建文件", "成功完成", MB_OK, true);
}

void testDeleteFile()
{
	char buffer[300];
	int ret, len;

	if (ShowInputBox("输入文件名", buffer, &len, MB_OK | MB_CANCEL) == MR_CANCEL)
		return;

	if (len == 0)
		sprintf(buffer, "DEMO%d.TXT", indexFile++);
	
	ret = file_delete(buffer);
	if (ret != 0) {
		clrscr();
		ShowMessage("删除文件", "文件不存在或者正在使用中", MB_OK, true);
		return;
	}
	ShowMessage("删除文件", "成功完成", MB_OK, true);
}

void testWriteFile()
{
	int handle, len;
	char name[32], buffer[200];
	
	clrscr();
	if (ShowInputBox("输入文件名", name, &len, MB_OK | MB_CANCEL) == MR_CANCEL)
		return;

	if (len == 0)
		sprintf(name, "DEMO%d.TXT", indexFile);
	
	handle = file_open(name, WRITE_ONLY);
	if (handle < 0) {
		ShowMessage("打开失败", name, MB_OK, true);
		return;
	}

	clrscr();	
	DisplayLine(0, "输入内容", ALIGN_CENTER, false);
	gotoxy(0, 1);
	if (!getabc(buffer, 100, &len)) {
		file_close(handle);
		return;
	}
	
	if (len == 0)
		strcpy(buffer, "Hello World!");

	file_seek(handle, 0, SEEK_FILE_END);
	file_write(handle, buffer, strlen(buffer), &len);
	
	clrscr();
	if (len == 0) {
		ShowMessage("写入错误", buffer, MB_OK, true);
	} else if (len != strlen(buffer)) {
		ShowMessage("写入文件", "长度错误", MB_OK, true);
	} else {
		ShowMessage("写入文件", "成功完成", MB_OK, true);
	}
	file_close(handle);
}

void testReadFile()
{
	int handle, len, file_len;
	char name[32], buffer[200];
	
	clrscr();
	if (ShowInputBox("输入文件名", name, &len, MB_OK | MB_CANCEL) == MR_CANCEL)
		return;
	

	if (len == 0)
		sprintf(name, "DEMO%d.TXT", indexFile);
	
	handle = file_open(name, READ_ONLY);
	if (handle < 0) {
		ShowMessage("打开失败", name, MB_OK, true);
		return;
	}

	file_len = file_length(handle);
	memset(buffer, 0, sizeof(buffer));	
	sprintf(buffer, "%d", file_len);
	ShowMessage("文件长度", buffer, MB_OK, true);
	
	memset(buffer, 0, sizeof(buffer));	
	file_seek(handle, 0, SEEK_FILE_SET);
	len = file_read(handle, buffer, 32);
	file_close(handle);

	ShowMessage("读取内容", buffer, MB_OK, true);
}
// End of test File System

void testMifareOne()
{
	BYTE lenr, resp[200], type;
	BYTE snr[8];
	BYTE sak[32];
	BYTE key[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
	int ret = 0, i;
	BYTE tmp,flag;
	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)>2000)
				DisplayMidLine(4, "请刷卡...", ALIGN_CENTER, false);
			goto next;
		}
		ret = Mif_anticoll(&lenr, snr);
		if (ret != MI_OK) {
			DisplayMidLine(4, "卡冲突", 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 = 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(300);
		if (flag==1) tick_count_start=GetTickCount();
	}
	LcdSetIcon(LCD_ICON_CARD, 0);
}



void testMifarePro()
{
	BYTE lenr, resp[200], type, flag, tmp[10];
	int ret = 0;
	BYTE cmd[] = {0x00, 0x84, 0x00, 0x00, 0x08};
	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;
		}

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

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

void one_two(unsigned char x,unsigned char y,unsigned char ch)
{
  unsigned char tmpch;

  tmpch=((ch>>4)&0x0f)+0x30;
  if (tmpch>=0x3a) tmpch+=0x07;
  LcdDisplayChar(x,y,tmpch);
  tmpch=(ch&0x0f)+0x30;
  if (tmpch>=0x3a) tmpch+=0x07;
  LcdDisplayChar(x+1,y,tmpch);

}

//电子标签连续刷卡(只允许一次刷一张卡)
void testRfid()
{
	unsigned char lenr, uid[16] , resp[200], flag;
	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);

⌨️ 快捷键说明

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