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

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

?? rc522.c

?? 這是一個單片機與MFRC522通信的程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
    if (status == MI_OK)
    {
        //memcpy(ucComMF522Buf, pData, 16);
        for (i=0; i<16; i++)
        {    ucComMF522Buf[i] = *(pData+i);   }
        CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);

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

/////////////////////////////////////////////////////////////////////
//功    能:扣款和充值
//參數(shù)說明: dd_mode[IN]:命令字
//               0xC0 = 扣款
//               0xC1 = 充值
//          addr[IN]:錢包地址
//          pValue[IN]:4字節(jié)增(減)值,低位在前
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////                 
char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue)
{
    char status;
    unsigned int  unLen;
    unsigned char i,ucComMF522Buf[MAXRLEN]; 
    
    ucComMF522Buf[0] = dd_mode;
    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;   }
        
    if (status == MI_OK)
    {
       // memcpy(ucComMF522Buf, pValue, 4);
        for (i=0; i<16; i++)
        {    ucComMF522Buf[i] = *(pValue+i);   }
        CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf[4]);
        unLen = 0;
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,6,ucComMF522Buf,&unLen);
        if (status != MI_ERR)
        {    status = MI_OK;    }
    }
    
    if (status == MI_OK)
    {
        ucComMF522Buf[0] = PICC_TRANSFER;
        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;   }
    }
    return status;
}

/////////////////////////////////////////////////////////////////////
//功    能:備份錢包
//參數(shù)說明: sourceaddr[IN]:源地址
//          goaladdr[IN]:目標地址
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdBakValue(unsigned char sourceaddr, unsigned char goaladdr)
{
    char status;
    unsigned int  unLen;
    unsigned char ucComMF522Buf[MAXRLEN]; 

    ucComMF522Buf[0] = PICC_RESTORE;
    ucComMF522Buf[1] = sourceaddr;
    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;   }
    
    if (status == MI_OK)
    {
        ucComMF522Buf[0] = 0;
        ucComMF522Buf[1] = 0;
        ucComMF522Buf[2] = 0;
        ucComMF522Buf[3] = 0;
        CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf[4]);
 
        status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,6,ucComMF522Buf,&unLen);
        if (status != MI_ERR)
        {    status = MI_OK;    }
    }
    
    if (status != MI_OK)
    {    return MI_ERR;   }
    
    ucComMF522Buf[0] = PICC_TRANSFER;
    ucComMF522Buf[1] = goaladdr;

    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;   }

    return status;
}


/////////////////////////////////////////////////////////////////////
//功    能:命令卡片進入休眠狀態(tài)
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdHalt(void)
{
    char status;
    unsigned int  unLen;
    unsigned char ucComMF522Buf[MAXRLEN]; 

    ucComMF522Buf[0] = PICC_HALT;
    ucComMF522Buf[1] = 0;
    CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
 
    status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);

    return MI_OK;
}

/////////////////////////////////////////////////////////////////////
//用MF522計算CRC16函數(shù)
/////////////////////////////////////////////////////////////////////
void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData)
{
    unsigned char i,n;
    ClearBitMask(DivIrqReg,0x04);
    WriteRawRC(CommandReg,PCD_IDLE);
    SetBitMask(FIFOLevelReg,0x80);
    for (i=0; i<len; i++)
    {   WriteRawRC(FIFODataReg, *(pIndata+i));   }
    WriteRawRC(CommandReg, PCD_CALCCRC);
    i = 0xFF;
    do 
    {
        n = ReadRawRC(DivIrqReg);
        i--;
    }
    while ((i!=0) && !(n&0x04));
    pOutData[0] = ReadRawRC(CRCResultRegL);
    pOutData[1] = ReadRawRC(CRCResultRegM);
}

