久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3453|回復: 0
打印 上一主題 下一主題
收起左側

STM32驅動RC522代碼分享

[復制鏈接]
跳轉到指定樓層
樓主
ID:297748 發表于 2018-11-29 11:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是野火的代碼,自己改了以后,可以直插直用,有問題,評論區見

單片機源程序如下:
  1. #include "rc522_function.h"
  2. #include "rc522_config.h"
  3. #include "stm32f10x.h"
  4. #include "bsp_SysTick.h"


  5. #define   RC522_DELAY()  Delay_us ( 200 )

  6. /**
  7.   * @brief  向RC522發送1 Byte 數據
  8.   * @param  byte,要發送的數據
  9.   * @retval RC522返回的數據
  10.   */
  11. void SPI_RC522_SendByte ( uint8_t byte )
  12. {
  13.   uint8_t counter;

  14.   for(counter=0;counter<8;counter++)
  15.   {     
  16.     if ( byte & 0x80 )
  17.       RC522_MOSI_1 ();
  18.     else
  19.       RC522_MOSI_0 ();
  20.    
  21.     RC522_DELAY();
  22.     RC522_SCK_0 ();
  23.    
  24.     RC522_DELAY();
  25.     RC522_SCK_1();
  26.    
  27.     RC522_DELAY();
  28.     byte <<= 1;
  29.   }         
  30. }


  31. /**
  32.   * @brief  從RC522發送1 Byte 數據
  33.   * @param  無
  34.   * @retval RC522返回的數據
  35.   */
  36. uint8_t SPI_RC522_ReadByte ( void )
  37. {
  38.   uint8_t counter;
  39.   uint8_t SPI_Data;

  40.   for(counter=0;counter<8;counter++)
  41.   {
  42.     SPI_Data <<= 1;
  43.     RC522_SCK_0 ();
  44.    
  45.     RC522_DELAY();
  46.     if ( RC522_MISO_GET() == 1)
  47.      SPI_Data |= 0x01;
  48.    
  49.     RC522_DELAY();
  50.     RC522_SCK_1 ();
  51.    
  52.     RC522_DELAY();
  53.   }
  54.   return SPI_Data;
  55.         
  56. }



  57. /**
  58.   * @brief  讀RC522寄存器
  59.   * @param  ucAddress,寄存器地址
  60.   * @retval 寄存器的當前值
  61.   */
  62. uint8_t ReadRawRC ( uint8_t ucAddress )
  63. {
  64.         uint8_t ucAddr, ucReturn;
  65.         
  66.         ucAddr = ( ( ucAddress << 1 ) & 0x7E ) | 0x80;        
  67.         RC522_CS_Enable();
  68.   
  69.         SPI_RC522_SendByte ( ucAddr );
  70.         ucReturn = SPI_RC522_ReadByte ();
  71.   
  72.         RC522_CS_Disable();
  73.         
  74.         return ucReturn;        
  75. }

  76. /**
  77.   * @brief  寫RC522寄存器
  78.   * @param  ucAddress,寄存器地址
  79.   * @param  ucValue,寫入寄存器的值
  80.   * @retval 無
  81.   */
  82. void WriteRawRC ( uint8_t ucAddress, uint8_t ucValue )
  83. {  
  84.         uint8_t ucAddr;
  85.         
  86.         ucAddr = ( ucAddress << 1 ) & 0x7E;        
  87.         RC522_CS_Enable();
  88.         
  89.         SPI_RC522_SendByte ( ucAddr );        
  90.         SPI_RC522_SendByte ( ucValue );
  91.   
  92.         RC522_CS_Disable();               
  93. }


  94. /**
  95.   * @brief  對RC522寄存器置位
  96.   * @param  ucReg,寄存器地址
  97.   * @param   ucMask,置位值
  98.   * @retval 無
  99.   */
  100. void SetBitMask ( uint8_t ucReg, uint8_t ucMask )  
  101. {
  102.   uint8_t ucTemp;

  103.   ucTemp = ReadRawRC ( ucReg );
  104.   WriteRawRC ( ucReg, ucTemp | ucMask ); // set bit mask
  105. }


  106. /**
  107.   * @brief  對RC522寄存器清位
  108.   * @param  ucReg,寄存器地址
  109.   * @param  ucMask,清位值
  110.   * @retval 無
  111.   */
  112. void ClearBitMask ( uint8_t ucReg, uint8_t ucMask )  
  113. {
  114.   uint8_t ucTemp;

  115.   ucTemp = ReadRawRC ( ucReg );
  116.   WriteRawRC ( ucReg, ucTemp & ( ~ ucMask) ); // clear bit mask
  117. }


  118. /**
  119.   * @brief  開啟天線
  120.   * @param  無
  121.   * @retval 無
  122.   */
  123. void PcdAntennaOn ( void )
  124. {
  125.   uint8_t uc;

  126.   uc = ReadRawRC ( TxControlReg );
  127.   if ( ! ( uc & 0x03 ) )
  128.    SetBitMask(TxControlReg, 0x03);               
  129. }


  130. /**
  131.   * @brief  關閉天線
  132.   * @param  無
  133.   * @retval 無
  134.   */
  135. void PcdAntennaOff ( void )
  136. {
  137.   ClearBitMask ( TxControlReg, 0x03 );        
  138. }


  139. /**
  140.   * @brief  復位RC522
  141.   * @param  無
  142.   * @retval 無
  143.   */
  144. void PcdReset ( void )
  145. {
  146.         RC522_Reset_Disable();
  147.         Delay_us ( 1 );
  148.         
  149.         RC522_Reset_Enable();
  150.         Delay_us ( 1 );
  151.         
  152.         RC522_Reset_Disable();
  153.         Delay_us ( 1 );
  154.         
  155.         WriteRawRC ( CommandReg, 0x0f );
  156.         
  157.         while ( ReadRawRC ( CommandReg ) & 0x10 );
  158.         
  159.         Delay_us ( 1 );
  160.   
  161.         //定義發送和接收常用模式 和Mifare卡通訊,CRC初始值0x6363
  162.   WriteRawRC ( ModeReg, 0x3D );        
  163.         
  164.   WriteRawRC ( TReloadRegL, 30 );      //16位定時器低位   
  165.         WriteRawRC ( TReloadRegH, 0 );                         //16位定時器高位
  166.         
  167.   WriteRawRC ( TModeReg, 0x8D );                         //定義內部定時器的設置
  168.         
  169.   WriteRawRC ( TPrescalerReg, 0x3E );         //設置定時器分頻系數
  170.         
  171.         WriteRawRC ( TxAutoReg, 0x40 );                         //調制發送信號為100%ASK        
  172.         
  173. }



  174. /**
  175.   * @brief  設置RC522的工作方式
  176.   * @param  ucType,工作方式
  177.   * @retval 無
  178.   */
  179. void M500PcdConfigISOType ( uint8_t ucType )
  180. {
  181.         if ( ucType == 'A')                     //ISO14443_A
  182.   {
  183.                 ClearBitMask ( Status2Reg, 0x08 );
  184.                
  185.     WriteRawRC ( ModeReg, 0x3D );         //3F
  186.                
  187.                 WriteRawRC ( RxSelReg, 0x86 );        //84
  188.                
  189.                 WriteRawRC( RFCfgReg, 0x7F );         //4F
  190.                
  191.                 WriteRawRC( TReloadRegL, 30 );        
  192.                
  193.                 WriteRawRC ( TReloadRegH, 0 );
  194.                
  195.                 WriteRawRC ( TModeReg, 0x8D );
  196.                
  197.                 WriteRawRC ( TPrescalerReg, 0x3E );
  198.                
  199.                 Delay_us ( 2 );
  200.                
  201.                 PcdAntennaOn ();//開天線
  202.                
  203.    }         
  204. }



  205. /**
  206.   * @brief  通過RC522和ISO14443卡通訊
  207.   * @param  ucCommand,RC522命令字
  208.   * @param  pInData,通過RC522發送到卡片的數據
  209.   * @param  ucInLenByte,發送數據的字節長度
  210.   * @param  pOutData,接收到的卡片返回數據
  211.   * @param  pOutLenBit,返回數據的位長度
  212.   * @retval 狀態值= MI_OK,成功
  213.   */
  214. char PcdComMF522 ( uint8_t ucCommand,
  215.                    uint8_t * pInData,
  216.                    uint8_t ucInLenByte,
  217.                    uint8_t * pOutData,
  218.                    uint32_t * pOutLenBit )               
  219. {
  220.   char cStatus = MI_ERR;
  221.   uint8_t ucIrqEn   = 0x00;
  222.   uint8_t ucWaitFor = 0x00;
  223.   uint8_t ucLastBits;
  224.   uint8_t ucN;
  225.   uint32_t ul;

  226.   switch ( ucCommand )
  227.   {
  228.      case PCD_AUTHENT:                  //Mifare認證
  229.         ucIrqEn   = 0x12;                //允許錯誤中斷請求ErrIEn  允許空閑中斷IdleIEn
  230.         ucWaitFor = 0x10;                //認證尋卡等待時候 查詢空閑中斷標志位
  231.         break;
  232.      
  233.      case PCD_TRANSCEIVE:                //接收發送 發送接收
  234.         ucIrqEn   = 0x77;                //允許TxIEn RxIEn IdleIEn LoAlertIEn ErrIEn TimerIEn
  235.         ucWaitFor = 0x30;                //尋卡等待時候 查詢接收中斷標志位與 空閑中斷標志位
  236.         break;
  237.      
  238.      default:
  239.        break;     
  240.   }
  241.   //IRqInv置位管腳IRQ與Status1Reg的IRq位的值相反
  242.   WriteRawRC ( ComIEnReg, ucIrqEn | 0x80 );
  243.   //Set1該位清零時,CommIRqReg的屏蔽位清零
  244.   ClearBitMask ( ComIrqReg, 0x80 );         
  245.   //寫空閑命令
  246.   WriteRawRC ( CommandReg, PCD_IDLE );                 
  247.   
  248.   //置位FlushBuffer清除內部FIFO的讀和寫指針以及ErrReg的BufferOvfl標志位被清除
  249.   SetBitMask ( FIFOLevelReg, 0x80 );                        

  250.   for ( ul = 0; ul < ucInLenByte; ul ++ )
  251.     WriteRawRC ( FIFODataReg, pInData [ ul ] ); //寫數據進FIFOdata
  252.    
  253.   WriteRawRC ( CommandReg, ucCommand );                                        //寫命令


  254.   if ( ucCommand == PCD_TRANSCEIVE )
  255.    
  256.     //StartSend置位啟動數據發送 該位與收發命令使用時才有效
  257.     SetBitMask(BitFramingReg,0x80);                                    

  258.   ul = 1000;                             //根據時鐘頻率調整,操作M1卡最大等待時間25ms

  259.   do                                                                                                                          //認證 與尋卡等待時間        
  260.   {
  261.        ucN = ReadRawRC ( ComIrqReg );                 //查詢事件中斷
  262.        ul --;
  263.   } while ( ( ul != 0 ) && ( ! ( ucN & 0x01 ) ) && ( ! ( ucN & ucWaitFor ) ) );        

  264.   ClearBitMask ( BitFramingReg, 0x80 );         //清理允許StartSend位

  265.   if ( ul != 0 )
  266.   {
  267.     //讀錯誤標志寄存器BufferOfI CollErr ParityErr ProtocolErr
  268.     if ( ! ( ReadRawRC ( ErrorReg ) & 0x1B ) )        
  269.     {
  270.       cStatus = MI_OK;
  271.       
  272.       if ( ucN & ucIrqEn & 0x01 )                                //是否發生定時器中斷
  273.         cStatus = MI_NOTAGERR;   
  274.         
  275.       if ( ucCommand == PCD_TRANSCEIVE )
  276.       {
  277.         //讀FIFO中保存的字節數
  278.         ucN = ReadRawRC ( FIFOLevelReg );                          
  279.         
  280.         //最后接收到得字節的有效位數
  281.         ucLastBits = ReadRawRC ( ControlReg ) & 0x07;        
  282.         
  283.         if ( ucLastBits )
  284.          
  285.           //N個字節數減去1(最后一個字節)+最后一位的位數 讀取到的數據總位數
  286.           * pOutLenBit = ( ucN - 1 ) * 8 + ucLastBits;           
  287.         else
  288.           * pOutLenBit = ucN * 8;      //最后接收到的字節整個字節有效
  289.         
  290.         if ( ucN == 0 )               
  291.           ucN = 1;   
  292.         
  293.         if ( ucN > MAXRLEN )
  294.           ucN = MAXRLEN;   
  295.         
  296.         for ( ul = 0; ul < ucN; ul ++ )
  297.           pOutData [ ul ] = ReadRawRC ( FIFODataReg );   
  298.         
  299.         }        
  300.     }   
  301.     else
  302.       cStatus = MI_ERR;      
  303.   }

  304.   SetBitMask ( ControlReg, 0x80 );           // stop timer now
  305.   WriteRawRC ( CommandReg, PCD_IDLE );
  306.    
  307.   return cStatus;
  308. }

  309. /**
  310.   * @brief 尋卡
  311.   * @param  ucReq_code,尋卡方式 = 0x52,尋感應區內所有符合14443A標準的卡;
  312.             尋卡方式= 0x26,尋未進入休眠狀態的卡
  313.   * @param  pTagType,卡片類型代碼
  314.              = 0x4400,Mifare_UltraLight
  315.              = 0x0400,Mifare_One(S50)
  316.              = 0x0200,Mifare_One(S70)
  317.              = 0x0800,Mifare_Pro(X))
  318.              = 0x4403,Mifare_DESFire
  319.   * @retval 狀態值= MI_OK,成功
  320.   */
  321. char PcdRequest ( uint8_t ucReq_code, uint8_t * pTagType )
  322. {
  323.   char cStatus;  
  324.   uint8_t ucComMF522Buf [ MAXRLEN ];
  325.   uint32_t ulLen;

  326.   //清理指示MIFARECyptol單元接通以及所有卡的數據通信被加密的情況
  327.   ClearBitMask ( Status2Reg, 0x08 );
  328.         //發送的最后一個字節的 七位
  329.   WriteRawRC ( BitFramingReg, 0x07 );
  330.   //TX1,TX2管腳的輸出信號傳遞經發送調制的13.56的能量載波信號
  331.   SetBitMask ( TxControlReg, 0x03 );        

  332.   ucComMF522Buf [ 0 ] = ucReq_code;                //存入 卡片命令字

  333.   cStatus = PcdComMF522 ( PCD_TRANSCEIVE,        
  334.                           ucComMF522Buf,
  335.                           1,
  336.                           ucComMF522Buf,
  337.                           & ulLen );        //尋卡  

  338.   if ( ( cStatus == MI_OK ) && ( ulLen == 0x10 ) )        //尋卡成功返回卡類型
  339.   {   
  340.      * pTagType = ucComMF522Buf [ 0 ];
  341.      * ( pTagType + 1 ) = ucComMF522Buf [ 1 ];
  342.   }

  343.   else
  344.    cStatus = MI_ERR;

  345.   return cStatus;         
  346. }

  347. /**
  348.   * @brief  防沖撞
  349.   * @param  pSnr,卡片序列號,4字節
  350.   * @retval 狀態值= MI_OK,成功
  351.   */
  352. char PcdAnticoll ( uint8_t * pSnr )
  353. {
  354.   char cStatus;
  355.   uint8_t uc, ucSnr_check = 0;
  356.   uint8_t ucComMF522Buf [ MAXRLEN ];
  357.   uint32_t ulLen;
  358.   
  359.   //清MFCryptol On位 只有成功執行MFAuthent命令后,該位才能置位
  360.   ClearBitMask ( Status2Reg, 0x08 );
  361.   //清理寄存器 停止收發
  362.   WriteRawRC ( BitFramingReg, 0x00);        
  363.         //清ValuesAfterColl所有接收的位在沖突后被清除
  364.   ClearBitMask ( CollReg, 0x80 );                          

  365.   ucComMF522Buf [ 0 ] = 0x93;                  //卡片防沖突命令
  366.   ucComMF522Buf [ 1 ] = 0x20;

  367.   cStatus = PcdComMF522 ( PCD_TRANSCEIVE,
  368.                           ucComMF522Buf,
  369.                           2,
  370.                           ucComMF522Buf,
  371.                           & ulLen);      //與卡片通信

  372.   if ( cStatus == MI_OK)                            //通信成功
  373.   {
  374.     for ( uc = 0; uc < 4; uc ++ )
  375.     {
  376.        * ( pSnr + uc )  = ucComMF522Buf [ uc ]; //讀出UID
  377.        ucSnr_check ^= ucComMF522Buf [ uc ];
  378.     }
  379.    
  380.     if ( ucSnr_check != ucComMF522Buf [ uc ] )
  381.       cStatus = MI_ERR;                                    
  382.   }
  383.   
  384.   SetBitMask ( CollReg, 0x80 );
  385.       
  386.   return cStatus;               
  387. }


  388. /**
  389.   * @brief  用RC522計算CRC16
  390.   * @param  pIndata,計算CRC16的數組
  391.   * @param  ucLen,計算CRC16的數組字節長度
  392.   * @param  pOutData,存放計算結果存放的首地址
  393.   * @retval 無
  394.   */
  395. void CalulateCRC ( uint8_t * pIndata,
  396.                  uint8_t ucLen,
  397.                  uint8_t * pOutData )
  398. {
  399.   uint8_t uc, ucN;

  400.   ClearBitMask(DivIrqReg,0x04);

  401.   WriteRawRC(CommandReg,PCD_IDLE);

  402.   SetBitMask(FIFOLevelReg,0x80);

  403.   for ( uc = 0; uc < ucLen; uc ++)
  404.     WriteRawRC ( FIFODataReg, * ( pIndata + uc ) );   

  405.   WriteRawRC ( CommandReg, PCD_CALCCRC );

  406.   uc = 0xFF;

  407.   do
  408.   {
  409.       ucN = ReadRawRC ( DivIrqReg );
  410.       uc --;
  411.   } while ( ( uc != 0 ) && ! ( ucN & 0x04 ) );
  412.   
  413.   pOutData [ 0 ] = ReadRawRC ( CRCResultRegL );
  414.   pOutData [ 1 ] = ReadRawRC ( CRCResultRegM );               
  415. }


  416. /**
  417.   * @brief  選定卡片
  418.   * @param  pSnr,卡片序列號,4字節
  419.   * @retval 狀態值= MI_OK,成功
  420.   */
  421. char PcdSelect ( uint8_t * pSnr )
  422. {
  423.   char ucN;
  424.   uint8_t uc;
  425.   uint8_t ucComMF522Buf [ MAXRLEN ];
  426.   uint32_t  ulLen;
  427.   
  428.   
  429.   ucComMF522Buf [ 0 ] = PICC_ANTICOLL1;
  430.   ucComMF522Buf [ 1 ] = 0x70;
  431.   ucComMF522Buf [ 6 ] = 0;

  432.   for ( uc = 0; uc < 4; uc ++ )
  433.   {
  434.     ucComMF522Buf [ uc + 2 ] = * ( pSnr + uc );
  435.     ucComMF522Buf [ 6 ] ^= * ( pSnr + uc );
  436.   }
  437.   
  438.   CalulateCRC ( ucComMF522Buf, 7, & ucComMF522Buf [ 7 ] );

  439.   ClearBitMask ( Status2Reg, 0x08 );

  440.   ucN = PcdComMF522 ( PCD_TRANSCEIVE,
  441.                      ucComMF522Buf,
  442.                      9,
  443.                      ucComMF522Buf,
  444.                      & ulLen );
  445.   
  446.   if ( ( ucN == MI_OK ) && ( ulLen == 0x18 ) )
  447.     ucN = MI_OK;  
  448.   else
  449.     ucN = MI_ERR;   
  450.   
  451.   return ucN;               
  452. }



  453. /**
  454.   * @brief  驗證卡片密碼
  455.   * @param  ucAuth_mode,密碼驗證模式= 0x60,驗證A密鑰,
  456.             密碼驗證模式= 0x61,驗證B密鑰
  457.   * @param  uint8_t ucAddr,塊地址
  458.   * @param  pKey,密碼
  459.   * @param  pSnr,卡片序列號,4字節
  460.   * @retval 狀態值= MI_OK,成功
  461.   */
  462. char PcdAuthState ( uint8_t ucAuth_mode,
  463.                     uint8_t ucAddr,
  464.                     uint8_t * pKey,
  465.                     uint8_t * pSnr )
  466. {
  467.   char cStatus;
  468.   uint8_t uc, ucComMF522Buf [ MAXRLEN ];
  469.   uint32_t ulLen;
  470.   

  471.   ucComMF522Buf [ 0 ] = ucAuth_mode;
  472.   ucComMF522Buf [ 1 ] = ucAddr;

  473.   for ( uc = 0; uc < 6; uc ++ )
  474.     ucComMF522Buf [ uc + 2 ] = * ( pKey + uc );   

  475.   for ( uc = 0; uc < 6; uc ++ )
  476.     ucComMF522Buf [ uc + 8 ] = * ( pSnr + uc );   

  477.   cStatus = PcdComMF522 ( PCD_AUTHENT,
  478.                           ucComMF522Buf,
  479.                           12,
  480.                           ucComMF522Buf,
  481.                           & ulLen );

  482.   if ( ( cStatus != MI_OK ) || ( ! ( ReadRawRC ( Status2Reg ) & 0x08 ) ) )
  483.     cStatus = MI_ERR;   
  484.    
  485.   return cStatus;
  486. }


  487. /**
  488.   * @brief  寫數據到M1卡一塊
  489.   * @param  uint8_t ucAddr,塊地址
  490.   * @param  pData,寫入的數據,16字節
  491.   * @retval 狀態值= MI_OK,成功
  492.   */
  493. char PcdWrite ( uint8_t ucAddr, uint8_t * pData )
  494. {
  495.   char cStatus;
  496.   uint8_t uc, ucComMF522Buf [ MAXRLEN ];
  497.   uint32_t ulLen;
  498.    
  499.   
  500.   ucComMF522Buf [ 0 ] = PICC_WRITE;
  501.   ucComMF522Buf [ 1 ] = ucAddr;

  502.   CalulateCRC ( ucComMF522Buf, 2, & ucComMF522Buf [ 2 ] );

  503.   cStatus = PcdComMF522 ( PCD_TRANSCEIVE,
  504.                           ucComMF522Buf,
  505.                           4,
  506.                           ucComMF522Buf,
  507.                           & ulLen );

  508.   if ( ( cStatus != MI_OK ) || ( ulLen != 4 ) ||
  509.          ( ( ucComMF522Buf [ 0 ] & 0x0F ) != 0x0A ) )
  510.     cStatus = MI_ERR;   
  511.       
  512.   if ( cStatus == MI_OK )
  513.   {
  514.     //memcpy(ucComMF522Buf, pData, 16);
  515.     for ( uc = 0; uc < 16; uc ++ )
  516.       ucComMF522Buf [ uc ] = * ( pData + uc );  
  517.    
  518.     CalulateCRC ( ucComMF522Buf, 16, & ucComMF522Buf [ 16 ] );

  519.     cStatus = PcdComMF522 ( PCD_TRANSCEIVE,
  520.                            ucComMF522Buf,
  521.                            18,
  522.                            ucComMF522Buf,
  523.                            & ulLen );
  524.    
  525.     if ( ( cStatus != MI_OK ) || ( ulLen != 4 ) ||
  526.          ( ( ucComMF522Buf [ 0 ] & 0x0F ) != 0x0A ) )
  527.       cStatus = MI_ERR;   
  528.    
  529.   }         
  530.   return cStatus;               
  531. }


  532. /**
  533.   * @brief  讀取M1卡一塊數據
  534.   * @param  ucAddr,塊地址
  535.   * @param  pData,讀出的數據,16字節
  536.   * @retval 狀態值= MI_OK,成功
  537.   */
  538. char PcdRead ( uint8_t ucAddr, uint8_t * pData )
  539. {
  540.   char cStatus;
  541.   uint8_t uc, ucComMF522Buf [ MAXRLEN ];
  542.   uint32_t ulLen;
  543.   
  544.   ucComMF522Buf [ 0 ] = PICC_READ;
  545. ……………………

  546. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
F103-指南者開發板配套例程.rar (343.49 KB, 下載次數: 25)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线观看 | 日韩欧美视频 | 久久久久久99 | 国产精品久久久乱弄 | 久久精品 | 国产成人精品久久二区二区91 | 中文字幕在线视频免费观看 | 91精品国产91久久久久久不卞 | 色在线免费视频 | 欧美一区免费在线观看 | 一区二区视频在线 | 国产精品国产三级国产aⅴ无密码 | 国产人成在线观看 | 韩日精品一区 | 国产欧美日韩综合精品一区二区 | 日韩一区二区福利 | 日韩毛片免费看 | 欧美日韩在线综合 | 天天干免费视频 | 精品成人在线 | 精品日韩一区二区 | 日韩欧美国产一区二区 | 新超碰97| caoporn国产精品免费公开 | 精品三区| 精品91久久| 久久91精品国产一区二区 | 国产农村一级片 | 国产精品久久久久久久久久尿 | 天天av综合| 中文字幕在线免费视频 | 99这里只有精品视频 | 欧美 日韩 国产 在线 | 色五月激情五月 | 成人午夜精品一区二区三区 | 久久一区| 亚洲成人久久久 | 成人亚洲在线 | 日韩1区| 91一区二区 | 久久国产精品一区 |