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

📄 zlg500.c

📁 读卡程序
💻 C
字号:
#include "main.h"
#include <string.h>
#include "mface_3.h"

#define __SRC
#include "zlg500.h"
#undef	__SRC

bit bdata newdata=0;
	
void spi_int(void) interrupt 0 using 1
{
	spi_rcv(spi_buffer);
	newdata=1;
}

uchar zlg500cmd(uchar length)
{	uchar spi_wdg=10;
	uchar i,BCC_sum;
	
	spi_buffer[length]=spi_buffer[0];
	for(i=1;i<length;i++)
	{
		spi_buffer[length]^=spi_buffer[i];
	}
	spi_buffer[length]=~spi_buffer[length];
	
	TH0=0x2c;          //Fosc=11059200,50ms timer interrupt
	TL0=0xb0;
	
	if(spi_send(spi_buffer,length+1)!=SPI_OK)
		return SPI_ERR;
	
	ET0=0;
	TF0=0;
	TR0=1;
	SPI_REN();
	while(newdata==0&&spi_wdg!=0)
	{
		if(TF0==1)
		{
			TH0=0x2c; 
	    TL0=0xb0;
			TF0=0;
			spi_wdg--;
		}
	}
	TR0=0;
	SPI_RDIS();
	
	if(newdata==0)	return SPI_ERR;
	newdata=0;
	
	
	BCC_sum=spi_buffer[0];
	for(i=1;i<(spi_buffer[LENGTH]+3);i++)
	{
		BCC_sum^=spi_buffer[i];
	}
	if(BCC_sum==~spi_buffer[spi_buffer[LENGTH]+3])
		return SPI_OK;
	else	return MI_CRCERR;
}

#if mifs_request_en
uchar mifs_request(uchar _Mode,uchar idata *_TagType)
{	
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x41;
	spi_buffer[LENGTH]=0x01;
	spi_buffer[MODE]=_Mode;
	
	if(zlg500cmd(4)!=SPI_OK)
		return SPI_ERR;
		
	if(spi_buffer[STATUS]==MI_OK)
	{
		_TagType[0]=spi_buffer[TAGTYPE];
		_TagType[1]=spi_buffer[TAGTYPE+1];
	}
	return spi_buffer[STATUS];
}
#endif

#if mifs_anticoll_en
uchar mifs_anticoll(uchar _Bcnt,uchar idata *_SNR)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x42;
	spi_buffer[LENGTH]=0x01;
	spi_buffer[MODE]=_Bcnt;
	
	if(zlg500cmd(4)!=SPI_OK)
		return SPI_ERR;
		
	if(spi_buffer[STATUS]==MI_OK)
	{
		memcpy(_SNR,&spi_buffer[SERNR],4);
	}
	return spi_buffer[STATUS];
}
#endif

#if mifs_anticoll2_en
uchar mifs_anticoll2(uchar _Encoll,uchar _Bcnt,uchar idata *_SNR)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x71;
	spi_buffer[LENGTH]=0x02;
	spi_buffer[DATA]=_Encoll;
	spi_buffer[DATA+1]=_Bcnt;
	
	if(zlg500cmd(5)!=SPI_OK)
		return SPI_ERR;
		
	if(spi_buffer[STATUS]==MI_OK)
	{
		memcpy(_SNR,&spi_buffer[DATA],4);
	}
	return spi_buffer[STATUS];
}
#endif

#if mifs_select_en
uchar mifs_select(uchar idata *_SNR,uchar idata *_Size)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x43;
	spi_buffer[LENGTH]=0x04;
	memcpy(&spi_buffer[SERNR],_SNR,4);
		
	if(zlg500cmd(7)!=SPI_OK)
		return SPI_ERR;
		
	if(spi_buffer[STATUS]==MI_OK)
	{
		*_Size=spi_buffer[SIZE];
	}
	return spi_buffer[STATUS];	
}
#endif

#if mifs_authentication_en
uchar mifs_authentication(uchar _Mode,uchar _SecNr)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x44;
	spi_buffer[LENGTH]=0x02;
	spi_buffer[MODE]=_Mode;
	spi_buffer[SECNR]=_SecNr;
	
	if(zlg500cmd(5)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];	
}
#endif

#if mifs_authentication2_en
uchar mifs_authentication2(uchar _Mode,uchar _SecNr,uchar _KeyNr)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x72;
	spi_buffer[LENGTH]=0x03;
	spi_buffer[MODE]=_Mode;
	spi_buffer[SECNR]=_SecNr;
	spi_buffer[DATA+2]=_KeyNr;
	
	if(zlg500cmd(6)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];	
}
#endif

#if mifs_authKey_en
uchar mifs_authKey(uchar _Mode,uchar _SecNr,uchar *_Key)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x73;
	spi_buffer[LENGTH]=0x08;
	spi_buffer[DATA]=_Mode;
	spi_buffer[DATA+1]=_SecNr;
	memcpy(&spi_buffer[DATA+2],_Key,6);
		
	if(zlg500cmd(11)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];	
}
#endif