/////////////////////////////////////////////////////////////////////
//功    能:復(fù)位RC522
//返    回: 成功返回MI_OK
/////////////////////////////////////////////////////////////////////
char PcdReset(void)
{
    unsigned char n;

    MF522_RST=1;
    _nop_();
    MF522_RST=0;
    _nop_();
    MF522_RST=1;
     _nop_();
    n = ReadRawRC(CommandReg);

    WriteRawRC(CommandReg,PCD_RESETPHASE);
//    WriteRawRC(CommandReg,PCD_RESETPHASE);
    _nop_();
    
    WriteRawRC(ModeReg,0x3D);            //和Mifare卡通訊,CRC初始值0x6363
    WriteRawRC(TReloadRegL,30);           
    WriteRawRC(TReloadRegH,0);
    WriteRawRC(TModeReg,0x8D);
    WriteRawRC(TPrescalerReg,0x3E);
    WriteRawRC(TxAutoReg,0x40);     
    return MI_OK;
}
//////////////////////////////////////////////////////////////////////
//設(shè)置RC632的工作方式 
//////////////////////////////////////////////////////////////////////
char M500PcdConfigISOType(unsigned char type)
{
   if (type == 'A')                     //ISO14443_A
   { 
       ClearBitMask(Status2Reg,0x08);

 /*     WriteRawRC(CommandReg,0x20);    //as default   
       WriteRawRC(ComIEnReg,0x80);     //as default
       WriteRawRC(DivlEnReg,0x0);      //as default
	   WriteRawRC(ComIrqReg,0x04);     //as default
	   WriteRawRC(DivIrqReg,0x0);      //as default
	   WriteRawRC(Status2Reg,0x0);//80    //trun off temperature sensor
	   WriteRawRC(WaterLevelReg,0x08); //as default
       WriteRawRC(ControlReg,0x20);    //as default
	   WriteRawRC(CollReg,0x80);    //as default
*/
       WriteRawRC(ModeReg,0x3D);//3F
/*	   WriteRawRC(TxModeReg,0x0);      //as default???
	   WriteRawRC(RxModeReg,0x0);      //as default???
	   WriteRawRC(TxControlReg,0x80);  //as default???

	   WriteRawRC(TxSelReg,0x10);      //as default???
   */
       WriteRawRC(RxSelReg,0x86);//84
 //      WriteRawRC(RxThresholdReg,0x84);//as default
 //      WriteRawRC(DemodReg,0x4D);      //as default

 //      WriteRawRC(ModWidthReg,0x13);//26
       WriteRawRC(RFCfgReg,0x7F);   //4F
	/*   WriteRawRC(GsNReg,0x88);        //as default???
	   WriteRawRC(CWGsCfgReg,0x20);    //as default???
       WriteRawRC(ModGsCfgReg,0x20);   //as default???
*/
   	   WriteRawRC(TReloadRegL,30);//tmoLength);// TReloadVal = 'h6a =tmoLength(dec) 
	   WriteRawRC(TReloadRegH,0);
       WriteRawRC(TModeReg,0x8D);
	   WriteRawRC(TPrescalerReg,0x3E);
	   

  //     PcdSetTmo(106);
       DelayMs(1);
       PcdAntennaOn();
   }
   else{ return -1; }
   
   return MI_OK;
}
/////////////////////////////////////////////////////////////////////
//功    能:讀RC632寄存器
//參數(shù)說明:Address[IN]:寄存器地址
//返    回:讀出的值
/////////////////////////////////////////////////////////////////////
/*unsigned char ReadRawRC(unsigned char Address)
{
     unsigned char i, ucAddr;
     unsigned char ucResult=0;

     MF522_SCK = 0;
     MF522_NSS = 0;
     ucAddr = ((Address<<1)&0x7E)|0x80;

     for(i=8;i>0;i--)
     {
         MF522_SI = ((ucAddr&0x80)==0x80);
         MF522_SCK = 1;
         ucAddr <<= 1;
         MF522_SCK = 0;
     }

     for(i=8;i>0;i--)
     {
         MF522_SCK = 1;
         ucResult <<= 1;
         ucResult|=(bit)MF522_SO;
         MF522_SCK = 0;
     }

     MF522_NSS = 1;
     MF522_SCK = 1;
     return ucResult;
}
*/
/////////////////////////////////////////////////////////////////////
//功    能:寫RC632寄存器
//參數(shù)說明:Address[IN]:寄存器地址
//          value[IN]:寫入的值
/////////////////////////////////////////////////////////////////////
//void WriteRawRC(unsigned char Address, unsigned char value)
//{  
//    unsigned char i, ucAddr;
//
//    MF522_SCK = 0;
//    MF522_NSS = 0;
//    ucAddr = ((Address<<1)&0x7E);
//
//    for(i=8;i>0;i--)
//    {
//        MF522_SI = ((ucAddr&0x80)==0x80);
//        MF522_SCK = 1;
//        ucAddr <<= 1;
//        MF522_SCK = 0;
//    }
//
//    for(i=8;i>0;i--)
//    {
//        MF522_SI = ((value&0x80)==0x80);
//        MF522_SCK = 1;
//        value <<= 1;
//        MF522_SCK = 0;
//    }
//    MF522_NSS = 1;
//    MF522_SCK = 1;
//}

