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

📄 main.c

📁 ZLG522S的功能、硬件接口和ZLG500S相同
💻 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;

sbit BEEN = P2^5;
#define BEEN_ON {BEEN=0;delayMs(50);BEEN=1;}

void delayMs(unsigned int a)
{
    unsigned int i, j;
    for(i = a; i > 0; i--)
        for(j = 100; j > 0; j--);
}
main()
{
	INT8U temp;
	BEEN=1;
	main_init();  //定时器2设置
	GetDvcInfo(DataBfr); //验证MCU与zlg500s通信
	BEEN_ON;
	DataBfr[0] = 0xff;
	DataBfr[1] = 0xff;
	DataBfr[2] = 0xff;
	DataBfr[3] = 0xff;
	DataBfr[4] = 0xff;
	DataBfr[5] = 0xff;
	PCDLoadKey(KEYA,0,DataBfr);
	BEEN_ON;
	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();

	   BEEN_ON;

		//测试卡自动检测----串口主动发送回数据,TX交替,E2密码验证,密钥A,读4块
		DataBfr[0] = 0;
		while(PiccAutoDetect(ADSERIALOUT | ADINTENABLE, 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();

		BEEN_ON;

		//测试卡自动检测----串口主动发送回数据,发回后继续检测,检测后将卡挂起,TX全发送,直接密码验证,密钥A,读4块
		DataBfr[0] = 0xff;	DataBfr[1] = 0xff;	DataBfr[2] = 0xff;
		DataBfr[3] = 0xff;	DataBfr[4] = 0xff;	DataBfr[5] = 0xff;
 		while(PiccAutoDetect(ADSERIALOUT | ADINTENABLE | 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(ADINTENABLE | 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 + -