怎么利用STC89C52单片机进行红外遥控解码

良多伴侣在操纵单片机DIY的时辰,都有接触过红外线遥控,有时辰出格想本身界说遥控的某个按键来节制单片机做特心猿意马的输出,好比节制一个LED,或者一个继电器,进而节制外部电路,例如家里的电灯,今天我给大师一个方式,轻松获取通用红外遥控器的键码值,下面我们起头吧

东西/原料

  • 电脑
  • 单片机最小系统版(带红外领受头的)
  • USB转TTL下载器一个
  • MP3遥控器一个
  • keil软件
  • 电脑串口调试助手

方式/步调

  1. 1

    起首,我们将单片机和USB转TTL下载器用杜邦线准确地毗连起来,并插入电脑的USB口,看到最小系统版的电源指示灯亮起,申明板子通电正常

  2. 2

    接下来打开电脑上的keil,并新建一个工程,定名为“红外遥控解码测试”

  3. 3

    工程成立好今后,为工程添加一个C文件,双击打开C文件,复制下面的代码粘贴上去


    #include <REG52.H>

    #define uchar unsigned char //宏界说



    #define uint unsigned int

    #define uchar unsigned char

    sbit IRIN=P3^2;//红外线接口

    sbit d=P2^0;//解码指示


    uchar IRCOM[7],a;

    bit Flag;


    void delay(uchar x);//红外线用延迟 

    void fasong()

    {

     

     if(Flag==1)

       {   ES=0;//封闭串口

           Flag=0;//发送一次

           SBUF=IRCOM[2];//把a发送给本家儿机

           

           while(!TI);//当TI为1的时辰,也就是期待数据发送竣事

            TI=0;//软件清零

            ES=1;//打开串口

       }


    }

    void main (){


     SM0=0;//体例1

     SM1=1; 

           REN = 1;//REN=1许可串行接管状况,串口工作模式1               

        TMOD|= 0x20;//按时器工作体例2                    

    PCON|= 0x80;//波特率提高一倍                                                          

    TH1=0xFA; 

        TL1=0xFA;//9600波特率 ,按倍频算        

    TR1  = 1;                                                             

    ES   = 1;   //开串口间断                  

    EA   = 1;  // 开总间断 

       EX0 =1;//外部间断0许可      

           IRIN=1;

    while(1)   

      { fasong();}

     

    }


    /****************************************************

                   串口间断程序

    ******************************************************/

    void ser ()interrupt 4 

    {

     //if(RI == 1)        //RI接管间断标记

    // {

      RI = 0;     //断根RI接管间断标记 

    a =SBUF;  //SUBF接管/发送缓冲器 

      Flag=1;

        

     //}

    }

    void IR_IN(void) interrupt 0//红外间断办事程序   

    {

      unsigned char j,k,N=0;

         EX0 = 0;   

    delay(15);

    if (IRIN==1) 

         { EX0 =1;

       return;

      }                        

      while (!IRIN)           

        {delay(1);}


     for (j=0;j<4;j++)       

     { 

      for (k=0;k<8;k++)       

      {

       while (IRIN)            

         {delay(1);}

        while (!IRIN)         

         {delay(1);}

         while (IRIN)         

          {

        delay(1);

        N++;           

        if (N>=30)

    { EX0=1;

    return;}                 

          }                                       

         IRCOM[j]=IRCOM[j] >> 1;                 

         if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} 

         N=0;

      }

     }  

       if (IRCOM[2]!=~IRCOM[3])

       { EX0=1;

         return; }


       IRCOM[5]=IRCOM[2] & 0x0F;     

       IRCOM[6]=IRCOM[2] >> 4;     


       if(IRCOM[5]>9)

        { IRCOM[5]=IRCOM[5]+0x37;}

       else

      IRCOM[5]=IRCOM[5]+0x30;


       if(IRCOM[6]>9)

        { IRCOM[6]=IRCOM[6]+0x37;}

       else

      IRCOM[6]=IRCOM[6]+0x30;

           d=~d;

           Flag=1;

          EX0 = 1; 

    void delay(unsigned char x)    

    {

     unsigned char i;

      while(x--)

     {

      for (i = 0; i<14; i++) {}

     }

    }

  4. 4

    从头编译程序,程序没有错误之后进行下一步,第二张图中“0错误,0警告”申明程序没问题

  5. 5

    打开程序下载软件,下载程序进单片机,显示下载当作功今后,进行下一步

  6. 6

    打开电脑串口调试助手,按照图中的设置数据设置一下参数,注重端口跟下载的端口是一样的,选好本身的端口,我这里是COM4,你们的电脑纷歧心猿意马是

  7. 7

    下面拿出红外遥控器,然后把串口助手中的端口打开,打开之后,按钮酿成“封闭串口”,而前面的灯会酿成红色,暗示串口打开当作功,进行下一步

  8. 8

    按挨次瞄准单片机板子上的红外领受头别离按遥控器上的ON,OFF,2H,4H,8H。之后你会发现串口调试助手上显示了代码,1,2,3,4,5号按键别离对应的代码为12 ,1E ,04 ,06, 1B (当然你们用的遥控器纷歧样,代码也会分歧),那么就可以进行下一步

  9. 9

    在程序中点窜想要节制的参数,共同单片机外部电路,就可以实现分歧的功能啦

    在红外间断办事程序中插手下面这段节制代码,就可以实现了

        switch(IRCOM[2])

    {

       case 0x12: d=0; break;

        }

    此中case暗示按键的值,这里暗示用“ON”这个按键节制一个灯

  10. 10

    今天就到这里,教程先告一段落了,我们下次再会

  • 发表于 2019-09-03 20:01
  • 阅读 ( 848 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

联系我们:uytrv@hotmail.com 问答工具