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

📄 main.c

📁 zlg500S 刷卡机 I2C 总线51程序
💻 C
字号:
#define	main_GLOBALS
#include "config.h"
#include "main.h"
#include "delay.h"
#include "zlg500s.h"
#include "zlg500S_comm.h"

static void main_init();
INT8U DataBfr[16];
INT8U Card_Snr[4];
INT8U TxMode;
INT8U Atq[2];
INT8U Sak;

main()
{
	INT8U temp;

	main_init();
	GetDvcInfo(DataBfr);
	DataBfr[0] = 0xff;
	DataBfr[1] = 0xff;
	DataBfr[2] = 0xff;
	DataBfr[3] = 0xff;
	DataBfr[4] = 0xff;
	DataBfr[5] = 0xff;
	PCDLoadKey(KEYA,0,DataBfr);

	while(1)
	{
		if(PiccRequest(REQSTD,DataBfr) != OK)	continue;
		if(PiccAnticoll(SELCODE1,0,Card_Snr)!=OK)	continue;
		if(PiccSelect(SELCODE1,Card_Snr,DataBfr)!=OK)	continue;
		if(PiccAuthE2(KEYA,Card_Snr,0,4)!=OK)	continue;
		if(PiccRead(4,DataBfr)!=OK)	continue;
		DataBfr[0] = 0x10;	DataBfr[4] = 0xef;	DataBfr[8] = 0x10;
		DataBfr[1] = 0x0;	DataBfr[5] = 0xff;	DataBfr[9] = 0x0;
		DataBfr[2] = 0x0;	DataBfr[6] = 0xff;	DataBfr[10] = 0x0;
		DataBfr[3] = 0x0;	DataBfr[7] = 0xff;	DataBfr[11] = 0x0;
		DataBfr[12] = 0x04;	DataBfr[13] = 0xfb;	DataBfr[14] = 0x04;	DataBfr[15] = 0xfb;
		if(PiccWrite(4,DataBfr)!=OK)	continue;
		DataBfr[0] = 0x0;
		if(PiccRead(4,DataBfr)!=OK)		continue;
		DataBfr[0] = 0x01;
		DataBfr[1] = 0x0;
		DataBfr[2] = 0x0;
		DataBfr[3] = 0x0;
		if(PiccValue(DECREMENT,4,DataBfr,5)!=OK)	continue;
		if(PiccValue(INCREMENT,4,DataBfr,6)!=OK)	continue;
		if(PiccRead(5,DataBfr)!=OK)		continue;
		if(PiccRead(6,DataBfr)!=OK)		continue;
		PiccHalt();

		//测试卡自动检测----不连续检测,卡不挂起,TX交替,E2密码验证,密钥A,读4块
		DataBfr[0] = 0;
		while(PiccAutoDetect(0, ADTXALERT, REQSTD, 'E', KEYA, DataBfr, 4) != 0);
		while(PiccADRcv(&TxMode,Atq,&Sak,Card_Snr,DataBfr) != 0);	
		DataBfr[0] = 0x10;	DataBfr[4] = 0xef;	DataBfr[8] = 0x10;
		DataBfr[1] = 0x0;	DataBfr[5] = 0xff;	DataBfr[9] = 0x0;
		DataBfr[2] = 0x0;	DataBfr[6] = 0xff;	DataBfr[10] = 0x0;
		DataBfr[3] = 0x0;	DataBfr[7] = 0xff;	DataBfr[11] = 0x0;
		DataBfr[12] = 0x04;	DataBfr[13] = 0xfb;	DataBfr[14] = 0x04;	DataBfr[15] = 0xfb;
		if(PiccWrite(4,DataBfr)!=OK)	continue;
		DataBfr[0] = 0x0;
		if(PiccRead(4,DataBfr)!=OK)		continue;
		DataBfr[0] = 0x01;
		DataBfr[1] = 0x0;
		DataBfr[2] = 0x0;
		DataBfr[3] = 0x0;
		if(PiccValue(DECREMENT,4,DataBfr,5)!=OK)	continue;
		if(PiccValue(INCREMENT,4,DataBfr,6)!=OK)	continue;
		if(PiccRead(5,DataBfr)!=OK)		continue;
		if(PiccRead(6,DataBfr)!=OK)		continue;
		PiccHalt();

		//测试卡自动检测----发回后继续检测,检测后将卡挂起,TX全发送,直接密码验证,密钥A,读4块
		DataBfr[0] = 0xff;	DataBfr[1] = 0xff;	DataBfr[2] = 0xff;
		DataBfr[3] = 0xff;	DataBfr[4] = 0xff;	DataBfr[5] = 0xff;
 		while(PiccAutoDetect(ADCONTINUE | ADHALT, ADALLTX, REQSTD, 'F', KEYA, DataBfr, 4) != 0);
		temp = 3;
		while(temp)
		{	
			if(PiccADRcv(&TxMode,Atq,&Sak,Card_Snr,DataBfr) == 0)
				temp--;
		}
		PiccReadADDT(ADRFU,&TxMode,Atq,&Sak,Card_Snr,DataBfr);

		//测试卡自动检测----不连续检测,检测后将卡挂起,TX全发送,直接密码验证,密钥A,读4块
		DataBfr[0] = 0xff;	DataBfr[1] = 0xff;	DataBfr[2] = 0xff;
		DataBfr[3] = 0xff;	DataBfr[4] = 0xff;	DataBfr[5] = 0xff;
 		while(PiccAutoDetect(ADHALT, ADALLTX, REQSTD, 'F', KEYA, DataBfr, 4) != 0);
		temp = 3;
		while(temp)
		{
			if(!zlg500S_Int)
			{					//读回数据,继续检测
				if(PiccReadADDT(ADRFU | ADREENABLE,&TxMode,Atq,&Sak,Card_Snr,DataBfr) == 0)
					temp--;
			}
		}
		PiccReadADDT(ADRFU,&TxMode,Atq,&Sak,Card_Snr,DataBfr);	//读回数据,停止检测

	}
}

void main_init()
{
	//单片机内部资源初始化
	T2_timeout_init(RCAP2_5ms);
	//中断
	EA = 1;

	ZLG500S_COMM_Init();

}


⌨️ 快捷键说明

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