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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 28364|回復(fù): 19
收起左側(cè)

紅外編解碼徹底解析

  [復(fù)制鏈接]
ID:188054 發(fā)表于 2017-4-10 14:37 | 顯示全部樓層 |閱讀模式
1、編碼格式
  現(xiàn)有的紅外遙控包括兩種方式:PWM(脈沖寬度調(diào)制)PPM(脈沖位置調(diào)制)
  兩種形式編碼的代表分別為NEC 和PHILIPS 的RC-5、RC-6 以及將來的RC-7。
  PWM(脈沖寬度調(diào)制):以發(fā)射紅外載波的占空比代表“0”和“1”。為了節(jié)省能量,一般情況下,發(fā)射紅外載波的時間固定,通過改變不發(fā)射載波的時間來改變占空比。例如常用的電視遙控器,使用NEC upd6121,其“0”為載波發(fā)射0.56ms,不發(fā)射0.56ms;其“1”為載波發(fā)射0.56ms,不發(fā)射1.68ms;此外,為了解碼的方便,還有引導(dǎo)碼,upd6121 的引導(dǎo)碼為載波發(fā)射9ms,不發(fā)射4.5ms。upd6121 總共的編碼長度為108ms。
  但并不是所有的編碼器都是如此,比如TOSHIBA 的TC9012,其引導(dǎo)碼為載波發(fā)射4.5ms,不發(fā)射4.5ms,其“0”為載波發(fā)射0.52ms,不發(fā)射0.52ms,其“1”為載波發(fā)射0.52ms,不發(fā)射1.04ms。
  PPM(脈沖位置調(diào)制)以發(fā)射載波的位置表示“0”和“1”從發(fā)射載波到不發(fā)射載波為“0”,從不發(fā)射載波到發(fā)射載波為“1”。其發(fā)射載波和不發(fā)射載波的時間相同,都為0.68ms,也就是每位的時間是固定的。
  通過以上對編碼的分析,可以得出以某種固定格式的“0”和“1”去學(xué)習(xí)紅外,是很有可能不成功的。即市面上所宣傳的可以學(xué)習(xí)64 位、128 位必然是不可靠的。
  另外,由于空調(diào)的狀態(tài)遠(yuǎn)多于電視、音像,并且沒有一個標(biāo)準(zhǔn),所以各廠家都按自己的格式去做一個,造成差異更大。比如:美的的遙控器采用PWM 編碼,碼長120ms 左右;新科的遙控器也采用PWM 編碼,碼長500ms 左右。如此大的差異,如果按“位”的概念來講,應(yīng)該是多少位呢?64?128?顯然都不可能包含如此長短不一的編碼。
2、學(xué)習(xí)模式
  現(xiàn)在用來學(xué)習(xí)紅外的CPU,無外乎以下幾種:MCS-51系列、microchip pic16 系列、winbond w741 系列、holtek ht48 系列,以上的CPU 由于價格便宜、使用量大,被廣泛使用在遙控器上。
  以上的CPU 的基本點是:執(zhí)行速度在1us 左右,數(shù)據(jù)存儲器一般為256 個字節(jié)。如果按固定格式學(xué)習(xí),一般可以學(xué)到128 位(其他程序會占用一些數(shù)據(jù)存儲器);如果不按固定的格式,需要找出編碼的最小公約數(shù)作為基本單位,則可以學(xué)習(xí)到的位數(shù)大大降低,達(dá)不到實用的效果。但是,即使如此,找到的最小公約數(shù)不可能滿足所有的紅外設(shè)備,除非最小單位為26us(1000000/38k)。如果達(dá)到這個速度,以上CPU 的速度遠(yuǎn)遠(yuǎn)不夠,并且由于存儲量的加大,數(shù)據(jù)存儲器也遠(yuǎn)遠(yuǎn)不夠用。
  對于電視、音響等,一般使用專用的遙控芯片,比nec,philips,toshiba,sanyo,mitsubish,pana sonic 的芯片,其編碼格式固定,一個鍵只有一個編碼,學(xué)習(xí)比較容易。
  而空調(diào)不一樣,各家空調(diào)廠商都是按自己的要求用cpu 做遙控芯片,編碼形式就有很多種。比如可能沒有引導(dǎo)碼(電視音響類都有)、校驗方式取累加和(電視音響類一般取反碼)等。因為空調(diào)的狀態(tài)多,必須一次發(fā)送完畢,有制冷、溫度、風(fēng)速、自動、定時、加濕、制熱等,所以編碼很長,并且同一個按鍵,在不同狀態(tài)下發(fā)送的編碼不一樣,造成學(xué)習(xí)上的困難。
