亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rc522.c

?? 這是一個單片機與MFRC522通信的程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
//#include <intrins.h>
#include <intrins.h>
#include "lpcreg.h"
#include "main.h"
#include "mfrc522.h"
#define MAXRLEN 18
#define nop _nop_()
    sbit     SDA=P1^1;
    sbit     SCL=P1^0;
//SDA					BIT     P1.1        ;SERIEL BYTE OF DS1302/IC       I/O
//SCL					BIT		P1.0            ;CLOCK OF DS1302/IC             O

/*----------------------------------------------------------------------------*/
//	內(nèi)部函數(shù)----啟動I2C通信
/*----------------------------------------------------------------------------*/
void I2CStart(void)
{
	SDA=1;		/*發(fā)送起始條件的數(shù)據(jù)信號*/
//	nop;nop;nop;nop;nop;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
	SCL=1;		/*發(fā)送起始條件的時鐘信號*/	
	//Delay(3);
//	nop;nop;nop;nop;nop;   //起始條件建立時間大于4.7us
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
//	nop;nop;nop;nop;nop;   //起始條件建立時間大于4.7us
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();

//	nop;nop;   //起始條件建立時間大于4.7us
    _nop_();
    _nop_();
    
	SDA=0;		/*發(fā)送起始信號*/
	//Delay(3);
//	nop;nop;nop;nop;nop; //起始條件鎖定時間大于4us
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();

//	nop;nop;nop;nop;nop; //起始條件鎖定時間大于4us
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
	//nop;nop;nop;nop;nop; //起始條件鎖定時間大于4us
	SCL=0;		/*鉗住I2C總線,準備發(fā)送或接收*/
//	nop;nop;nop;nop;nop;nop;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();

}

/*----------------------------------------------------------------------------*/
//	內(nèi)部函數(shù)----停止I2C通信
/*----------------------------------------------------------------------------*/
void I2CStop(void) //釋放I2C總線*/
{
	SDA=0;		/*發(fā)送停止條件的數(shù)據(jù)信號*/
	nop;nop;nop;nop;nop;
	SCL=1;		//發(fā)送停止條件的時鐘信號
	//Delay(3);
	nop;nop;nop;nop;nop; //起始條件建立時間大于4us
	nop;nop;nop;nop;nop; //起始條件建立時間大于4us
   	//nop;nop;nop;nop;nop; //起始條件建立時間大于4us
	SDA=1;		/*發(fā)送I2C總線停止信號*/
	//Delay(3);
	nop;nop;nop;nop;nop;/*停止條件鎖定時間大于4us*/
	nop;nop;nop;nop;nop;/*停止條件鎖定時間大于4us*/
}


/*-------------------------------------------------
內(nèi)部函數(shù)--------SendAck(unsigned AckBit) 輸出ACK 
 		AckBit=0 為發(fā)送應(yīng)答信號 
		AckBit=1 為發(fā)送非應(yīng)答信號 
---------------------------------------------------*/
void SendAck(bit AckBit)
{
	SDA=AckBit;		/*發(fā)送的應(yīng)答或非應(yīng)答信號*/
	nop;nop;nop;nop;nop;
//	Delay(1);
	SCL=1;			/*置時鐘線為高使應(yīng)答位有效*/
	//Delay(3);	
	nop;nop;nop;nop;nop;   /*時鐘高周期大于4us*/
	nop;nop;nop;nop;nop;   /*時鐘高周期大于4us*/
	SCL=0;			/*清時鐘線鉗住I2C 總線以便繼續(xù)接收字接數(shù)據(jù)或發(fā)送停止條件*/
	nop;nop;nop;nop;nop;
}

