基于51单片机的刷卡门禁系统毕业论文 联系客服

发布时间 : 星期日 文章基于51单片机的刷卡门禁系统毕业论文更新完毕开始阅读7bc0ce03e55c3b3567ec102de2bd960590c6d9a8

}

}

for(i = 0; i < temp; i++) { }

UID[i] = RevBuffer[i]; 把临时寄存器中的卡号放在UID专用寄存器中

* 校验收到的UID *

temp = Check_UID(); if(temp == FALSE) { } return(0);

return(FM1702_SERNRERR);

return(0);

**************************************************************** *名称: Check_UID *

*功能: 该函数实现对收到的卡片的序列号的判断* *输入: NA *

*输出: TRUE: 序列号正确* * FALSE: 序列号错误*

**************************************************************** uchar Check_UID() {

uchar uchar

temp = 0x00; for(i = 0; i < 5; i++) { }

temp = temp ^ UID[i];对卡号异或运算,即二数相同为0,不同为1

正确结果为0

temp; i;

}

if(temp == 0) { }

return FALSE;

return TRUE;

**************************************************************** *名称: Select_Card *

*功能: 该函数实现对放入FM1702操作范围之内的某张卡片进行选择* *输入: NA *

*输出: FM1702_NOTAGERR: 无卡* * FM1702_PARITYERR: 奇偶校验错* * FM1702_CRCERR: CRC校验错*

* FM1702_BYTECOUNTERR: 接收字节错误* * FM1702_OK: 应答正确* * FM1702_SELERR: 选卡出错*

**************************************************************** uchar Select_Card() {

unsigned char

temp, i;

RevBuffer[0] = RF_CMD_SELECT;写0x93命令时关闭发送以及接收CRC校验以及

开启奇校验

RevBuffer[1] = 0x70; 当发送PICC_REQSTD 命令时RegBitFraming 要装入0x07 for(i = 0; i < 5; i++) { }

SPIWrite(0x22,0x0f);选择数据校验的种类和模式

temp = Command_Send(7, RevBuffer, Transceive);Transceive=1EH(接收命令) if(temp == FALSE) {

RevBuffer[i + 2] = UID[i]; 把5个卡序列号转放入缓冲区

} else {

return(1);

Read_FIFO(RevBuffer); temp = *RevBuffer;

* 从FIFO中读取应答信息, 读取卡片容量*

返回卡片容量S50卡:08,S70卡:18

if((temp == 0x18) || (temp == 0x08) || (temp == 0x28) || (temp == 0x53)) * 判断应答

信号是否正确 * }

**************************************************************** *名称: Load_keyE *

*功能: 该函数实现把E2中密码存入FM1702的keyRevBuffer中* *输入: Secnr: EE起始地址* *输出: True: 密钥装载成功* * False: 密钥装载失败*

**************************************************************** uchar Load_key_CPY(uchar *buff) {

char status; }

else

return(FM1702_SELERR); return(0);

uchar coded_keys[12];

uchar

temp;

M500HostCodeKey(buff,coded_keys);

temp=Command_Send(0x0c,coded_keys,LoadKey);* LoadKey将密钥从FIFO缓存复

制到KEY缓存 0x19*

if(temp == FALSE) 0x0c为12个字节长度 coded_keys为指向地址寄存器 {

return FM1702_LOADKEYERR;

}

status=(SPIRead(ErrorFlag)) & 0x40;判断loadkey执行是否正确 if (status==0x40)

return FM1702_AUTHERR; return FM1702_OK; }

转换密钥格式

char M500HostCodeKey( uchar *uncoded, uchar *coded) {

uchar cnt = 0; uchar ln = 0; uchar = 0; for (cnt = 0; cnt < 6; cnt++) {

ln = uncoded[cnt] & 0x0F; = uncoded[cnt] >> 4;

coded[cnt * 2 + 1] = (~ln << 4) | ln; coded[cnt * 2 ] = (~ << 4) | ; } return 0; }

**************************************************************** *名称: Authentication *

*功能: 该函数实现密码认证的过程* *输入: UID: 卡片序列号地址* * SecNR: 扇区号*

*输出: FM1702_NOTAGERR: 无卡* * FM1702_PARITYERR: 奇偶校验错* * FM1702_CRCERR: CRC校验错* * FM1702_OK: 应答正确*

* FM1702_AUTHERR: 权威认证有错*