紅外遙控編碼格式
紅外遙控器的編碼格式通常有兩種格式:NEC 和RC5
NEC 格式的特征:
1:使用38 kHz 載波頻率
2:引導(dǎo)碼間隔是9 ms + 4.5 ms
3:使用16 位客戶代碼
4:使用8 位數(shù)據(jù)代碼和8 位取反的數(shù)據(jù)代碼
22171325-e3fdc36bc7f94e52bfec594560713992.jpg
  不過需要將波形反轉(zhuǎn)一下才方便分析:
22171335-1e9292e5cfcc4173b44bd9383433c6ed.jpg
  NEC 協(xié)議通過脈沖串之間的時間間隔來實現(xiàn)信號的調(diào)制(英文簡寫PWM)。邏輯“0”是由0.56ms的38KHZ 載波和0.560ms 的無載波間隔組成;邏輯“1”是由0.56ms 的38KHZ 載波和1.68ms 的無載波間隔組成;結(jié)束位是0.56ms 的38K 載波。
22171600-a4b1fb3f554f4deabdc13f4adfadaf34.jpg
  下面實例是已知 NEC 類型遙控器所截獲的波形:遙控器的識別碼是 Address=0xDD20;其中一個鍵值是Command=0x0E;
22171610-c829d2e580e34e798812ba2b040eed70.jpg
  注意:波形先是發(fā)低位地址再發(fā)高位地址。所以0000,0100,1011,1011 反轉(zhuǎn)過來就是1101,1101,0010,000 十六進制的DD20;
  鍵值波形如下:
22171654-790f3ee49b754fc397868ed0b6d4de01.jpg
也是要將0111,0000 反轉(zhuǎn)成0000,1110 得到十六進制的0E;另外注意8 位的鍵值代碼是取反后再發(fā)一次的,如圖0111,0000 取反后為1000,1111。最后一位是一個邏輯“1”。