/*------------------------------------------
內(nèi)部函數(shù)---------發(fā)送一個字節(jié)到I2C總線上
	入口:待寫入的數(shù)據(jù)ucdata ;無返回值 
-------------------------------------------*/
bit I2CSendByte(unsigned char ucdata)
{
	bit bACK;
	unsigned char data i;
	i=8;
	while(i--)			   	/*8 位沒發(fā)送完繼續(xù)發(fā)送*/
	{
		if((ucdata & 0x80)==0x80)
			SDA=1;		/*發(fā)送是1*/
		else 
			SDA=0;		/*發(fā)送的是0*/
		nop;nop;nop;nop;nop;	
		SCL=1;			/*置時鐘線為高通知被控器開始接收數(shù)據(jù)位*/
		//Delay(3);	
		nop;nop;nop;nop;nop;  /*保證時鐘高周期大于4us*/
		nop;nop;nop;nop;nop;  /*保證時鐘高周期大于4us*/
		SCL=0;			/*鉗住總線準備接收下一個數(shù)據(jù)位*/
		ucdata=ucdata<<1;  /*發(fā)送下一位數(shù)據(jù)*/
	}
	nop;nop;nop;nop;nop;
	SDA=1;			/*8位數(shù)據(jù)發(fā)送完,釋放I2C總線,準備接收應(yīng)答位*/
	nop;nop;nop;nop;nop;
	SCL=1;			/*開始接收應(yīng)答信號*/
//	Delay(1);
	nop;nop;nop;nop;nop;
	if(SDA)		/*等待應(yīng)答,SDA=0為應(yīng)答*/
		bACK=0;
	else
		bACK=1;
	SCL=0;		/*發(fā)送結(jié)束鉗住總線準備下一步發(fā)送或接收數(shù)據(jù)或進行其它處理*/
	nop;nop;nop;nop;nop;
	return(bACK);		/*正確應(yīng)答返回0*/
}
	
/*------------------------------------------
內(nèi)部函數(shù)------從I2C接收一個字節(jié)
		無入口參數(shù);返回接收到的字節(jié).
--------------------------------------------*/
unsigned char I2CReadByte(void)
{
	unsigned char data i=0,ByteData=0;
	SDA=1;			/*置數(shù)據(jù)線為輸入方式*/
	i=8;
	while(i--)
	{
	   	nop;nop;nop;nop;nop;
		SCL=0;		//置鐘線為零準備接收數(shù)據(jù)
	//	Delay(3);
		nop;nop;nop;nop;nop; /*時鐘低周期大于4.7us*/
		nop;nop;nop;nop;nop; /*時鐘低周期大于4.7us*/
		SCL=1;		/*置時鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/
		nop;nop;nop;nop;nop;
		ByteData=ByteData<<1;
		if(SDA)
			ByteData++;
		nop;nop;nop;nop;nop;
	}
	SCL=0;			/*8 位接收完置時鐘線和數(shù)據(jù)線為低準備發(fā)送應(yīng)答或非應(yīng)答信號*/
	nop;nop;nop;nop;nop;
	return(ByteData);
}
bit I2CRdStr(unsigned char ucSla,unsigned char ucAddress,unsigned char *ucBuf,unsigned char ucCount)
{	 //從有子地址的器件讀取數(shù)據(jù)
// PCF8563的地址為0xa2,
	unsigned char idata i=0;
	I2CStart();	
	if(!I2CSendByte(ucSla))
	{
		I2CStop();
		return 0;			/*選從器件的地此*/
	}
	if(!I2CSendByte(ucAddress))
	{
		I2CStop();
		return 0;		/*選第一個寄存器地此*/
	}
	I2CStart();
	if(!I2CSendByte(ucSla+1))
	{
		I2CStop();
		return 0;			/*發(fā)送讀器件命令*/
	}
	i=ucCount;
	while(i--)
	{
		*ucBuf=I2CReadByte();/*讀從器件寄存器*/
		if(i)
			SendAck(0);		/*未接收完所有字節(jié),發(fā)送應(yīng)答信號*/
		ucBuf++;
	}
	SendAck(1);			/*接收完所有字節(jié),發(fā)送非應(yīng)答信號*/
	I2CStop();
	return 1;
}
bit I2CWrStr(unsigned char ucSla,unsigned char ucAddress,unsigned char *ucData,unsigned char ucNo)
{	//8563的地址為0xa2
	unsigned char data i;
	I2CStart();
	if(!I2CSendByte(ucSla))
	{
		I2CStop();
		return 0;		/*write command*/
	}
	if(!I2CSendByte(ucAddress))
	{
		I2CStop();
		return 0;	/*write register Address*/
	}
	i=ucNo;
	while(i--)
	{
		if(!I2CSendByte(*ucData))
		{
			I2CStop();
			return 0;	/*write Data*/
		}
		ucData++;
	}
	I2CStop();
	return 1;
}
/////////////////////////////////////////////////////////////////////
//功    能:讀RC632寄存器
//參數(shù)說明:Address[IN]:寄存器地址
//返    回:讀出的值
/////////////////////////////////////////////////////////////////////
unsigned char ReadRawRC(unsigned char Address)
{
	unsigned char data tmp;
//I2CRdStr(unsigned char ucSla,unsigned char ucAddress,unsigned char *ucBuf,unsigned char ucCount)
    I2CRdStr(0x50,Address,&tmp,0x01);
	return tmp;
}
/////////////////////////////////////////////////////////////////////
//功    能:寫RC632寄存器
//參數(shù)說明:Address[IN]:寄存器地址
//          value[IN]:寫入的值
/////////////////////////////////////////////////////////////////////
void WriteRawRC(unsigned char Address, unsigned char value)
{
    I2CWrStr(0x50,Address,&value,0x01);
}
                              
/////////////////////////////////////////////////////////////////////
//功    能:尋卡
//參數(shù)說明: req_code[IN]:尋卡方式
//                0x52 = 尋感應(yīng)區(qū)內(nèi)所有符合14443A標準的卡
//                0x26 = 尋未進入休眠狀態(tài)的卡
//          pTagType[OUT]:卡片類型代碼
//                0x4400 = Mifare_UltraLight
//                0x0400 = Mifare_One(S50)
//                0x0200 = Mifare_One(S70)
//                0x0800 = Mifare_Pro(X)
//                0x4403 = Mifare_DESFire
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdRequest(unsigned char req_code,unsigned char *pTagType)
{
   char status;  
   unsigned int  unLen;
   unsigned char ucComMF522Buf[MAXRLEN]; 
//  unsigned char xTest ;
   ClearBitMask(Status2Reg,0x08);
   WriteRawRC(BitFramingReg,0x07);

//  xTest = ReadRawRC(BitFramingReg);
//  if(xTest == 0x07 )
 //   { LED_GREEN  =0 ;}
 // else {LED_GREEN =1 ;while(1){}}
   SetBitMask(TxControlReg,0x03);
 
   ucComMF522Buf[0] = req_code;

   status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);
//     if(status  == MI_OK )
//   { LED_GREEN  =0 ;}
//   else {LED_GREEN =1 ;}
   if ((status == MI_OK) && (unLen == 0x10))
   {    
       *pTagType     = ucComMF522Buf[0];
       *(pTagType+1) = ucComMF522Buf[1];
   }
   else
   {   status = MI_ERR;   }
   
   return status;
}

