怎么利用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”这个按键控制一个灯
今天就到这里,教程先告一段落了,我们下次再见