非接触式智能IC卡读写模块应用指导书Word格式文档下载.docx
《非接触式智能IC卡读写模块应用指导书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《非接触式智能IC卡读写模块应用指导书Word格式文档下载.docx(33页珍藏版)》请在冰豆网上搜索。
#definemifs_transfer_en1
#definemifs_value_en1
#definemifs_valuedebit_en1
#definemifs_load_key_en1
#definemifs_reset_en0
#definemifs_close_en0
#definemifs_config_en1
#definemifs_get_info_en1
#definemifs_check_write_en1
#definemifs_set_control_bit_en1
#definemifs_clr_control_bit_en1
#definemifs_buzzer_en1
#definemifs_read_E2_en1
#definemifs_write_E2_en1
#definemifs_write_reg_en1
#definemifs_read_reg_en1
//PICCCommand
#defineIDLE0x00
#defineALL0x01
#defineANTICOLL10x93//anticollisionlevel1
#defineANTICOLL20x95//anticollisionlevel2
#defineANTICOLL30x97//anticollisionlevel3
#defineKEYA0x00
#defineKEYB0x04
#definePICC_DECREMENT0xC0
#definePICC_INCREMENT0xC1
#definePICC_RESTORE0xC2
EXTERNucharidataspi_buffer[26];
//definespi_buffer
#defineSEQNR0
#defineCOMMAND1
#defineSTATUS1
#defineLENGTH2
#defineMODE3
#defineBCNT3
#defineADR3
#defineSERNR3
#defineSIZE3
#defineTIME3
#defineTAGTYPE3
#defineINFO3
#defineDATA3
#defineSECNR4
#defineDATABYTES4
#defineVALUE4
#defineNKEY5
#defineAUTHMODE7
#defineADRCHKWR8
#defineDATACHKWR9
EXTERNucharspi_init(void);
EXTERNucharmifs_request(uchar_Mode,ucharidata*_TagType);
EXTERNucharmifs_anticoll(uchar_Bcnt,ucharidata*_SNR);
EXTERNucharmifs_anticoll2(uchar_Encoll,uchar_Bcnt,ucharidata*_SNR);
EXTERNucharmifs_cascanticoll(uchar_Select_code,uchar_Bcnt,uchar*_SNR);
EXTERNucharmifs_select(ucharidata*_SNR,ucharidata*_Size);
EXTERNucharmifs_cascselect(uchar_Select_code,uchar*_SNR,uchar*_Sak);
EXTERNucharmifs_authentication(uchar_Mode,uchar_SecNr);
EXTERNucharmifs_authentication2(uchar_Mode,uchar_SecNr,uchar_KeyNr);
EXTERNucharmifs_authKey(uchar_Mode,uchar_SecNr,uchar*_Key);
EXTERNucharmifs_halt(void);
EXTERNucharmifs_read(uchar_Adr,ucharidata*_Data);
EXTERNucharmifs_write(uchar_Adr,ucharidata*_Data);
EXTERNucharmifs_ULwrite(uchar_Adr,uchar*_Data);
EXTERNucharmifs_increment(uchar_Adr,longidata*_Value);
EXTERNucharmifs_decrement(uchar_Adr,longidata*_Value);
EXTERNucharmifs_restore(uchar_Adr);
EXTERNucharmifs_transfer(uchar_Adr);
EXTERNucharmifs_value(uchar_Mode,uchar_Adr,longidata*_Value,uchar_Trans_Adr);
EXTERNucharmifs_valuedebit(uchar_Mode,uchar_Adr,longidata*_Value);
EXTERNucharmifs_load_key(uchar_Mode,uchar_SecNr,uchar*_Nkey);
EXTERNucharmifs_reset(uchar_Msec);
EXTERNucharmifs_close(void);
EXTERNucharmifs_config(void);
EXTERNucharmifs_get_info(ucharidata*_Info);
EXTERNucharmifs_check_write(ucharidata*_SNR,uchar_Authmode,uchar_Adr,ucharidata*_Data);
EXTERNucharmifs_set_control_bit();
EXTERNucharmifs_clr_control_bit();
EXTERNucharmifs_buzzer(uchar_Frquence,uchar_10ms);
EXTERNucharmifs_read_E2(uchar_Adr,uchar_Length,ucharidata*_Data);
EXTERNucharmifs_write_E2(uchar_Adr,uchar_Length,ucharidata*_Data);
EXTERNucharmifs_write_reg(uchar_Reg,uchar_Value);
EXTERNucharmifs_read_reg(uchar_Reg,uchar*_Value);
//mifareerror
#defineMI_OK0
#defineMI_NOTAGERR1
#defineMI_CRCERR2
#defineMI_EMPTY3
#defineMI_AUTHERR4
#defineMI_PARITYERR5
#defineMI_CODEERR6
#defineMI_SERNRERR8
#defineMI_NOTAUTHERR10
#defineMI_BITCOUNTERR11
#defineMI_BYTECOUNTERR12
#defineMI_TRANSERR14
#defineMI_WRITEERR15
#defineMI_INCRERR16
#defineMI_DECRERR17
#defineMI_READERR18
#defineMI_QUIT30
//spiError
#defineSPI_OK0
#defineSPI_ERR255
//checkwriteError
#defineMIS_CHK_OK0
#defineMIS_CHK_FAILED1
#defineMIS_CHK_COMPERR2
#undefEXTERN
4.2zlg500.c文件程序清单
#include"
main.h"
#include<
string.h>
mface_3.h"
#define__SRC
zlg500.h"
#undef__SRC
bitbdatanewdata=0;
voidspi_int(void)interrupt0using1
{
spi_rcv(spi_buffer);
newdata=1;
}
ucharzlg500cmd(ucharlength)
{ucharspi_wdg=10;
uchari,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,50mstimerinterrupt
TL0=0xb0;
if(spi_send(spi_buffer,length+1)!
=SPI_OK)
returnSPI_ERR;
ET0=0;
TF0=0;
TR0=1;
SPI_REN();
while(newdata==0&
&
spi_wdg!
=0)
if(TF0==1)
{
TH0=0x2c;
TF0=0;
spi_wdg--;
}
TR0=0;
SPI_RDIS();
if(newdata==0)returnSPI_ERR;
newdata=0;
BCC_sum=spi_buffer[0];
(spi_buffer[LENGTH]+3);
BCC_sum^=spi_buffer[i];
if(BCC_sum==~spi_buffer[spi_buffer[LENGTH]+3])
returnSPI_OK;
elsereturnMI_CRCERR;
#ifmifs_request_en
ucharmifs_request(uchar_Mode,ucharidata*_TagType)
{
spi_buffer[SEQNR]=0;
spi_buffer[COMMAND]=0x41;
spi_buffer[LENGTH]=0x01;
spi_buffer[MODE]=_Mode;
if(zlg500cmd(4)!
if(spi_buffer[STATUS]==MI_OK)
_TagType[0]=spi_buffer[TAGTYPE];
_TagType[1]=spi_buffer[TAGTYPE+1];
returnspi_buffer[STATUS];
#ifmifs_anticoll_en
ucharmifs_anticoll(uchar_Bcnt,ucharidata*_SNR)
spi_buffer[COMMAND]=0x42;
spi_buffer[MODE]=_Bcnt;
memcpy(_SNR,&
spi_buffer[SERNR],4);
#ifmifs_anticoll2_en
ucharmifs_anticoll2(uchar_Encoll,uchar_Bcnt,ucharidata*_SNR)
spi_buffer[COMMAND]=0x71;
spi_buffer[LENGTH]=0x02;
spi_buffer[DATA]=_Encoll;
spi_buffer[DATA+1]=_Bcnt;
if(zlg500cmd(5)!
spi_buffer[DATA],4);
#ifmifs_select_en
ucharmifs_select(ucharidata*_SNR,ucharidata*_Size)
spi_buffer[COMMAND]=0x43;
spi_buffer[LENGTH]=0x04;
memcpy(&
spi_buffer[SERNR],_SNR,4);
if(zlg500cmd(7)!
*_Size=spi_buffer[SIZE];
#ifmifs_authentication_en
ucharmifs_authentication(uchar_Mode,uchar_SecNr)
spi_buffer[COMMAND]=0x44;
spi_buffer[SECNR]=_SecNr;
#ifmifs_authentication2_en
ucharmifs_authentication2(uchar_Mode,uchar_SecNr,uchar_KeyNr)
spi_buffer[COMMAND]=0x72;
spi_buffer[LENGTH]=0x03;
if(_SecNr<
=32)
spi_buffer[SECNR]=_SecNr;
else
spi_buffer[SECNR]=32+((_SecNr-32)<
<
2);
//为了支持S70卡
spi_buffer[DATA+2]=_KeyNr;
if(zlg500cmd(6)!
#ifmifs_authKey_en
ucharmifs_authKey(uchar_Mode,uchar_SecNr,uchar*_Key)
spi_buffer[COMMAND]=0x73;
spi_buffer[LENGTH]=0x08;
spi_buffer[DATA]=_Mode;
spi_buffer[DATA+2],_Key,6);
if(zlg500cmd(11)!
#ifmifs_halt_en
ucharmifs_halt(void)
spi_buffer[COMMAND]=0x45;
spi_buffer[LENGTH]=0x00;
if(zlg500cmd(3)!
#ifmifs_read_en
ucharmifs_read(uchar_Adr,ucharidata*_Data)
spi_buffer[COMMAND]=0x46;
spi_buffer[ADR]=_Adr;
memcpy(_Data,&
spi_buffer[DATABYTES-1],16);
#ifmifs_write_en
ucharmifs_write(uchar_Adr,ucharidata*_Data)
spi_buffer[COMMAND]=0x47;
spi_buffer[LENGTH]=17;
spi_buffer[DATABYTES],_Data,16);
if(zlg500cmd(20)!
#ifmifs_increment_en
ucharmifs_increment(uchar_Adr,longidata*_Value)
{uchar*temp=(uchar*)_Value;
spi_buffer[COMMAND]=0x48;
spi_buffer[LENGTH]=5;
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)!
#ifmifs_decrement_en
ucharmifs_decrement(uchar_Adr,longidata*_Value)
uchar*temp=(uchar*)_Value;
spi_buffer[COMMAND]=0x49;
#ifmifs_restore_en
ucharmifs_restore(uchar_Adr)