RC5 編碼相對簡單一些:同樣由于取自紅外接收頭的波形需要反相一下波形以便于分析:
22171820-dba0dbfef46d4a43b9b9b40a39233e69.jpg
反相后的波形:
22171834-fdc01df67cb645659929e91264d32664.jpg
根據(jù)編碼規(guī)則:
22171856-a6605d1b593c40a599515c157ec25ce3.jpg
得到一組數(shù)字:110,11010,001101
根據(jù)編碼定義:
22171911-99d0aa85ad364481865ff529ac2af65b.jpg
第一位是起始位S通常是邏輯1
第二位是場位F通常為邏輯1,在RC5 擴展模式下它將最后6位命令代碼擴充到7 位代碼(高位MSB),這樣可以從64 個鍵值擴充到128 個鍵值。
第三位是控制位C它在每按下了一個鍵后翻轉(zhuǎn),這樣就可以區(qū)分一個鍵到底是一直按著沒松手還是松手后重復(fù)按。
如圖所示是同一按鍵重復(fù)按兩次所得波形,只有第三位是相反的邏輯,其它的位邏輯都一樣。
22171917-793d7523cc2348679658a952c0f5b2ec.jpg
其后是五個系統(tǒng)地址位:11010=1A,最后是六個命令位:001101=0D。

 紅外線一開始發(fā)送一段13.5ms 的引導(dǎo)碼,引導(dǎo)碼由9ms 的高電平和4.5ms 的低電平組成,跟著引導(dǎo)碼是系統(tǒng)碼,系統(tǒng)反碼,按鍵碼,按鍵反碼,如果按著鍵不放,則遙控器則發(fā)送一段重復(fù)碼,重復(fù)碼由9ms 的高電平,2.25ms 的低電平,跟著是一個短脈沖,本程序是免費給大家,版權(quán)所有,不得用于商業(yè)目的,如需用到本程序到商業(yè)上請與本人聯(lián)系經(jīng)本人同意后方可用于商業(yè)目的,本程序經(jīng)過試用,能解大部分遙控器的編碼!
  1. #include “at89x52.h”
  2. #define    NULL        0×00        //數(shù)據(jù)無效
  3. #define    RESET       0X01        //程序復(fù)位
  4. #define    REQUEST     0X02        //請求信號
  5. #define    ACK         0×03        //應(yīng)答信號,在接收數(shù)據(jù)后發(fā)送 ACK 信號表示數(shù)據(jù)接收正確,也位請求信號的應(yīng)答信號
  6. #define    NACK        0×04        //應(yīng)答信號,表示接收數(shù)據(jù)錯誤
  7. #define    BUSY        0×05        //忙信號,表示正在忙
  8. #define    FREE        0×06        //空閑信號,表示處于空閑狀態(tài)
  9. #define    READ_IR     0x0b        //讀取紅外
  10. #define    STORE_IR    0x0c        //保存數(shù)據(jù)
  11. #define    READ_KEY    0x0d        //讀取鍵值
  12. #define    RECEIVE     0Xf400      //接收緩沖開始地址
  13. #define    SEND        0xfa00      //發(fā)送緩沖開始地址
  14. #define    IR          0×50        //紅外接收緩沖開始地址
  15. #define    HEAD        0xaa        //數(shù)據(jù)幀頭
  16. #define    TAIL        0×55        //數(shù)據(jù)幀尾
  17. #define    SDA         P1_7
  18. #define    SCL         P1_6
  19. unsigned char xdata *buf1;      //接受數(shù)據(jù)緩沖
  20. unsigned int  buf1_length;      //接收到的數(shù)據(jù)實際長度
  21. unsigned char xdata *buf2;      //發(fā)送數(shù)據(jù)緩沖
  22. unsigned int  buf2_length;      //要發(fā)送的數(shù)據(jù)實際長度
  23. bit buf1_flag;                  //接收標(biāo)志,1 表示接受到一個數(shù)據(jù)幀,0 表示沒有接受到數(shù)據(jù)幀或數(shù)據(jù)幀為空
  24. bit buf2_flag;                  //發(fā)送標(biāo)志,1 表示需要發(fā)送或沒發(fā)送完畢,0 表示沒有要發(fā)送的數(shù)據(jù)或發(fā)送完畢
  25. unsigned char state1,state2;    //用來標(biāo)志接收字符的狀態(tài),state1 用來表示接收狀態(tài),state2 用來表示發(fā)送狀態(tài)
  26. unsigned char data *ir;

  27. union{
  28.     unsigned char a[2];
  29.     unsigned int b;
  30.     unsigned char data *p1[2];
  31.     unsigned int data  *p2[2];
  32.     unsigned char xdata *p3;    //紅外緩沖的指針
  33.     unsigned int xdata  *p4;
  34. }p;   

  35. //union{    //
  36. //  unsigned char a[2];    //

  37. //  unsigned int b;
  38. //  unsigned char data *p1[2];
  39. //  unsigned int data *p2[2];
  40. //  unsigned char xdata *p3;
  41. //  unsigned int xdata *p4;    //地址指針
  42. //}q;    //
  43. union{
  44.     unsigned char a[2];
  45.     unsigned int b;
  46. }count;  

  47. union{
  48.     unsigned char a[2];
  49.     unsigned int b;
  50. }temp;

  51. union{
  52.     unsigned char a[4];
  53.     unsigned int b[2];
  54.     unsigned long c;
  55. }ir_code;

  56. union{
  57.     unsigned char a[4];
  58.     unsigned int b[2];
  59.     unsigned long c;
  60.     unsigned char data *p1[4];
  61.     unsigned int data *p2[4];
  62.     unsigned char xdata *p3[2];
  63.     unsigned int xdata *p4[2];
  64. }I;

  65. unsigned char ir_key;
  66. bit ir_flag;    //紅外接收標(biāo)志,0 為緩沖區(qū)空,1 為接收成功,2 為緩沖溢出
  67. void sub(void);
  68. void delay(void);
  69. void ie_0(void);
  70. void tf_0(void);
  71. void ie_1(void);
  72. void tf_1(void);
  73. void tf_2(void);
  74. void read_ir(void);
  75. void ir_jiema(void);
  76. void ir_init(void);
  77. void ir_exit(void);
  78. void store_ir(void);
  79. void read_key(void);
  80. void reset_iic(void);
  81. unsigned char read_byte_ack_iic(void);
  82. unsigned char read_byte_nack_iic(void);
  83. bit write_byte_iic(unsigned char a);
  84. void send_ack_iic(void);

  85. void send_nack_iic(void);
  86. bit receive_ack_iic(void);
  87. void start_iic(void);
  88. void stop_iic(void);
  89. void write_key_data(unsigned char a);
  90. unsigned int read_key_data(unsigned char a);
  91. void ie0(void)    interrupt 0{ie_0();}
  92. void tf0(void)    interrupt 1{tf_0();}
  93. void ie1(void)    interrupt 2{ie_1();}
  94. void tf1(void)    interrupt 3{tf_1();tf_2();}

  95. void tf2(void) interrupt 5{ //采用中斷方式跟查詢方式相結(jié)合的辦法解碼
  96.     EA="0";        //禁止中斷                                                  
  97.     if(TF2){     //判斷是否是溢出還是電平變化產(chǎn)生的中斷                     
  98.         TF2=0;     //如果是溢出產(chǎn)生的中斷則清除溢出位,重新開放中斷退出         
  99.         EA="1";                                                            
  100.         goto end;                                                           
  101.     }                                                                  
  102.     EXF2=0;     //清除電平變化產(chǎn)生的中斷位                                 
  103.     *ir=RCAP2H; //把捕捉的數(shù)保存起來                                    
  104.     ir++;                                                               
  105.     *ir=RCAP2L;                                                         
  106.     *ir++;                                                              
  107.     F0=1;                                                               
  108.     TR0=1;        //開啟計數(shù)器0                                                
  109.     loop:                                                               
  110.     TL0=0;        //將計數(shù)器0 重新置為零                                       
  111.     TH0=0;                                                              
  112.     while(!EXF2){ //查詢等待EXF2 變?yōu)?                                 
  113.         if(TF0)
  114.             goto exit; //檢查有沒超時,如果超時則退出                    
  115.     };                                                                  
  116.     EXF2=0;        //將EXF2 清零                                               
  117.     if(!TH0)     //判斷是否是長低電平脈沖過來了                             
  118.     {             //不是長低電平脈沖而是短低電平                                    
  119.         if(F0)count.b++; //短脈沖數(shù)加一                                    
  120.         temp.a[0]=RCAP2H; //將捕捉數(shù)臨時存放起來                           
  121.         temp.a[1]=RCAP2L;                                                   
  122.         goto loop; //返回繼續(xù)查詢                                          
  123.     }                                                                  
  124.     else{ //是低電平脈沖,則進行處理                                    
  125.         F0=0;                                                               
  126.         *ir=temp.a[0]; //把連續(xù)的短脈沖總時間記錄下來                       
  127.         ir++;                                                               
  128.         *ir=temp.a[1];                                                      
  129.         ir++;                                                               
  130.         *ir=RCAP2H; //把長電平脈沖時間記錄下來                              
  131.         ir++;                                                               
  132.         *ir=RCAP2L;                                                      
  133.         ir++;   
  134.         if(ir>=0xda) {                                   
  135.             goto exit; //判斷是否溢出緩沖,如果溢出則失敗退出
  136.         }                                                
  137.         goto loop; //返回繼續(xù)查詢                        
  138.     }                                                
  139.     exit:                                            
  140.         ir_flag=1; //置ir_flag 為1 表示接收成功         
  141.     end:                                             
  142.     ;                                                
  143. }                                                

  144. void rs232(void) interrupt 4{                                         
  145.     static unsigned char sbuf1,sbuf2,rsbuf1,rsbuf2; //sbuf1,sbuf2 用來接收發(fā)送臨時用,rsbuf1,rsbuf2 用來分別用來存放接收發(fā)送的半字節(jié)            
  146.     EA="0"; //禁止中斷                                                   
  147.     if(RI){                                                               
  148.         RI="0"; //清除接收中斷標(biāo)志位                                          
  149.         sbuf1=SBUF; //將接收緩沖的字符復(fù)制到sbuf1                             
  150.         if(sbuf1==HEAD){ //判斷是否幀開頭                                    
  151.             state1=10; //是則把state 賦值為10                                       
  152.             buf1=RECEIVE; //初始化接收地址                                       
  153.         }                                                                     
  154.         else{                                                                 
  155.             switch(state1){                                                      
  156.                 case 10:
  157.                     sbuf2=sbuf1>>4; //把高半字節(jié)右移到的半字節(jié)                    
  158.                     sbuf2=~sbuf2;         //把低半字節(jié)取反                                       
  159.                     if((sbuf2&0x0f)!=(sbuf1&0x0f)) //判斷接收是否正確                     
  160.                     {                             //接收錯誤,有可能接收的是數(shù)據(jù)幀尾,也有可能是接收錯誤              
  161.                         if(sbuf1==TAIL)            //判斷是否接收到數(shù)據(jù)幀尾                              
  162.                         {                         //是接收到數(shù)據(jù)幀尾                                                  
  163.                             buf1=RECEIVE;         //初始化接收的地址                                      
  164.                             if(*buf1==RESET)    //判斷是否為復(fù)位命令                                 
  165.                             {                                                                     
  166.                                 ES="0";                                                               
  167.                                 sbuf2=SP+1;                                                           
  168.                                 for(p.p1[0]=SP-0×10;
  169.                                 p.p1[0]<=sbuf2;
  170.                                 p.p1[0]++)*p.p1[0]=0;                                                     
  171.                             }                                                                     
  172.                             state1=0;         //將接收狀態(tài)標(biāo)志置為零,接收下一個數(shù)據(jù)幀                    
  173.                             buf1_flag=1;     //置接收標(biāo)志為1,表示已經(jīng)接收到一個數(shù)據(jù)幀               
  174.                             REN="0";         //禁止接收                                                   
  175.                         }                                                                     
  176.                         else                                                                  
  177.                         {                     //不是接受到數(shù)據(jù)幀尾,表明接收錯誤                                 
  178.                             state1=0;         // 將接收狀態(tài)標(biāo)志置為零,重新接收                           
  179.                             buf1=RECEIVE;    //初始化發(fā)送的地址                                      
  180.                             *buf1=NACK;        //把NACK 信號存入接收緩沖里                              
  181.                             buf1_flag=1;    //置標(biāo)志位為1,使主程序能對接收錯誤進行處理              
  182.                             REN="0";        //禁止接收        
  183.                         }                                                              
  184.                     }                                                              
  185.                     else                                                           
  186.                     { //接收正確                                                   
  187.                         rsbuf1=~sbuf1; //按位取反,使高半字節(jié)變原碼                    
  188.                         rsbuf1&=0xf0; //僅保留高半字節(jié),低半字節(jié)去掉                  
  189.                         state1=20; //將狀態(tài)標(biāo)志置為20,準(zhǔn)備接收低半字節(jié)               
  190.                     }                                                              
  191.                     break;                                                         
  192.                 case 20:
  193.                     sbuf2=sbuf1>>4; //把高半字節(jié)右移到的半字節(jié)            
  194.                     sbuf2=~sbuf2;    //將低半字節(jié)取反                                 
  195.                     if((sbuf2&0x0f)!=(sbuf1&0x0f)) //判斷接收是否正確              
  196.                     {                     //接受錯誤                                                   
  197.                         state1=0;         // 將接收狀態(tài)標(biāo)志置為零,重新接收                    
  198.                         buf1=RECEIVE;    //初始化接收的地址                              
  199.                         *buf1=NACK;     //把NACK 信號存入發(fā)送緩沖里                        
  200.                         buf1_flag=1;     //置標(biāo)志位為1,使主程序能對接收錯誤進行處理      
  201.                         REN="0";         //禁止接收                                            
  202.                     }                                                              
  203.                     else                                                           
  204.                     {                                                              
  205.                         sbuf1&=0x0f;     //僅保留低半字節(jié),去掉高半字節(jié)                    
  206.                         rsbuf1|=sbuf1;    //高低半字節(jié)合并                                
  207.                         *buf1++=rsbuf1; //將接收的數(shù)據(jù)保存至接收緩沖里,并且數(shù)據(jù)指針加一
  208.                         buf1_length++;    //接收數(shù)據(jù)長度加一                              
  209.                         state1=10;        //將state1 置為10,準(zhǔn)備接收下個字節(jié)的高半字節(jié)      
  210.                     }                                                              
  211.                     break;                                                         
  212.             }                                                              
  213.         }                                                              
  214.     }                                                              
  215.     else{
  216.         TI="0";                 //清除發(fā)送中斷標(biāo)志
  217.         if(buf2_length)         //判斷發(fā)送長度是否為零
  218.         {                         //發(fā)送長度不為零
  219.             if(state2==0)         //判斷是否發(fā)送高半字節(jié)
  220.             {                     //發(fā)送高半字節(jié)
  221.                 sbuf2=*buf2;    //將要發(fā)送的字節(jié)送到sbuf2
  222.                 rsbuf2=~sbuf2;     //取反,使高半字節(jié)變?yōu)榉创a
  223.                 sbuf2>>=4;         //將高半字節(jié)右移到低半字節(jié)
  224.                 rsbuf2&=0xf0;     //保留高半字節(jié),去掉低半字節(jié)
  225.                 sbuf2&=0x0f;     //保留低半字節(jié),去掉高半字節(jié)
  226.                 rsbuf2|=sbuf2;     //合并高低半字節(jié)
  227.                 SBUF="rsbuf2";     //發(fā)送出去
  228.                 state2=10;         //將state2 置為10 準(zhǔn)備發(fā)送下半字節(jié)
  229.             }
  230.             else
  231.             {     //發(fā)送低半字節(jié)
  232.                 sbuf2=*buf2;     //將要發(fā)送的字節(jié)送到sbuf2
  233.                 buf2++;         //指針加一
  234.                 buf2_length–;     //發(fā)送數(shù)據(jù)長度減一
  235.                 rsbuf2=~sbuf2;     //取反,使低半字節(jié)變?yōu)榉创a
  236.                 rsbuf2<<=4;     //將低半字節(jié)反碼左移到高半字節(jié)
  237.                 rsbuf2&=0xf0;     //保留高半字節(jié),去掉低半字節(jié)
  238.                 sbuf2&=0x0f;     //保留低半字節(jié),去掉高半字節(jié)
  239.                 rsbuf2|=sbuf2;     //合并高低半字節(jié)
  240.                 SBUF="rsbuf2";     //發(fā)送出
  241.                 state2=0;
  242.             }
  243.         }
  244.         else
  245.         { //如果發(fā)送數(shù)據(jù)長度為零則發(fā)送數(shù)據(jù)幀尾
  246.             if(buf2_flag){ //判斷是否發(fā)過數(shù)據(jù)幀尾
  247.                 SBUF="TAIL"; //將數(shù)據(jù)幀尾發(fā)送出去
  248.                 while(TI==0);
  249.                 TI="0";
  250.                 buf2_flag=0; //置發(fā)送標(biāo)志為零,表示發(fā)送完畢
  251.             }
  252.         }
  253.     }
  254.     EA="1"; //開放中斷
  255. }
