📄 rfidcard.c
字号:
#pragma large
#include "RFIDCARD.h"
#if CARD_MODULE == 1
#include <reg52.h>
#include "OS.h"
#include "keypad.h"
UINT8 xdata RFIDBuffer[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
UINT8 xdata RFIDCard[5]={0,0,0,0,0};
extern UINT8 xdata transData[2];
static UINT8 xdata RFIDCardState = 0;
//extern POSITION idata position;
/*8031串行口中断*/
void SerialInt(void) interrupt 4
{
if(RI)
{
RI = 0;
RFIDBuffer[RFIDCardState++] = SBUF;
//RFIDCardState++;
if(RFIDCardState >= 13)
{
RFIDCardState = 0;
}
else if(RFIDCardState > 5)
{
RFIDBuffer[12] = 0x00;
}
else
{
RFIDBuffer[12] = 0x00;
}
}
}
/*****************************************************************/
/* BOOL RFIDCardRead(unsigned char xdata *pointer)
/*****************************************************************/
/* 阅读射频ID卡的卡号
/* +----+----+----+----+----+
/* | 0 | 1 | 2 | 3 | 4 |
/* +----+----+----+----+----+
/* 01-厂商代码 2-组号 34-组内编码 234-卡号
/*****************************************************************/
void RFIDCardRead(void)
{
unsigned char data i;
unsigned char data temp=0;
if(RFIDCardState == 0)
{
if((RFIDBuffer[0] == 0x02) && (RFIDBuffer[12] == 0x03))
{
ES = 0;
for(i=1;i<11;i++)
{
if(RFIDBuffer[i]>0x39)
{
RFIDBuffer[i]-=55;
}
else
{
RFIDBuffer[i]-=48;
}
}
for(i=0;i<5;i++)
{
temp=RFIDBuffer[i*2+1]<<4;
RFIDCard[i]=temp+RFIDBuffer[i*2+2];
}
temp=0;
for(i=0;i<5;i++)
{
temp^=RFIDCard[i];
}
if(temp==RFIDBuffer[11])
{
RFIDCardState = 0;
RFIDBuffer[0] = 0;
transData[0] = COMM_RFCARD;
transData[1] = 0;
OSSend(transData,2); /*发送消息到消息队列*/
}
ES = 1;
}
}
}
/************************************************************
** void RFCardIDToString(UINT8 xdata *pCardID,UINT8 xdata *pString)
*************************************************************
** Function:
** 将五个字节长度的十六进制卡号转化为0字符
** 结束的13个字节长度的字符串
** Inputs:
** pCardID 5个字节长度的射频卡ID,第01二个字节为厂商代号
** 第2个字节为射频卡组号,后二个字节为组内编码
** pString 16个字节长度的数组指针
*************************************************************/
void RFCardIDToString(UINT8 *pCardID,UINT8 *pString)
{
UINT8 idata j;
UINT16 idata m_card;
/*group code */
j = *pCardID;
pString[0] = j / 100 + 0x30; /*组号百位*/
j = j % 100;
pString[1] = j/10 + 0x30; /*组号十位*/
j = j % 10;
pString[2] = j + 0x30; /*组号个位*/
pString[3] = ',';
/*
** 组内编号
*/
m_card = (*(pCardID + 1) << 0x08) + *(pCardID + 2);
pString[4] = (UINT8)(m_card/10000) + 0x30;
m_card = m_card % 10000;
pString[5] = (UINT8)(m_card/1000) + 0x30;
m_card = m_card % 1000;
pString[6] = (UINT8)(m_card/100) + 0x30;
m_card = m_card % 100;
pString[7] = (UINT8)(m_card/10) + 0x30;
m_card = m_card % 10;
pString[8] = (UINT8)m_card + 0x30;
pString[9] = 0x00;
}
#endif /*card_Module include */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -