您的位置首页生活百科

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

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

的有关信息介绍如下:

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

很多朋友在利用单片机DIY的时候,都有接触过红外线遥控,有时候特别想自己定义遥控的某个按键来控制单片机做特定的输出,比如控制一个LED,或者一个继电器,进而控制外部电路,例如家里的电灯,今天我给大家一个方法,轻松获取通用红外遥控器的键码值,下面我们开始吧

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

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

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

#include

#define uchar unsigned char //宏定义

#define uint unsigned int

#define uchar unsigned char

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

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

uchar IRCOM,a;

bit Flag;

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

void fasong()

{

if(Flag==1)

{ ES=0;//关闭串口

Flag=0;//发送一次

SBUF=IRCOM;//把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!=~IRCOM)

{ EX0=1;

return; }

IRCOM=IRCOM & 0x0F;

IRCOM=IRCOM >> 4;

if(IRCOM>9)

{ IRCOM=IRCOM+0x37;}

else

IRCOM=IRCOM+0x30;

if(IRCOM>9)

{ IRCOM=IRCOM+0x37;}

else

IRCOM=IRCOM+0x30;

d=~d;

Flag=1;

EX0 = 1;

}

void delay(unsigned char x)

{

unsigned char i;

while(x--)

{

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

}

}

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

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

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

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

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

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

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

switch(IRCOM)

{

case 0x12: d=0; break;

}

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

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