復(fù)制代碼



評分

參與人數(shù) 1黑幣 +3 收起 理由
w8751526 + 3 很給力!

查看全部評分

回復(fù)

使用道具 舉報

ID:88256 發(fā)表于 2020-2-29 20:02 | 顯示全部樓層
這么多人回復(fù),就沒人說這個程序有點小“錯誤”?這個帖子也是轉(zhuǎn)帖的,樓主也就這么一個帖子,我下載編譯了一下,有幾個錯誤,其中一個就是個陷阱,專門針對伸手黨的,至少得看得懂程序排查得了問題,不知道是復(fù)制過來就錯了還是論壇故意添加錯誤,我查到問題再去百度一樣的程序(只看了一個一樣的程序,其它的沒去看),看到那個一樣的程序并沒有錯誤。
回復(fù)

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
ID:79034 發(fā)表于 2018-6-12 14:27 | 顯示全部樓層
這個為什么沒人頂?這個教程比其他單一破解音響,山寨電視機的好多了啊。
回復(fù)

使用道具 舉報

ID:335982 發(fā)表于 2018-7-2 13:23 | 顯示全部樓層
好及時,太感謝了
回復(fù)

使用道具 舉報

ID:325524 發(fā)表于 2018-7-2 16:52 | 顯示全部樓層
菜b給大佬貴了,看不懂啊····,留言一下,希望以后能理解
回復(fù)

