📄 zlg500b.c
字号:
if(ser_comm()!=COMM_OK) //全部的功能都有了
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_restore_en
uchar mifs_restore(uchar _Adr) //将所访问的单元块的字节数保存在卡的内部寄存器中
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x4A;
ser_buffer[LENGTH]=1;
ser_buffer[DATA]=_Adr;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_transfer_en
uchar mifs_transfer(uchar _Adr) //将卡的内部寄存器内容转送给所选块地址在此操作前必须通过验证这个函数只能在Increment,Decrement,或Restore操作后
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x4B;
ser_buffer[LENGTH]=1;
ser_buffer[DATA]=_Adr;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_load_key_en
uchar mifs_load_key(uchar _Mode,uchar _SecNr,uchar *_Nkey) //改变存贮在EEPROM的的密钥RC500
{ //_SecNr所访问卡的扇区号
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x4C;
ser_buffer[LENGTH]=0x08;
ser_buffer[DATA]=_Mode;
ser_buffer[DATA+1]=_SecNr;
memcpy(&ser_buffer[DATA+2],_Nkey,6); //将这六个字节的密钥移到数据帧中
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_reset_en
uchar mifs_reset(uchar _Msec) //关闭天线输出的MS值,使卡因为没有能量而复位
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x4E;
ser_buffer[LENGTH]=1;
ser_buffer[DATA]=_Msec;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_get_info_en
uchar mifs_get_info(uchar idata *_Info) //读取固件信息RC500序列号
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x4F;
ser_buffer[LENGTH]=0;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
memcpy(_Info,&ser_buffer[DATA],ser_buffer[LENGTH]); //转存
}
return ser_buffer[STATUS];
}
#endif
#if mifs_close_en
uchar mifs_close(void) //关闭RC500
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x3F;
ser_buffer[LENGTH]=0;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
//#if mifs_config_en
uchar mifs_config(void) //复位且配置RC500
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x52;
ser_buffer[LENGTH]=0;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
//#endif
#if mifs_check_write_en
uchar mifs_check_write(uchar idata *_SNR,uchar _Authmode,uchar _Adr,uchar idata *_Data) //将所传送的数据和上一所写的数据进行比较
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x53;
ser_buffer[LENGTH]=22;
memcpy(&ser_buffer[DATA],_SNR,4); //所要检查卡的序号
ser_buffer[DATA+4]=_Authmode;
ser_buffer[DATA+5]=_Adr;
memcpy(&ser_buffer[DATA+6],_Data,16); //16字节的数据进行复制
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_set_control_bit_en
uchar mifs_set_control_bit() //将控制位置为高电平CTRL
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x50;
ser_buffer[LENGTH]=0;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_clr_control_bit_en
uchar mifs_clr_control_bit() //将控制位置为高电平
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x51;
ser_buffer[LENGTH]=0;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_buzzer_en
uchar mifs_buzzer(uchar _Frquence,uchar _Opentm,uchar _Closetm,uchar _Repcnt) //输出驱动蜂鸣器信号
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x60;
ser_buffer[LENGTH]=4;
ser_buffer[DATA]=_Frquence;
ser_buffer[DATA+1]=_Opentm;
ser_buffer[DATA+2]=_Closetm;
ser_buffer[DATA+3]=_Repcnt;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_read_E2_en
uchar mifs_read_E2(uchar _Adr,uchar _Length,uchar idata *_Data) //读RC500内EEPROM的内容
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x61;
ser_buffer[LENGTH]=2;
ser_buffer[DATA]=_Adr;
ser_buffer[DATA+1]=_Length;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
memcpy(_Data,&ser_buffer[DATA],_Length); //将数据转出
}
return ser_buffer[STATUS];
}
#endif
#if mifs_write_E2_en
uchar mifs_write_E2(uchar _Adr,uchar _Length,uchar idata *_Data) //写数据到RC500内EEPROM
{
ser_buffer[0]=0;
ser_buffer[COMMAND]=0x62;
ser_buffer[LENGTH]=_Length+2;
ser_buffer[DATA]=_Adr;
ser_buffer[DATA+1]=_Length;
memcpy(&ser_buffer[DATA+2],_Data,_Length);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_value_en
uchar mifs_value(uchar _Mode,uchar _Adr,long idata *_Value,uchar _Trans_Adr) //包含加\减\恢复函数.并带自动传送
{
uchar *temp=(uchar *)_Value;
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x70;
ser_buffer[LENGTH]=7;
ser_buffer[DATA]=_Mode;
ser_buffer[DATA+1]=_Adr;
ser_buffer[DATA+2]=*(temp+3);
ser_buffer[DATA+3]=*(temp+2);
ser_buffer[DATA+4]=*(temp+1);
ser_buffer[DATA+5]=*temp;
ser_buffer[DATA+6]=_Trans_Adr;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_cascanticoll_en
uchar mifs_cascanticoll(uchar _Select_code,uchar _Bcnt,uchar *_SNR) //可实现三层防碰撞协议通过_Select_code实现
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x74;
ser_buffer[LENGTH]=0x02;
ser_buffer[DATA]=_Select_code;
ser_buffer[DATA+1]=_Bcnt;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
memcpy(_SNR,&ser_buffer[DATA],4); //将卡的序列号转出
}
return ser_buffer[STATUS];
}
#endif
#if mifs_cascselect_en
uchar mifs_cascselect(uchar _Select_code,uchar *_SNR,uchar *_Sak) //实现三层选择
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x75;
ser_buffer[LENGTH]=0x05;
ser_buffer[DATA]=_Select_code;
memcpy(&ser_buffer[DATA+1],_SNR,4);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
if(ser_buffer[STATUS]==MI_OK)
{
*_Sak=ser_buffer[DATA];
}
return ser_buffer[STATUS];
}
#endif
#if mifs_ULwrite_en
uchar mifs_ULwmrite(uchar _Adr,uchar *_Data) //向卡中相应地址页写4个字节数据
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x76;
ser_buffer[LENGTH]=0x05;
ser_buffer[DATA]=_Adr;
memcpy(&ser_buffer[DATA+1],_Data,4);
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_valuedebit_en
uchar mifs_valuedebit(uchar _Mode,uchar _Adr,long idata *_Value) //带内部自动传送的值操作,支持Mifare Light
{
uchar *temp=(uchar *)_Value;
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x77;
ser_buffer[LENGTH]=6;
ser_buffer[DATA]=_Mode;
ser_buffer[DATA+1]=_Adr;
ser_buffer[DATA+2]=*(temp+3);
ser_buffer[DATA+3]=*(temp+2);
ser_buffer[DATA+4]=*(temp+1);
ser_buffer[DATA+5]=*temp;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_write_reg_en
uchar mifs_write_reg(uchar _Reg,uchar _Value) //写RC500内寄存器
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x3d;
ser_buffer[LENGTH]=2;
ser_buffer[DATA]=_Reg;
ser_buffer[DATA+1]=_Value;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
return ser_buffer[STATUS];
}
#endif
#if mifs_read_reg_en
uchar mifs_read_reg(uchar _Reg,uchar *_Value) //读寄存器
{
ser_buffer[SEQNR]=0;
ser_buffer[COMMAND]=0x3e;
ser_buffer[LENGTH]=1;
ser_buffer[DATA]=_Reg;
if(ser_comm()!=COMM_OK)
return COMM_ERR;
*_Value = ser_buffer[DATA];
return ser_buffer[STATUS];
}
#endif
//end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -