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

2025-09-30 01:03:02

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

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

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

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

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++) {}

 }

}

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

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

4、重新编译程序,程序没有错误之后进行下一步,第二张图中“0错误,0警告”说明程序没问题

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

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

5、打开程序下载软件,下载程序进单片机,显示下载成功以后,进行下一步

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

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

6、打开电脑串口调试助手,按照图中的设置数据设置一下参数,注意端口跟下载的端口是一样的,选好自己的端口,我这里是COM4,你们的电脑不一定是

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

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

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

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

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

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

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

9、在程序中修改想要控制的参数,配合单片机外部电路,就可以实现不同的功能啦

在红外中断服务程序中加入下面这段控制代码,就可以实现了

    switch(IRCOM[2])

{

   case 0x12: d=0; break;

    }

其中case表示按键的值,这里表示用“ON”这个按键控制一个灯

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