使用道具 舉報

ID:250287 發(fā)表于 2018-7-4 22:23 | 顯示全部樓層
確實厲害!!!不是很懂  慢慢鉆研
回復(fù)

使用道具 舉報

ID:36525 發(fā)表于 2018-7-5 08:24 | 顯示全部樓層
不是不頂學(xué)這個太難還需設(shè)備,遙控器壞了10元買個萬能遙控器就好
回復(fù)

使用道具 舉報

ID:73182 發(fā)表于 2018-7-5 13:22 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報

ID:363696 發(fā)表于 2018-7-7 01:21 | 顯示全部樓層
最近在學(xué)通信技術(shù),謝謝樓主的分享,可以參考學(xué)習(xí),已收藏
回復(fù)

使用道具 舉報

10#
無效樓層,該帖已經(jīng)被刪除
ID:364805 發(fā)表于 2019-6-4 15:01 | 顯示全部樓層

感謝分享
回復(fù)

使用道具 舉報

ID:303735 發(fā)表于 2019-6-4 19:49 | 顯示全部樓層
原理懂就是不會編寫程序
回復(fù)

使用道具 舉報

ID:253767 發(fā)表于 2019-6-5 07:29 | 顯示全部樓層
謝謝分享!!!
回復(fù)

使用道具 舉報