/////////////////////////////////////////////////////////////////////
//功    能:置RC522寄存器位
//參數(shù)說明:reg[IN]:寄存器地址
//          mask[IN]:置位值
/////////////////////////////////////////////////////////////////////
void SetBitMask(unsigned char reg,unsigned char mask)  
{
    char tmp = 0x0;
    tmp = ReadRawRC(reg);
    WriteRawRC(reg,tmp | mask);  // set bit mask
}

/////////////////////////////////////////////////////////////////////
//功    能:清RC522寄存器位
//參數(shù)說明:reg[IN]:寄存器地址
//          mask[IN]:清位值
/////////////////////////////////////////////////////////////////////
void ClearBitMask(unsigned char reg,unsigned char mask)  
{
    char tmp = 0x0;
    tmp = ReadRawRC(reg);
    WriteRawRC(reg, tmp & ~mask);  // clear bit mask
} 

/////////////////////////////////////////////////////////////////////
//功    能:通過RC522和ISO14443卡通訊
//參數(shù)說明:Command[IN]:RC522命令字
//          pInData[IN]:通過RC522發(fā)送到卡片的數(shù)據(jù)
//          InLenByte[IN]:發(fā)送數(shù)據(jù)的字節(jié)長度
//          pOutData[OUT]:接收到的卡片返回數(shù)據(jù)
//          *pOutLenBit[OUT]:返回數(shù)據(jù)的位長度
/////////////////////////////////////////////////////////////////////
char PcdComMF522(unsigned char Command, 
                 unsigned char *pInData, 
                 unsigned char InLenByte,
                 unsigned char *pOutData, 
                 unsigned int  *pOutLenBit)
{
    char status = MI_ERR;
    unsigned char irqEn   = 0x00;
    unsigned char waitFor = 0x00;
    unsigned char lastBits;
    unsigned char n;
    unsigned int i;
    switch (Command)
    {
       case PCD_AUTHENT:
          irqEn   = 0x12;
          waitFor = 0x10;
          break;
       case PCD_TRANSCEIVE:
          irqEn   = 0x77;
          waitFor = 0x30;
          break;
       default:
         break;
    }
   
    WriteRawRC(ComIEnReg,irqEn|0x80);
    ClearBitMask(ComIrqReg,0x80);
    WriteRawRC(CommandReg,PCD_IDLE);
    SetBitMask(FIFOLevelReg,0x80);
    
//    for (i=0; i<InLenByte; i++)
//    {   WriteRawRC(FIFODataReg, pInData[i]);    }
    I2CWrStr(0x50,FIFODataReg,pInData,InLenByte);
    
    WriteRawRC(CommandReg, Command);
   
    
    if (Command == PCD_TRANSCEIVE)
    {    SetBitMask(BitFramingReg,0x80);  }
    
//    i = 600;//根據(jù)時鐘頻率調(diào)整,操作M1卡最大等待時間25ms
 i = 2000;
    do 
    {
         n = ReadRawRC(ComIrqReg);
         i--;
    }
    while ((i!=0) && !(n&0x01) && !(n&waitFor));
    ClearBitMask(BitFramingReg,0x80);
	      
    if (i!=0)
    {    
         if(!(ReadRawRC(ErrorReg)&0x1B))
         {
             status = MI_OK;
             if (n & irqEn & 0x01)
             {   status = MI_NOTAGERR;   }
             if (Command == PCD_TRANSCEIVE)
             {
               	n = ReadRawRC(FIFOLevelReg);
              	lastBits = ReadRawRC(ControlReg) & 0x07;
                if (lastBits)
                {   *pOutLenBit = (n-1)*8 + lastBits;   }
                else
                {   *pOutLenBit = n*8;   }
                if (n == 0)
                {   n = 1;    }
                if (n > MAXRLEN)
                {   n = MAXRLEN;   }
                //for (i=0; i<n; i++)
                //{   pOutData[i] = ReadRawRC(FIFODataReg);    }
                I2CRdStr(0x50,FIFODataReg,pOutData,n);
                
            }
         }
         else
         {   status = MI_ERR;   }
        
   }
   

   SetBitMask(ControlReg,0x80);           // stop timer now
   WriteRawRC(CommandReg,PCD_IDLE); 
   return status;
}


