找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3243|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STC11F32單片機與RC522通信的代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:185809 發(fā)表于 2017-4-3 17:29 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
STC11F32單片機芯片與RC522通信的源代碼:

完整源碼下載:
STC11F32_RC522-bke.rar (1.22 MB, 下載次數(shù): 30)




主程序:
  1. #include "include.h"


  2. void delay_ms( INT16U tms )
  3. {
  4.     INT16U i;

  5.     while( tms-- )
  6.     {
  7.             for( i = 0; i < 300; i ++ )
  8.             {
  9.             nop();
  10.             nop();
  11.             nop();
  12.             nop();
  13.             nop();
  14.             nop();
  15.             }
  16.     }
  17. }

  18. void init_led( void )
  19. {
  20.     P1 = 0x00;
  21.     delay_ms(200);
  22.     P1 = 0Xff;
  23. }

  24. void init_port( void )
  25. {
  26. //    P0M1 = 0x00;
  27. //    P0M0 = 0xff;

  28.     P3M1 &= ~0x10;
  29.     P3M0 |= 0x10;
  30.     //
  31.     //        P1M1=0x00;
  32.     //        P1M0=0x00;
  33.     //
  34.     //        P2M1=0x00;
  35.     //        P2M0=0xff;
  36.     //
  37.     //        P30=1;
  38.     //        P3M1=0x41;
  39.     //        P3M0=0xa2;
  40.     //
  41.     //        P4M1=0x02;
  42.     //        P4M0=0x00;
  43.     BEEP_OFF;
  44.     LED_OFF;
  45. }

  46. void init_par( void )
  47. {
  48.     BEEP_OFF;
  49.     LED_OFF;
  50. }

  51. void init_wdt( void )         //2.7S
  52. {
  53.     //        WDT_CONTR = 0xC1;
  54.     //        WDT_CONTR = 0x3E;
  55. }

  56. void feed_wdt( void )
  57. {
  58.     //        WDT_CONTR = 0x3E;
  59. }

  60. void init_all(void)
  61. {
  62.     EA = 0;

  63.     init_timer();
  64.     init_uart();
  65.     init_port();
  66.     init_rc522();
  67.     init_par();
  68.     init_wdt();
  69.     init_led();

  70.     EA = 1;
  71. }

  72. void main(void)
  73. {
  74.     if((PCON&0x10)==0) //如果POF位=0
  75.     {
  76.        PCON=PCON|0x10;  //將POF位置1
  77.        IAP_CONTR=0x60;  //軟復(fù)位,從ISP監(jiān)控區(qū)啟動
  78.     }
  79.     else
  80.     {
  81.        PCON=PCON&0xef;  //將POF位清零
  82.     }

  83.     lcdInitinal();
  84.     lcdMsg("創(chuàng)思通信",2,2);
  85.     lcdMsg("wwwcsgsmcom",4,1);
  86.     delay_ms(2000);
  87.     lcdInitinal();
  88.     delay_ms(2);
  89.     lcdMsg("余額:----",4,0);
  90.     lcdMsg("卡號:----",2,0);
  91.     lcdMsg("消費:----",3,0);
  92.     lcdMsg("狀態(tài):----",1,0);

  93.     init_all();


  94.     while(1)
  95.     {
  96.         feed_wdt();
  97.         ctrl_process();
  98.     }
  99. }
