红外遥控解码程序问题

2019-07-15 10:30发布

我在写红外遥控的C语言解码程序,参考了一份代码,代码很短,不到300行,但是呢,对于这个数组:uchar IRCOM[7];
的值是如何得来的,我真搞不懂,没有任何地方有给它赋值过,导致我对这句话很不理解:IRCOM[j]=IRCOM[j] >> 1;    //高位补0  

按照程序的思路,解码后的值就存储在 IRCOM[2] 里面,然后跟键码表RecvData[] 进行对比:
for(j=0;j<10;j++)  
{
   if(IRCOM[2]==RecvData[j])
   {
        ControlCar(j);                        
   }

}
从而得知按下哪个按键。请教大神 IRCOM[2] 的值是怎么得来的?

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint    unsigned int
  4. #define uchar   unsigned char

  5. uchar code  LedShowData[]={0x03,0x9F,0x25,0x0D,0x99,
  6.                             0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9

  7. uchar code  RecvData[]={0x19,0x46,0x15,0x44,0x43,0x40,0x0D,0x0E,0x00,0x0F};

  8. uchar IRCOM[7];

  9. static unsigned int LedFlash;                         //¶¨ÒåÉÁ¶¯ÆµÂʼÆÊý±äÁ¿

  10. unsigned char RunFlag=0;                              //¶¨ÒåÔËÐбê־λ
  11. bit EnableLight=0;                                    //¶¨ÒåָʾµÆʹÄÜλ
  12. /************************/
  13. sbit S1State=P1^0;
  14. sbit S2State=P1^1;
  15. sbit B1State=P1^2;
  16. sbit IRState=P1^3;
  17. sbit RunStopState=P1^4;
  18. sbit FontIRState=P1^5;
  19. sbit LeftIRState=P1^6;
  20. sbit RightIRState=P1^7;
  21. /************************/
  22. sbit S1=P3^2;
  23. sbit S2=P3^4;
  24. /*************************/      
  25. sbit LeftLed=P2^0;
  26. sbit RightLed=P0^7;                                   /
  27. /**********************/
  28. sbit LeftIR=P3^5;
  29. sbit RightIR=P3^6;
  30. sbit FontIR=P3^7;
  31. /************************/
  32. sbit M1A=P0^0;
  33. sbit M1B=P0^1;
  34. sbit M2A=P0^2;
  35. sbit M2B=P0^3;
  36. /**************************/
  37. sbit B1=P0^4;
  38. sbit RL1=P0^5;
  39. sbit SB1=P0^6;
  40. /**********/
  41. sbit IRIN=P3^3;
  42. /**********************/
  43. #define ShowPort P2

  44. extern void ControlCar(uchar CarType);

  45. void delayms(unsigned char x)                         //0.14mSÑÓʱ³ÌÐò
  46. {
  47.   unsigned char i;                                    //¶¨ÒåÁÙʱ±äÁ¿
  48.   while(x--)                                          //ÑÓʱʱ¼äÑ­»·
  49.   {
  50.     for (i = 0; i<13; i++) {}                         //14mSÑÓʱ
  51.   }
  52. }

  53. void Delay1ms(unsigned int i)
  54. {
  55. unsigned char j,k;
  56. do{
  57.   j = 10;
  58.   do{
  59.    k = 50;
  60.    do{
  61.     _nop_();
  62.    }while(--k);     
  63.   }while(--j);
  64. }while(--i);

  65. }
  66. void Delay()                                          //¶¨ÒåÑÓʱ×Ó³ÌÐò
  67. { uint DelayTime=30000;                               //¶¨ÒåÑÓʱʱ¼ä±äÁ¿
  68.   while(DelayTime--);                                 //¿ªÊ¼½øÐÐÑÓʱѭ»·
  69.   return;                                             //×Ó³ÌÐò·µ»Ø
  70. }

  71. void tingzhi()
  72. {
  73.    M1A=0;                                   //½«M1µç»úA¶Ë³õʼ»¯Îª0
  74.    M1B=0;                                   //½«M1µç»úB¶Ë³õʼ»¯Îª0
  75.    M2A=0;                                   //½«M2µç»úA¶Ë³õʼ»¯Îª0
  76.    M2B=0;

  77. }

  78. void qianjin()
  79. {
  80.    M1A=1;                                   
  81.    M1B=0;                                   
  82.    M2A=1;                                   
  83.    M2B=0;
  84. }

  85. void houtui()
  86. {
  87.    M1A=0;                                   
  88.    M1B=1;                                   
  89.    M2A=0;                                   
  90.    M2B=1;
  91. }

  92. void youzhuan()
  93. {
  94.    M1A=0;                                   
  95.    M1B=1;                                   
  96.    M2A=1;                                   
  97.    M2B=0;

  98. }

  99. void zuozhuan()
  100. {
  101.    M1A=1;                                   
  102.    M1B=0;                                   
  103.    M2A=0;                                   
  104.    M2B=1;

  105. }

  106. void ControlCar(unsigned char ConType)    //¶¨Òåµç»ú¿ØÖÆ×Ó³ÌÐò
  107. {

  108.   tingzhi();
  109. switch(ConType)                          //ÅжÏÓû§É趨µç»úÐÎʽ
  110. {
  111.   case 1:  //Ç°½ø                         //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎʽ1
  112.   {
  113.    
  114.         tingzhi();                                                      /
  115.          Delay1ms(240);
  116.         LeftLed = 0 ;
  117.         qianjin();
  118.     break;
  119.   }
  120.   case 2: //ºóÍË                              //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎʽ2
  121.   {
  122.     tingzhi();
  123.           Delay1ms(240);
  124.         LeftLed = 1 ;          
  125.         houtui();                                //M2µç»ú·´×ª
  126.     break;
  127.   }
  128.   case 3: //×óת                              //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎʽ3
  129.   {
  130.     tingzhi();
  131.          Delay1ms(240);
  132.         zuozhuan();                               //M2µç»úÕýת
  133.         break;
  134.   }
  135.   case 4: //ÓÒת                              //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎʽ4
  136.   {
  137.     tingzhi();
  138.           Delay1ms(240);
  139.         youzhuan();                                //M1µç»úÕýת
  140.                                           //M2µç»ú·´×ª
  141.         break;
  142.   }
  143.   case 5: //Í£Ö¹                          //ÅжÏÓû§ÊÇ·ñÑ¡ÔñÐÎʽ8
  144.   {
  145.     tingzhi();
  146.         break;                                //Í˳öµ±Ç°Ñ¡Ôñ
  147.   }
  148. }
  149. }

  150. void IR_IN() interrupt 2 using 0
  151. {
  152.   unsigned char j,k,N=0;                              //¶¨ÒåÁÙʱ½ÓÊÕ±äÁ¿
  153.    
  154.   EX1 = 0;                                            /
  155.   delayms(15);
  156.   if (IRIN==1)                                        //ÅжϺìÍâÐźÅÊÇ·ñÏûʧ
  157.   {  
  158.      EX1 =1;                                          //ÍⲿÖжϿª
  159.          return;                                          //·µ»Ø
  160.   }
  161.                            
  162.   while (!IRIN)
  163.   {
  164.       delayms(1);                                     //ÑÓʱµÈ´ý
  165.   }

  166.   for (j=0;j<4;j++)                                   //²É¼¯ºìÍâÒ£¿ØÆ÷Êý¾Ý
  167.   {
  168.     for (k=0;k<8;k++)                                 //·Ö´Î²É¼¯8λÊý¾Ý
  169.     {
  170.        while (IRIN)                                   /
  171.        {
  172.          delayms(1);                                  //ÑÓʱµÈ´ý
  173.        }
  174.       
  175.        while (!IRIN)                                  //µÈ IR ±äΪ¸ßµçƽ
  176.        {
  177.          delayms(1);                                  //ÑÓʱµÈ´ý
  178.        }
  179.    
  180.        while (IRIN)                                   //¼ÆËãIR¸ßµçƽʱ³¤
  181.        {
  182.          delayms(1);                                  //ÑÓʱµÈ´ý
  183.          N++;                                         //¼ÆÊýÆ÷¼Ó¼Ó
  184.          if (N>=30)                                   //ÅжϼÆÊýÆ÷ÀÛ¼ÓÖµ
  185.              {
  186.            EX1=1;                                     //´ò¿ªÍⲿÖжϹ¦ÄÜ
  187.                return;                                    //·µ»Ø
  188.          }                  
  189.        }
  190.                                        
  191.       IRCOM[j]=IRCOM[j] >> 1;   // <span style="background-color: rgb(255, 255, 255);">高位补0</span>
  192.      
  193.       if (N>=8)
  194.       {
  195.          IRCOM[j] = IRCOM[j] | 0x80;
  196.       }
  197.       N=0;
  198.     }
  199.   }
  200.    
  201.   if (IRCOM[2]!=~IRCOM[3])
  202.   {
  203.      EX1=1;                                           //´ò¿ªÍⲿÖжÏ
  204.      return;                                          //·µ»Ø
  205.   }

  206.   for(j=0;j<10;j++)
  207.    {
  208.       if(IRCOM[2]==RecvData[j])   //与键码表进行比对
  209.       {
  210.         ControlCar(j);
  211.       }
  212.    }
  213.    
  214.    
  215.    EX1 = 1;                                           //ÍⲿÖжϿª
  216. }



  217. void main(void)
  218. {
  219. bit ExeFlag=0;

  220. LedFlash=3000;
  221. EX1=1;
  222. IT1=1;
  223. EA=1;
  224. ShowPort=LedShowData[0];
  225. while(1)                                              //³ÌÐòÖ÷Ñ­»·
  226. {
  227.    
  228.    Delay();
  229.    RunStopState=~RunStopState;
  230.   
  231. }
  232. }
复制代码

复制代码



4、ZY08-C遥控器控制小车程序.docx.C.zip 下载积分: 积分 -1 分
3.35 KB, 下载次数: 0, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。