遥控器原理小知识(附加程序)
1.红外遥控简介
主要器件:红外遥控器、红外接收头。
2.红外遥控器
Ht6221标准红外线解码遥控器,采用NEC的UPD6121G编码标准(如图1),由38K载波调制的红外编码。
Ht6221标准红外线解码遥控器发射的一帧数据如下图2,每帧数据由引导码开始,随后共32位数据,分别位16位用户编码,8位键数据码和8位键数据反码。
3.红外接收头
红外一体化接收头VS1838B,这种一体化接收头内部集成了红外接收电路:内部电路包括红外监测二极管,放大器,限副器,带通滤波器,积分电路,比较器等。实现红外遥控信号的拾取、放大和解调,检波输出信号可以直接由微处理器解码,红外一体化接收头VS1838B解调后的波形如图3。
4.红外遥控信号解码程序代码分析
void delay_hongwai(unsigned char x) //红外延时x*0.14MS
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}
void IR_IN() interrupt 0 using 0 //INT0外部中断0
{
unsigned char j,k,N=0;
EX0 = 0; //关闭外部中断0中断
delay_hongwai(15);//延时2.1ms,检测高电平出现
if (IRIN==1) //确认IR信号出现
{ EX0 =1;//打开外部中断0中断
return;
}
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delay_hongwai(1);}
for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{delay_hongwai(1);}
while (!IRIN) //等 IR 变为高电平
{delay_hongwai(1);}
while (IRIN) //计算IR高电平时长
{
delay_hongwai(1);
N++;
if (N>=30)
{ EX0=1;
return;} //0.14ms计数过长自动离开。
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”
N=0;
}
}
if (IRCOM[2]!=~IRCOM[3])
{ EX0=1;
return; }
IRCOM[5]=IRCOM[2] & 0x0F; //取键码的低四位
IRCOM[6]=IRCOM[2] >> 4; //右移4次,高四位变为低四位
EX0 = 1;
}