/////////////////////////////////////////////////////////////////////
//功    能:防沖撞
//參數(shù)說明: pSnr[OUT]:卡片序列號,4字節(jié)
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////  
char PcdAnticoll(unsigned char *pSnr)
{
    char status;
    unsigned char i,snr_check=0;
    unsigned int  unLen;
    unsigned char ucComMF522Buf[MAXRLEN]; 
    

    ClearBitMask(Status2Reg,0x08);
    WriteRawRC(BitFramingReg,0x00);
    ClearBitMask(CollReg,0x80);
 
    ucComMF522Buf[0] = PICC_ANTICOLL1;
    ucComMF522Buf[1] = 0x20;

    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen);

    if (status == MI_OK)
    {
    	 for (i=0; i<4; i++)
         {   
             *(pSnr+i)  = ucComMF522Buf[i];
             snr_check ^= ucComMF522Buf[i];
         }
         if (snr_check != ucComMF522Buf[i])
         {   status = MI_ERR;    }
    }
    
    SetBitMask(CollReg,0x80);
    return status;
}

/////////////////////////////////////////////////////////////////////
//功    能:選定卡片
//參數(shù)說明: pSnr[IN]:卡片序列號,4字節(jié)
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdSelect(unsigned char *pSnr)
{
    char status;
    unsigned char i;
    unsigned int  unLen;
    unsigned char ucComMF522Buf[MAXRLEN]; 
    
    ucComMF522Buf[0] = PICC_ANTICOLL1;
    ucComMF522Buf[1] = 0x70;
    ucComMF522Buf[6] = 0;
    for (i=0; i<4; i++)
    {
    	ucComMF522Buf[i+2] = *(pSnr+i);
    	ucComMF522Buf[6]  ^= *(pSnr+i);
    }
    CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);
  
    ClearBitMask(Status2Reg,0x08);

    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);
    
    if ((status == MI_OK) && (unLen == 0x18))
    {   status = MI_OK;  }
    else
    {   status = MI_ERR;    }

    return status;
}

