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

📄 rfidcard.c

📁 读取RF射频卡源代码(C51)
💻 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 + -