#if mifs_halt_en
uchar mifs_halt(void)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x45;
	spi_buffer[LENGTH]=0x00;
	
	if(zlg500cmd(3)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];	
}
#endif

#if mifs_read_en
uchar mifs_read(uchar _Adr,uchar idata *_Data)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x46;
	spi_buffer[LENGTH]=0x01;
	spi_buffer[ADR]=_Adr;
		
	if(zlg500cmd(4)!=SPI_OK)
		return SPI_ERR;
		
	if(spi_buffer[STATUS]==MI_OK)
	{
		memcpy(_Data,&spi_buffer[DATABYTES-1],16);
	}
	return spi_buffer[STATUS];		
}
#endif

#if mifs_write_en
uchar mifs_write(uchar _Adr,uchar idata *_Data)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x47;
	spi_buffer[LENGTH]=17;
	spi_buffer[ADR]=_Adr;
	memcpy(&spi_buffer[DATABYTES],_Data,16);
		
	if(zlg500cmd(20)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];		
}
#endif

#if mifs_increment_en
uchar mifs_increment(uchar _Adr,long idata *_Value)
{	uchar *temp=(uchar *)_Value;
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x48;
	spi_buffer[LENGTH]=5;
	spi_buffer[ADR]=_Adr;
	spi_buffer[VALUE]=*(temp+3);
	spi_buffer[VALUE+1]=*(temp+2);
	spi_buffer[VALUE+2]=*(temp+1);
	spi_buffer[VALUE+3]=*temp;
			
	if(zlg500cmd(8)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_decrement_en
uchar mifs_decrement(uchar _Adr,long idata *_Value)
{
	uchar *temp=(uchar *)_Value;
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x49;
	spi_buffer[LENGTH]=5;
	spi_buffer[ADR]=_Adr;
	spi_buffer[VALUE]=*(temp+3);
	spi_buffer[VALUE+1]=*(temp+2);
	spi_buffer[VALUE+2]=*(temp+1);
	spi_buffer[VALUE+3]=*temp;
			
	if(zlg500cmd(8)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_restore_en
uchar mifs_restore(uchar _Adr)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x4A;
	spi_buffer[LENGTH]=1;
	spi_buffer[ADR]=_Adr;
	
	if(zlg500cmd(4)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];	
}
#endif

#if mifs_transfer_en
uchar mifs_transfer(uchar _Adr)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x4B;
	spi_buffer[LENGTH]=1;
	spi_buffer[ADR]=_Adr;
	
	if(zlg500cmd(4)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_load_key_en
uchar mifs_load_key(uchar _Mode,uchar _SecNr,uchar *_Nkey)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x4C;
	spi_buffer[LENGTH]=0x08;
	spi_buffer[MODE]=_Mode;
	spi_buffer[SECNR]=_SecNr;
	memcpy(&spi_buffer[NKEY],_Nkey,6);
	
	if(zlg500cmd(11)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_reset_en
uchar mifs_reset(uchar _Msec)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x4E;
	spi_buffer[LENGTH]=1;
	spi_buffer[TIME]=_Msec;
	
	if(zlg500cmd(4)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_get_info_en
uchar mifs_get_info(uchar idata *_Info)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x4F;
	spi_buffer[LENGTH]=0;
	
	if(zlg500cmd(3)!=SPI_OK)
		return SPI_ERR;
		
	if(spi_buffer[STATUS]==MI_OK)
	{
		memcpy(_Info,&spi_buffer[INFO],spi_buffer[LENGTH]);
	}
	return spi_buffer[STATUS];	
}
#endif

#if mifs_close_en
uchar mifs_close(void)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x3F;
	spi_buffer[LENGTH]=0;
	
	if(zlg500cmd(3)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_config_en
uchar mifs_config(void)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x52;
	spi_buffer[LENGTH]=0;
	
	if(zlg500cmd(3)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_check_write_en
uchar mifs_check_write(uchar idata *_SNR,uchar _Authmode,uchar _Adr,uchar idata *_Data)
{
	spi_buffer[0]=0;
	spi_buffer[COMMAND]=0x53;
	spi_buffer[LENGTH]=22;
	memcpy(&spi_buffer[SERNR],_SNR,4);
	spi_buffer[AUTHMODE]=_Authmode;
	spi_buffer[ADRCHKWR]=_Adr;
	memcpy(&spi_buffer[DATACHKWR],_Data,16);
	
	if(zlg500cmd(25)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_set_control_bit_en
uchar mifs_set_control_bit()
{
	spi_buffer[0]=0;
	spi_buffer[COMMAND]=0x50;
	spi_buffer[LENGTH]=0;
			
	if(zlg500cmd(3)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_clr_control_bit_en
uchar mifs_clr_control_bit()
{
	spi_buffer[0]=0;
	spi_buffer[COMMAND]=0x51;
	spi_buffer[LENGTH]=0;
			
	if(zlg500cmd(3)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_buzzer_en
uchar mifs_buzzer(uchar _Frquence,uchar _10ms)
{
	spi_buffer[0]=0;
	spi_buffer[COMMAND]=0x60;
	spi_buffer[LENGTH]=2;
	spi_buffer[3]=_Frquence;
	spi_buffer[4]=_10ms;
		
	if(zlg500cmd(5)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_read_E2_en
uchar mifs_read_E2(uchar _Adr,uchar _Length,uchar idata *_Data)
{
	spi_buffer[0]=0;
	spi_buffer[COMMAND]=0x61;
	spi_buffer[LENGTH]=2;
	spi_buffer[ADR]=_Adr;
	spi_buffer[4]=_Length;
		
	if(zlg500cmd(5)!=SPI_OK)
		return SPI_ERR;
		
	if(spi_buffer[STATUS]==MI_OK)
	{
		memcpy(_Data,&spi_buffer[INFO],_Length);
	}
	return spi_buffer[STATUS];
}
#endif

#if mifs_write_E2_en
uchar mifs_write_E2(uchar _Adr,uchar _Length,uchar idata *_Data)
{
	spi_buffer[0]=0;
	spi_buffer[COMMAND]=0x62;
	spi_buffer[LENGTH]=_Length+2;
	spi_buffer[ADR]=_Adr;
	spi_buffer[4]=_Length;
	memcpy(&spi_buffer[5],_Data,_Length);
		
	if(zlg500cmd(_Length+5)!=SPI_OK)
		return SPI_ERR;
		
	return spi_buffer[STATUS];
}
#endif

#if mifs_value_en
uchar mifs_value(uchar _Mode,uchar _Adr,long idata *_Value,uchar _Trans_Adr)
{
	uchar *temp=(uchar *)_Value;

	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x70;
	spi_buffer[LENGTH]=7;
	spi_buffer[DATA]=_Mode;
	spi_buffer[DATA+1]=_Adr;
	spi_buffer[DATA+2]=*(temp+3);
	spi_buffer[DATA+3]=*(temp+2);
	spi_buffer[DATA+4]=*(temp+1);
	spi_buffer[DATA+5]=*temp;
	spi_buffer[DATA+6]=_Trans_Adr;
		
	if(zlg500cmd(10)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}  
#endif

#if mifs_cascanticoll_en
uchar mifs_cascanticoll(uchar _Select_code,uchar _Bcnt,uchar *_SNR)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x74;
	spi_buffer[LENGTH]=0x02;
	spi_buffer[DATA]=_Select_code;
	spi_buffer[DATA+1]=_Bcnt;
	
	if(zlg500cmd(5)!=SPI_OK)
		return SPI_ERR;
		
	if(spi_buffer[STATUS]==MI_OK)
	{
		memcpy(_SNR,&spi_buffer[DATA],4);
	}
	return spi_buffer[STATUS];
}
#endif

#if mifs_cascselect_en
uchar mifs_cascselect(uchar _Select_code,uchar *_SNR,uchar *_Sak)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x75;
	spi_buffer[LENGTH]=0x05;
	spi_buffer[DATA]=_Select_code;
	memcpy(&spi_buffer[DATA+1],_SNR,4);
		
	if(zlg500cmd(8)!=SPI_OK)
		return SPI_ERR;
		
	if(spi_buffer[STATUS]==MI_OK)
	{
		*_Sak=spi_buffer[DATA];
	}
	return spi_buffer[STATUS];	
}
#endif

#if mifs_ULwrite_en
uchar mifs_ULwrite(uchar _Adr,uchar *_Data)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x76;
	spi_buffer[LENGTH]=0x05;
	spi_buffer[DATA]=_Adr;
	memcpy(&spi_buffer[DATA+1],_Data,4);
		
	if(zlg500cmd(8)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_valuedebit_en
uchar mifs_valuedebit(uchar _Mode,uchar _Adr,long idata *_Value)
{
	uchar *temp=(uchar *)_Value;

	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x77;
	spi_buffer[LENGTH]=6;
	spi_buffer[DATA]=_Mode;
	spi_buffer[DATA+1]=_Adr;
	spi_buffer[DATA+2]=*(temp+3);
	spi_buffer[DATA+3]=*(temp+2);
	spi_buffer[DATA+4]=*(temp+1);
	spi_buffer[DATA+5]=*temp;
		
	if(zlg500cmd(9)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_write_reg_en
uchar mifs_write_reg(uchar _Reg,uchar _Value)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x3d;
	spi_buffer[LENGTH]=2;
	spi_buffer[DATA]=_Reg;
	spi_buffer[DATA+1]=_Value;
			
	if(zlg500cmd(5)!=SPI_OK)
		return SPI_ERR;
	
	return spi_buffer[STATUS];
}
#endif

#if mifs_read_reg_en
uchar mifs_read_reg(uchar _Reg,uchar *_Value)
{
	spi_buffer[SEQNR]=0;
	spi_buffer[COMMAND]=0x3e;
	spi_buffer[LENGTH]=1;
	spi_buffer[DATA]=_Reg;
				
	if(zlg500cmd(5)!=SPI_OK)
		return SPI_ERR;
	
	*_Value = spi_buffer[DATA];
	return spi_buffer[STATUS];
}
#endif

⌨️ 快捷键说明

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