/////////////////////////////////////////////////////////////////////
//功    能:驗證卡片密碼
//參數(shù)說明: auth_mode[IN]: 密碼驗證模式
//                 0x60 = 驗證A密鑰
//                 0x61 = 驗證B密鑰 
//          addr[IN]:塊地址
//          pKey[IN]:密碼
//          pSnr[IN]:卡片序列號,4字節(jié)
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////               
char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
{
    char status;
    unsigned int  unLen;
    unsigned char i,ucComMF522Buf[MAXRLEN]; 

    ucComMF522Buf[0] = auth_mode;
    ucComMF522Buf[1] = addr;
    for (i=0; i<6; i++)
    {    ucComMF522Buf[i+2] = *(pKey+i);   }
    for (i=0; i<6; i++)
    {    ucComMF522Buf[i+8] = *(pSnr+i);   }
 //   memcpy(&ucComMF522Buf[2], pKey, 6); 
 //   memcpy(&ucComMF522Buf[8], pSnr, 4); 
    
    status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen);
    if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08)))
    {   status = MI_ERR;   }
    
    return status;
}

/////////////////////////////////////////////////////////////////////
//功    能:讀取M1卡一塊數(shù)據(jù)
//參數(shù)說明: addr[IN]:塊地址
//          pData[OUT]:讀出的數(shù)據(jù),16字節(jié)
//返    回: 成功返回MI_OK
///////////////////////////////////////////////////////////////////// 
char PcdRead(unsigned char addr,unsigned char *pData)
{
    char status;
    unsigned int  unLen;
    unsigned char i,ucComMF522Buf[MAXRLEN]; 

    ucComMF522Buf[0] = PICC_READ;
    ucComMF522Buf[1] = addr;
    CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
   
    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
    if ((status == MI_OK) && (unLen == 0x90))
 //   {   memcpy(pData, ucComMF522Buf, 16);   }
    {
        for (i=0; i<16; i++)
        {    *(pData+i) = ucComMF522Buf[i];   }
    }
    else
    {   status = MI_ERR;   }
    
    return status;
}