/////////////////////////////////////////////////////////////////////
//開啟天線  
//每次啟動或關(guān)閉天險發(fā)射之間應(yīng)至少有1ms的間隔
/////////////////////////////////////////////////////////////////////
void PcdAntennaOn()
{
    unsigned char i;
    i = ReadRawRC(TxControlReg);
    if (!(i & 0x03))
    {
        SetBitMask(TxControlReg, 0x03);
    }
}


/////////////////////////////////////////////////////////////////////
//關(guān)閉天線
/////////////////////////////////////////////////////////////////////
void PcdAntennaOff()
{
    ClearBitMask(TxControlReg, 0x03);
}

/*----------------------------------------------------------------------------*/


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天亚洲精品| 国产精品毛片a∨一区二区三区| 一区二区三区小说| 欧美三级蜜桃2在线观看| 亚洲影院理伦片| 欧美二区在线观看| 精品一区二区免费| 精品久久免费看| 成人av网站在线观看免费| 国产精品电影院| 色94色欧美sute亚洲线路一ni| 亚洲精品视频在线观看免费| 欧美亚洲愉拍一区二区| 亚洲电影你懂得| 欧美一区二区三区男人的天堂| 日韩制服丝袜先锋影音| 精品av综合导航| 成人免费视频免费观看| 亚洲欧洲日本在线| 欧美在线播放高清精品| 麻豆高清免费国产一区| 国产精品污网站| 在线视频你懂得一区| 蜜臀av一级做a爰片久久| 国产精品午夜在线| 91麻豆精品国产91久久久| 国产一区二区三区精品视频| 又紧又大又爽精品一区二区| 欧美一区二区在线播放| 成人国产精品视频| 日韩电影在线免费观看| 国产清纯白嫩初高生在线观看91| 91丝袜国产在线播放| 美女www一区二区| 亚洲欧美激情在线| 欧美大片一区二区| 在线看日本不卡| 国产麻豆9l精品三级站| 亚洲一区二区免费视频| 久久九九影视网| 91精品国产91久久久久久最新毛片| 成人综合在线观看| 免费一级欧美片在线观看| 中文字幕一区二区三区乱码在线| 91精品国产麻豆| 在线看一区二区| 丰满亚洲少妇av| 青青草国产成人99久久| 亚洲综合在线第一页| 国产精品美女久久福利网站| 日韩一级片在线观看| 日本韩国精品在线| 成年人网站91| 国产一区二区三区日韩| 看电视剧不卡顿的网站| 亚洲午夜免费福利视频| 国产精品三级在线观看| 久久五月婷婷丁香社区| 欧美一区二区三区视频在线| 色综合久久综合网97色综合| 福利一区二区在线观看| 精品亚洲国产成人av制服丝袜| 亚洲超碰精品一区二区| 一区二区三区四区在线播放| 亚洲三级在线免费| 国产精品网站在线播放| 日本一区二区视频在线观看| 欧美精品一区二区在线观看| 欧美一区二视频| 欧美一区中文字幕| 欧美一级久久久久久久大片| 欧美日韩精品三区| 欧美人妖巨大在线| 欧美日韩精品一区二区天天拍小说| 一本在线高清不卡dvd| 99久久综合色| 色哟哟在线观看一区二区三区| 99精品久久久久久| 99国产精品国产精品毛片| av一区二区三区四区| 波多野结衣一区二区三区| 99精品偷自拍| 91捆绑美女网站| 日本福利一区二区| 欧美日韩中文另类| 91.麻豆视频| 精品伦理精品一区| 精品国产露脸精彩对白| www日韩大片| 日本一区二区视频在线| 国产欧美一区二区三区鸳鸯浴| 国产精品天美传媒| 亚洲精品国久久99热| 亚洲国产cao| 精品一区二区三区不卡| 顶级嫩模精品视频在线看| 91亚洲精品一区二区乱码| 欧美在线观看18| 日韩精品一区二区三区在线 | 国产精品乱人伦一区二区| 国产精品美女久久久久aⅴ国产馆| 亚洲另类在线视频| 香蕉久久夜色精品国产使用方法 | 国产亚洲精品免费| 中文字幕在线不卡一区二区三区| 亚洲男帅同性gay1069| 青青草国产精品亚洲专区无| 国产精品一二三区在线| 91在线精品一区二区| 色偷偷88欧美精品久久久| 91麻豆精品国产91久久久更新时间| 久久色视频免费观看| 《视频一区视频二区| 男女视频一区二区| 成人深夜在线观看| 欧美浪妇xxxx高跟鞋交| 欧美国产乱子伦| 亚洲国产一区二区三区青草影视| 国内成+人亚洲+欧美+综合在线| 99精品偷自拍| 26uuu国产日韩综合| 一区二区三区免费在线观看| 久久精品国产77777蜜臀| 99视频一区二区三区| 555www色欧美视频| 国产午夜亚洲精品羞羞网站| 亚洲乱码国产乱码精品精小说| 五月激情综合网| 成人v精品蜜桃久久一区| 欧美日韩一区国产| 欧美—级在线免费片| 日本在线不卡视频一二三区| 不卡在线视频中文字幕| 日韩一区二区影院| 亚洲猫色日本管| 国产盗摄女厕一区二区三区 | 韩国女主播一区| 欧美亚洲综合一区| 亚洲欧洲日韩一区二区三区| 精品写真视频在线观看| 欧美电影在线免费观看| 亚洲精品久久7777| 成人教育av在线| 国产日韩欧美精品在线| 免费在线观看一区二区三区| 欧美视频中文字幕| 最新日韩在线视频| 成人午夜伦理影院| 久久你懂得1024| 久久精品国产秦先生| 欧美精品九九99久久| 亚洲综合久久久久| 色综合天天在线| ...av二区三区久久精品| 国产精品夜夜嗨| 久久久另类综合| 国产在线一区观看| 久久色视频免费观看| 国产一区二区三区精品视频| 精品sm在线观看| 国模一区二区三区白浆| www久久精品| 国产精品18久久久久久久久| 精品成人在线观看| 国产精品一区二区不卡| 久久久精品日韩欧美| 国产一区亚洲一区| 久久精品视频免费观看| 国产高清成人在线| 国产精品久久久久影院| aaa亚洲精品一二三区| 国产精品初高中害羞小美女文| 成人av在线资源网站| 中文字幕色av一区二区三区| av在线播放不卡| 一片黄亚洲嫩模| 欧美麻豆精品久久久久久| 日韩精品一区第一页| 日韩精品最新网址| 东方欧美亚洲色图在线| 亚洲欧美日韩电影| 欧美日韩美女一区二区| 老司机精品视频在线| 久久久久久**毛片大全| 成人国产精品免费观看视频| 依依成人综合视频| 欧美日韩国产成人在线91| 奇米精品一区二区三区四区| 精品裸体舞一区二区三区| 懂色一区二区三区免费观看| 日韩伦理免费电影| 91精品婷婷国产综合久久竹菊| 美脚の诱脚舐め脚责91| 国产亚洲欧洲一区高清在线观看| 97se亚洲国产综合在线| 亚洲福利视频一区| 精品999久久久| 日本韩国精品在线| 国产一区二区三区综合| 亚洲欧美日韩国产一区二区三区 |