復(fù)制代碼


  1. #include "include.h"

  2. void delay_ns(unsigned int ns)
  3. {
  4.         unsigned int i;
  5.         for(i=0;i<ns;i++)
  6.         {
  7.                 nop();
  8.                 nop();
  9.                 nop();
  10.         }
  11. }

  12. //------------------------------------------
  13. // 讀SPI數(shù)據(jù)
  14. //------------------------------------------
  15. unsigned char SPIReadByte(void)
  16. {
  17.         unsigned char SPICount;                                       // Counter used to clock out the data
  18.         unsigned char SPIData;
  19.                         
  20.         SPIData = 0;
  21.         for (SPICount = 0; SPICount < 8; SPICount++)                  // Prepare to clock in the data to be read
  22.         {
  23.                 SPIData <<=1;                                               // Rotate the data
  24.                 CLR_SPI_CK; //nop();//nop();                                         // Raise the clock to clock the data out of the MAX7456
  25.                 if(STU_SPI_MISO)
  26.                 {
  27.                          SPIData|=0x01;
  28.                 }
  29.                 SET_SPI_CK;   //nop();//nop();                                               // Drop the clock ready for the next bit
  30.         }                                                             // and loop back
  31.         return (SPIData);                              // Finally return the read data
  32. }
  33. //------------------------------------------
  34. // 寫SPI數(shù)據(jù)
  35. //------------------------------------------
  36. void SPIWriteByte(unsigned char SPIData)
  37. {
  38.         unsigned char SPICount;                                       // Counter used to clock out the data
  39.         for (SPICount = 0; SPICount < 8; SPICount++)
  40.         {
  41.                 if (SPIData & 0x80)
  42.                 {
  43.                         SET_SPI_MOSI;
  44.                 }
  45.                 else
  46.                 {
  47.                         CLR_SPI_MOSI;
  48.                 }
  49.                 nop();nop();
  50.                 CLR_SPI_CK;nop();nop();
  51.                 SET_SPI_CK;nop();nop();
  52.                 SPIData <<= 1;
  53.         }                 
  54. }

  55. /////////////////////////////////////////////////////////////////////
  56. //功    能:讀RC632寄存器
  57. //參數(shù)說明:Address[IN]:寄存器地址
  58. //返    回:讀出的值
  59. /////////////////////////////////////////////////////////////////////
  60. unsigned char ReadRawRC(unsigned char Address)
  61. {
  62.         unsigned char ucAddr;
  63.     unsigned char ucResult=0;
  64.         CLR_SPI_CS;
  65.     ucAddr = ((Address<<1)&0x7E)|0x80;
  66.         SPIWriteByte(ucAddr);
  67.         ucResult=SPIReadByte();
  68.         SET_SPI_CS;
  69.         return ucResult;
  70. }

  71. /////////////////////////////////////////////////////////////////////
  72. //功    能:寫RC632寄存器
  73. //參數(shù)說明:Address[IN]:寄存器地址
  74. //          value[IN]:寫入的值
  75. /////////////////////////////////////////////////////////////////////
  76. void WriteRawRC(unsigned char Address, unsigned char value)
  77. {  
  78.     unsigned char ucAddr;

  79.         CLR_SPI_CS;
  80.     ucAddr = ((Address<<1)&0x7E);
  81.         SPIWriteByte(ucAddr);
  82.         SPIWriteByte(value);
  83.         SET_SPI_CS;
  84. }   

  85. /////////////////////////////////////////////////////////////////////
  86. //功    能:清RC522寄存器位
  87. //參數(shù)說明:reg[IN]:寄存器地址
  88. //          mask[IN]:清位值
  89. /////////////////////////////////////////////////////////////////////
  90. void ClearBitMask(unsigned char reg,unsigned char mask)  
  91. {
  92.     char tmp = 0x00;
  93.     tmp = ReadRawRC(reg);
  94.     WriteRawRC(reg, tmp & ~mask);  // clear bit mask
  95. }


  96. /////////////////////////////////////////////////////////////////////
  97. //功    能:置RC522寄存器位
  98. //參數(shù)說明:reg[IN]:寄存器地址
  99. //          mask[IN]:置位值
  100. /////////////////////////////////////////////////////////////////////
  101. void SetBitMask(unsigned char reg,unsigned char mask)  
  102. {
  103.     char tmp = 0x00;
  104.     tmp = ReadRawRC(reg);
  105.     WriteRawRC(reg,tmp | mask);  // set bit mask
  106. }

  107. /////////////////////////////////////////////////////////////////////
  108. //用MF522計算CRC16函數(shù)
  109. /////////////////////////////////////////////////////////////////////
  110. void CalulateCRC(unsigned char *pIndata,unsigned char len,unsigned char *pOutData)
  111. {
  112.     unsigned char i,n;
  113.     ClearBitMask(DivIrqReg,0x04);
  114.     WriteRawRC(CommandReg,PCD_IDLE);
  115.     SetBitMask(FIFOLevelReg,0x80);
  116.     for (i=0; i<len; i++)
  117.     {   WriteRawRC(FIFODataReg, *(pIndata+i));   }
  118.     WriteRawRC(CommandReg, PCD_CALCCRC);
  119.     i = 0xFF;
  120.     do
  121.     {
  122.         n = ReadRawRC(DivIrqReg);
  123.         i--;
  124.     }
  125.     while ((i!=0) && !(n&0x04));
  126.     pOutData[0] = ReadRawRC(CRCResultRegL);
  127.     pOutData[1] = ReadRawRC(CRCResultRegM);
  128. }

  129. /////////////////////////////////////////////////////////////////////
  130. //功    能:通過RC522和ISO14443卡通訊
  131. //參數(shù)說明:Command[IN]:RC522命令字
  132. //          pInData[IN]:通過RC522發(fā)送到卡片的數(shù)據(jù)
  133. //          InLenByte[IN]:發(fā)送數(shù)據(jù)的字節(jié)長度
  134. //          pOutData[OUT]:接收到的卡片返回數(shù)據(jù)
  135. //          *pOutLenBit[OUT]:返回數(shù)據(jù)的位長度
  136. /////////////////////////////////////////////////////////////////////
  137. char PcdComMF522(unsigned char Command,
  138.                  unsigned char *pInData,
  139.                  unsigned char InLenByte,
  140.                  unsigned char *pOutData,
  141.                  unsigned int *pOutLenBit)
  142. {
  143.     char status = MI_ERR;
  144.     unsigned char irqEn   = 0x00;
  145.     unsigned char waitFor = 0x00;
  146.     unsigned char lastBits;
  147.     unsigned char n;
  148.     unsigned int i;
  149.     switch (Command)
  150.     {
  151.         case PCD_AUTHENT:
  152.                         irqEn   = 0x12;
  153.                         waitFor = 0x10;
  154.                         break;
  155.                 case PCD_TRANSCEIVE:
  156.                         irqEn   = 0x77;
  157.                         waitFor = 0x30;
  158.                         break;
  159.                 default:
  160.                         break;
  161.     }
  162.    
  163.     WriteRawRC(ComIEnReg,irqEn|0x80);
  164.     ClearBitMask(ComIrqReg,0x80);
  165.     WriteRawRC(CommandReg,PCD_IDLE);
  166.     SetBitMask(FIFOLevelReg,0x80);
  167.    
  168.     for (i=0; i<InLenByte; i++)
  169.     {   
  170.                 WriteRawRC(FIFODataReg, pInData[i]);   
  171.         }
  172.     WriteRawRC(CommandReg, Command);
  173.    
  174.     if (Command == PCD_TRANSCEIVE)
  175.     {   
  176.                 SetBitMask(BitFramingReg,0x80);  
  177.         }
  178.    
  179.     //i = 600;//根據(jù)時鐘頻率調(diào)整,操作M1卡最大等待時間25ms
  180.         i = 2000;
  181.     do
  182.     {
  183.         n = ReadRawRC(ComIrqReg);
  184.         i--;
  185.     }
  186.     while ((i!=0) && !(n&0x01) && !(n&waitFor));
  187.     ClearBitMask(BitFramingReg,0x80);

  188.     if (i!=0)
  189.     {   
  190.         if(!(ReadRawRC(ErrorReg)&0x1B))
  191.         {
  192.             status = MI_OK;
  193.             if (n & irqEn & 0x01)
  194.             {   status = MI_NOTAGERR;   }
  195.             if (Command == PCD_TRANSCEIVE)
  196.             {
  197.                        n = ReadRawRC(FIFOLevelReg);
  198.                       lastBits = ReadRawRC(ControlReg) & 0x07;
  199.                 if (lastBits)
  200.                 {   
  201.                                         *pOutLenBit = (n-1)*8 + lastBits;   
  202.                                 }
  203.                 else
  204.                 {   
  205.                                         *pOutLenBit = n*8;   
  206.                                 }
  207.                 if (n == 0)
  208.                 {   
  209.                                         n = 1;   
  210.                                 }
  211.                 if (n > MAXRLEN)
  212.                 {   
  213.                                         n = MAXRLEN;   
  214.                                 }
  215.                 for (i=0; i<n; i++)
  216.                 {   
  217.                                         pOutData[i] = ReadRawRC(FIFODataReg);   
  218.                                 }
  219.             }
  220.         }
  221.         else
  222.         {   
  223.                         status = MI_ERR;   
  224.                 }
  225.         
  226.     }
  227.    
  228.     SetBitMask(ControlReg,0x80);           // stop timer now
  229.     WriteRawRC(CommandReg,PCD_IDLE);
  230.     return status;
  231. }
  232.                      
  233. /////////////////////////////////////////////////////////////////////
  234. //功    能:尋卡
  235. //參數(shù)說明: req_code[IN]:尋卡方式
  236. //                0x52 = 尋感應(yīng)區(qū)內(nèi)所有符合14443A標(biāo)準(zhǔn)的卡
  237. //                0x26 = 尋未進入休眠狀態(tài)的卡
  238. //          pTagType[OUT]:卡片類型代碼
  239. //                0x4400 = Mifare_UltraLight
  240. //                0x0400 = Mifare_One(S50)
  241. //                0x0200 = Mifare_One(S70)
  242. //                0x0800 = Mifare_Pro(X)
  243. //                0x4403 = Mifare_DESFire
  244. //返    回: 成功返回MI_OK
  245. /////////////////////////////////////////////////////////////////////
  246. char PcdRequest(unsigned char req_code,unsigned char *pTagType)
  247. {
  248.         char status;  
  249.         unsigned int unLen;
  250.         unsigned char ucComMF522Buf[MAXRLEN];

  251.         ClearBitMask(Status2Reg,0x08);
  252.         WriteRawRC(BitFramingReg,0x07);
  253.         SetBitMask(TxControlReg,0x03);

  254.         ucComMF522Buf[0] = req_code;

  255.         status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen);

  256.         if ((status == MI_OK) && (unLen == 0x10))
  257.         {   
  258.                 *pTagType     = ucComMF522Buf[0];
  259.                 *(pTagType+1) = ucComMF522Buf[1];
  260.         }
  261.         else
  262.         {   
  263.                 status = MI_ERR;   
  264.         }
  265.    
  266.         return status;
  267. }


  268. /////////////////////////////////////////////////////////////////////
  269. //功    能:防沖撞
  270. //參數(shù)說明: pSnr[OUT]:卡片序列號,4字節(jié)
  271. //返    回: 成功返回MI_OK
  272. /////////////////////////////////////////////////////////////////////  
  273. char PcdAnticoll(unsigned char *pSnr)
  274. {
  275.     char status;
  276.     unsigned char i,snr_check=0;
  277.     unsigned int unLen;
  278.     unsigned char ucComMF522Buf[MAXRLEN];
  279.    

  280.     ClearBitMask(Status2Reg,0x08);
  281.     WriteRawRC(BitFramingReg,0x00);
  282.     ClearBitMask(CollReg,0x80);

  283.     ucComMF522Buf[0] = PICC_ANTICOLL1;
  284.     ucComMF522Buf[1] = 0x20;

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

  286.     if (status == MI_OK)
  287.         {
  288.                 for (i=0; i<4; i++)
  289.                 {   
  290.                         *(pSnr+i)  = ucComMF522Buf[i];
  291.                         snr_check ^= ucComMF522Buf[i];
  292.                 }
  293.                 if (snr_check != ucComMF522Buf[i])
  294.                    {   
  295.                         status = MI_ERR;   
  296.                 }
  297.     }
  298.    
  299.     SetBitMask(CollReg,0x80);
  300.     return status;
  301. }

  302. /////////////////////////////////////////////////////////////////////
  303. //功    能:選定卡片
  304. //參數(shù)說明: pSnr[IN]:卡片序列號,4字節(jié)
  305. //返    回: 成功返回MI_OK
  306. /////////////////////////////////////////////////////////////////////
  307. char PcdSelect(unsigned char *pSnr)
  308. {
  309.     char status;
  310.     unsigned char i;
  311.     unsigned int unLen;
  312.     unsigned char ucComMF522Buf[MAXRLEN];
  313.    
  314.     ucComMF522Buf[0] = PICC_ANTICOLL1;
  315.     ucComMF522Buf[1] = 0x70;
  316.     ucComMF522Buf[6] = 0;
  317.     for (i=0; i<4; i++)
  318.     {
  319.             ucComMF522Buf[i+2] = *(pSnr+i);
  320.             ucComMF522Buf[6]  ^= *(pSnr+i);
  321.     }
  322.     CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]);
  323.   
  324.     ClearBitMask(Status2Reg,0x08);

  325.     status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen);
  326.    
  327.     if ((status == MI_OK) && (unLen == 0x18))
  328.     {   
  329.                 status = MI_OK;  
  330.         }
  331.     else
  332.     {   
  333.                 status = MI_ERR;   
  334.         }

  335.     return status;
  336. }

  337. /////////////////////////////////////////////////////////////////////
  338. //功    能:驗證卡片密碼
  339. //參數(shù)說明: auth_mode[IN]: 密碼驗證模式
  340. //                 0x60 = 驗證A密鑰
  341. //                 0x61 = 驗證B密鑰
  342. //          addr[IN]:塊地址
  343. //          pKey[IN]:密碼
  344. //          pSnr[IN]:卡片序列號,4字節(jié)
  345. //返    回: 成功返回MI_OK
  346. /////////////////////////////////////////////////////////////////////               
  347. char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr)
  348. {
  349.     char status;
  350.     unsigned int unLen;
  351.     unsigned char ucComMF522Buf[MAXRLEN];

  352.     ucComMF522Buf[0] = auth_mode;
  353.     ucComMF522Buf[1] = addr;
  354.         memcpy(&ucComMF522Buf[2], pKey, 6);
  355.         memcpy(&ucComMF522Buf[8], pSnr, 6);
  356.    
  357.     status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen);
  358.     if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08)))
  359.     {   
  360.                 status = MI_ERR;   
  361.         }
  362.    
  363.     return status;
  364. }

  365. /////////////////////////////////////////////////////////////////////
  366. //功    能:讀取M1卡一塊數(shù)據(jù)
  367. //參數(shù)說明: addr[IN]:塊地址
  368. //          pData[OUT]:讀出的數(shù)據(jù),16字節(jié)
  369. //返    回: 成功返回MI_OK
  370. /////////////////////////////////////////////////////////////////////
  371. char PcdRead(unsigned char addr,unsigned char *pData)
  372. {
  373.     char status;
  374.     unsigned int unLen;
  375.     unsigned char ucComMF522Buf[MAXRLEN];

  376.     ucComMF522Buf[0] = PICC_READ;
  377.     ucComMF522Buf[1] = addr;
  378.     CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
  379.    
  380.     status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
  381.     if ((status == MI_OK) && (unLen == 0x90))
  382.            {   
  383.                 memcpy(pData, ucComMF522Buf, 16);   
  384.         }
  385.     else
  386.     {   
  387.                 status = MI_ERR;   
  388.         }
  389.    
  390.     return status;
  391. }

  392. /////////////////////////////////////////////////////////////////////
  393. //功    能:寫數(shù)據(jù)到M1卡一塊
  394. //參數(shù)說明: addr[IN]:塊地址
  395. //          pData[IN]:寫入的數(shù)據(jù),16字節(jié)
  396. //返    回: 成功返回MI_OK
  397. /////////////////////////////////////////////////////////////////////                  
  398. char PcdWrite(unsigned char addr,unsigned char *pData)
  399. {
  400.     char status;
  401.     unsigned int unLen;
  402.     unsigned char ucComMF522Buf[MAXRLEN];
  403.    
  404.     ucComMF522Buf[0] = PICC_WRITE;
  405.     ucComMF522Buf[1] = addr;
  406.     CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);

  407.     status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);

  408.     if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
  409.     {   
  410.                 status = MI_ERR;   
  411.         }
  412.         
  413.     if (status == MI_OK)
  414.     {
  415.         memcpy(ucComMF522Buf, pData, 16);
  416.         CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]);

  417.         status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen);
  418.         if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
  419.         {   
  420.                         status = MI_ERR;   
  421.                 }
  422.     }
  423.    
  424.     return status;
  425. }

  426. /////////////////////////////////////////////////////////////////////
  427. //功    能:命令卡片進入休眠狀態(tài)
  428. //返    回: 成功返回MI_OK
  429. /////////////////////////////////////////////////////////////////////
  430. char PcdHalt(void)
  431. {
  432.     char status;
  433.     unsigned int unLen;
  434.     unsigned char ucComMF522Buf[MAXRLEN];

  435.     ucComMF522Buf[0] = PICC_HALT;
  436.     ucComMF522Buf[1] = 0;
  437.     CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);

  438.     status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);

  439.     return MI_OK;
  440. }

  441. /////////////////////////////////////////////////////////////////////
  442. //功    能:復(fù)位RC522
  443. //返    回: 成功返回MI_OK
  444. /////////////////////////////////////////////////////////////////////
  445. char PcdReset(void)
  446. {
  447.         SET_RC522RST;
  448.     delay_ns(10);
  449.         CLR_RC522RST;
  450.     delay_ns(10);
  451.         SET_RC522RST;
  452.     delay_ns(10);
  453.     WriteRawRC(CommandReg,PCD_RESETPHASE);
  454.     delay_ns(10);
  455.    
  456.     WriteRawRC(ModeReg,0x3D);            //和Mifare卡通訊,CRC初始值0x6363
  457.     WriteRawRC(TReloadRegL,30);           
  458.     WriteRawRC(TReloadRegH,0);
  459.     WriteRawRC(TModeReg,0x8D);
  460.     WriteRawRC(TPrescalerReg,0x3E);
  461.         
  462.         WriteRawRC(TxAutoReg,0x40);//必須要
  463.    
  464.     return MI_OK;
  465. }
  466. //////////////////////////////////////////////////////////////////////
  467. //設(shè)置RC632的工作方式
  468. //////////////////////////////////////////////////////////////////////
  469. char M500PcdConfigISOType(unsigned char type)
  470. {
  471.    if (type == 'A')                     //ISO14443_A
  472.    {
  473.        ClearBitMask(Status2Reg,0x08);
  474.        WriteRawRC(ModeReg,0x3D);//3F
  475.        WriteRawRC(RxSelReg,0x86);//84
  476.        WriteRawRC(RFCfgReg,0x7F);   //4F
  477.               WriteRawRC(TReloadRegL,30);//tmoLength);// TReloadVal = 'h6a =tmoLength(dec)
  478.            WriteRawRC(TReloadRegH,0);
  479.        WriteRawRC(TModeReg,0x8D);
  480.            WriteRawRC(TPrescalerReg,0x3E);
  481.            delay_ns(1000);
  482.        PcdAntennaOn();
  483.    }
  484.    else{ return -1; }
  485.    
  486.    return MI_OK;
  487. }

  488. /////////////////////////////////////////////////////////////////////
  489. //開啟天線  
  490. //每次啟動或關(guān)閉天險發(fā)射之間應(yīng)至少有1ms的間隔
  491. /////////////////////////////////////////////////////////////////////


  492. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼


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

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表