/////////////////////////////////////////////////////////////////////
//功    能:寫數(shù)據(jù)到M1卡一塊
//參數(shù)說明: addr[IN]:塊地址
//          pData[IN]:寫入的數(shù)據(jù),16字節(jié)
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////                  
char PcdWrite(unsigned char addr,unsigned char *pData)
{
    char status;
    unsigned int  unLen;
    unsigned char i,ucComMF522Buf[MAXRLEN]; 
    
    ucComMF522Buf[0] = PICC_WRITE;
    ucComMF522Buf[1] = addr;
    CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
 
    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);

    if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
    {   status = MI_ERR;   }
        

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av电影一区二区| 欧美女孩性生活视频| 亚洲大片在线观看| 国产网站一区二区| 欧美一区二区女人| av中文字幕一区| 狠狠色综合日日| 亚洲午夜在线视频| 亚洲天堂成人在线观看| 精品国产一区二区在线观看| 欧美精品亚洲一区二区在线播放| 91首页免费视频| 国产福利91精品一区二区三区| 天堂精品中文字幕在线| 国产精品高潮呻吟| 国产精品免费观看视频| 欧美电影免费观看完整版| 欧美日韩黄视频| 在线影院国内精品| 一本一道久久a久久精品综合蜜臀| 国产成人综合网站| 亚洲国产va精品久久久不卡综合| 亚洲精品一二三区| 一区二区在线看| 一个色综合av| 亚洲午夜一区二区三区| 亚洲伊人色欲综合网| 亚洲国产一区在线观看| 午夜精品国产更新| 日本不卡123| 蜜桃视频在线一区| 国产美女视频91| 人人狠狠综合久久亚洲| 蜜桃一区二区三区在线观看| 精品亚洲国内自在自线福利| 爽好久久久欧美精品| 奇米888四色在线精品| 蜜臀av一区二区在线免费观看| 麻豆精品久久久| 国产福利不卡视频| 国产一区二区视频在线播放| 国产成人免费视频一区| 99精品1区2区| 欧美日韩aaaaa| 日韩欧美一级精品久久| 国产精品美女一区二区三区| 国产精品无码永久免费888| 五月婷婷激情综合| 99免费精品在线| 欧美不卡一二三| 亚洲欧美国产高清| 国内不卡的二区三区中文字幕| 色婷婷av一区二区三区gif| 欧美不卡一区二区三区四区| 亚洲永久精品大片| 97se亚洲国产综合自在线观| 日韩女优毛片在线| 亚洲一区二区三区免费视频| 懂色av噜噜一区二区三区av| 精品国产网站在线观看| 青青草成人在线观看| 色婷婷综合在线| 国产精品高清亚洲| 粗大黑人巨茎大战欧美成人| 欧美成人欧美edvon| 日韩精品成人一区二区三区| 欧美日韩综合不卡| 亚洲欧美日韩国产一区二区三区| 国产一区二区三区免费看| 91精品欧美久久久久久动漫 | 日产精品久久久久久久性色| 91国在线观看| 一区二区在线免费观看| 色婷婷久久久综合中文字幕| 一区精品在线播放| 99久久免费精品高清特色大片| 国产欧美日韩一区二区三区在线观看| 免费视频最近日韩| 在线观看91精品国产麻豆| 亚洲图片一区二区| 欧美三级中文字幕在线观看| 一区二区三区四区av| 91久久精品一区二区三| 亚洲图片自拍偷拍| 欧美日韩一级片在线观看| 自拍偷拍国产精品| 欧美性色黄大片手机版| 亚洲妇熟xx妇色黄| 日韩欧美一二区| 国内精品不卡在线| 欧美国产日韩精品免费观看| 成人av网址在线| 亚洲男同性恋视频| 精品视频在线免费看| 天天色天天操综合| 日韩欧美中文一区二区| 韩国三级电影一区二区| 国产婷婷一区二区| 一本久久精品一区二区| 亚洲午夜精品网| 欧美人牲a欧美精品| 久久99深爱久久99精品| 日本一区二区三区视频视频| av电影天堂一区二区在线观看| 亚洲一级二级三级在线免费观看| 欧美一区国产二区| 国产一区二区不卡在线| 国产精品乱码一区二三区小蝌蚪| 成人网页在线观看| 亚洲韩国一区二区三区| 精品久久久久久久久久久久久久久 | 欧美一区二区网站| 国产精品白丝jk黑袜喷水| 亚洲欧美日韩小说| 日韩精品一区国产麻豆| 成人深夜视频在线观看| 亚洲不卡一区二区三区| 国产日韩欧美精品在线| 在线观看日韩高清av| 久久超碰97中文字幕| 日韩伦理av电影| 日韩欧美国产综合| 本田岬高潮一区二区三区| 午夜精品久久久久影视| 中文字幕中文字幕在线一区| 日韩亚洲欧美在线观看| 色哟哟日韩精品| 国产91丝袜在线播放| 亚洲激情自拍视频| 国产午夜久久久久| 91精品国产91久久综合桃花| 成人久久18免费网站麻豆| 青青草原综合久久大伊人精品 | 专区另类欧美日韩| 欧美—级在线免费片| 欧美一级二级在线观看| 欧美午夜不卡在线观看免费| 国产精品911| 国产一区在线视频| 午夜精品成人在线| 亚洲一区日韩精品中文字幕| 国产精品国产自产拍高清av| 久久精品人人做人人爽人人| 欧美一二区视频| 欧美精品777| 欧美群妇大交群的观看方式| 欧美性色欧美a在线播放| 97精品视频在线观看自产线路二| 国产成人免费高清| 国产精品一区免费视频| 国产在线视频精品一区| 国产一区二区不卡在线| 精品亚洲porn| 精品无人区卡一卡二卡三乱码免费卡| 同产精品九九九| 亚洲成人激情自拍| 午夜a成v人精品| 日韩中文字幕1| 美国三级日本三级久久99| 亚洲va中文字幕| 青青草伊人久久| 国产一区二三区好的| 国产成人在线色| www.亚洲国产| 91黄色免费观看| 欧美日韩成人在线| 日韩视频一区二区三区在线播放| 日韩一区二区电影在线| 精品电影一区二区三区| 欧美激情一区二区三区在线| 国产精品二三区| 夜夜嗨av一区二区三区网页| 亚洲h精品动漫在线观看| 日本伊人精品一区二区三区观看方式| 日韩av成人高清| 韩国三级在线一区| 99视频一区二区| 欧美日韩在线播| 精品播放一区二区| 国产精品久久久久久久久果冻传媒| 国产精品卡一卡二| 香蕉乱码成人久久天堂爱免费| 久久er99热精品一区二区| gogogo免费视频观看亚洲一| 欧美视频完全免费看| 日韩女优电影在线观看| 成人欧美一区二区三区小说| 日韩影视精彩在线| 成人精品国产免费网站| 欧美日韩国产乱码电影| 国产日产欧美一区二区视频| 亚洲精选视频在线| 久久99精品久久久久| 色噜噜狠狠色综合中国| 精品久久久久久久久久久院品网| 亚洲欧美日韩国产成人精品影院| 久久99精品久久久久久久久久久久 | 北条麻妃国产九九精品视频| 91精品麻豆日日躁夜夜躁| 亚洲国产成人私人影院tom |