ID:56665 發(fā)表于 2019-6-5 08:31 | 顯示全部樓層
這個是用于RC5的嗎,太長了有空再看
回復(fù)

使用道具 舉報

ID:184625 發(fā)表于 2019-8-25 00:24 | 顯示全部樓層
感謝分享,贊一個
回復(fù)

使用道具 舉報

16#
無效樓層,該帖已經(jīng)被刪除
17#
無效樓層,該帖已經(jīng)被刪除
ID:282095 發(fā)表于 2019-8-25 07:15 | 顯示全部樓層
感謝分享
回復(fù)

使用道具 舉報

ID:67537 發(fā)表于 2019-10-8 22:27 | 顯示全部樓層
看不懂用在哪里,感謝分享
回復(fù)

使用道具 舉報

ID:624368 發(fā)表于 2019-10-15 11:22 | 顯示全部樓層
mark      
回復(fù)

使用道具 舉報

ID:620993 發(fā)表于 2019-10-15 16:31 | 顯示全部樓層
很好的資料,收藏了。謝謝
回復(fù)

使用道具 舉報

ID:88256 發(fā)表于 2020-2-15 01:24 | 顯示全部樓層
看了一下,程序有錯誤也不齊全啊,有完整的程序提供學(xué)習(xí)一下嗎?
回復(fù)

使用道具 舉報

ID:693584 發(fā)表于 2020-2-15 17:03 | 顯示全部樓層
大佬牛逼!
回復(fù)

使用道具 舉報

24#
無效樓層,該帖已經(jīng)被刪除
26#
無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久免费精品国产 | 精品欧美在线观看 | 欧美在线一二三 | 亚洲视频免费在线观看 | 日韩精品一区二区三区四区视频 | 91高清视频 | 亚洲精品一区二区三区四区高清 | 天天久久 | 欧美成人精品在线 | 99精品视频免费观看 | 久久久精品视 | 国产玖玖 | 91精品国产乱码久久蜜臀 | 亚洲乱码一区二区三区在线观看 | 国产一区二区三区视频 | 国产成人精品一区二 | 野狼在线社区2017入口 | 91在线观看免费 | 人成在线视频 | 黑人一级片视频 | 99视频网站 | 天天草视频 | 日韩福利在线观看 | 国产不卡在线播放 | 免费看的黄网站 | 日本免费一区二区三区四区 | 欧美福利在线 | 亚洲国产成人av好男人在线观看 | 国产农村一级国产农村 | 国产高清视频在线观看 | 日韩在线国产 | 黑人巨大精品欧美一区二区免费 | 色婷婷综合久久久久中文一区二区 | a级在线免费观看 | 精品美女久久久久久免费 | 日韩一二区在线观看 | 亚洲3级 | 亚洲巨乳自拍在线视频 | 亚洲aⅴ精品 | 九九九久久国产免费 | 无吗视频 |