EX0 = 0;
delayA(15);
if (IRIN==1)
{ EX0 =1;
return;
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delayA(1);}
for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{delayA(1);}//
while (!IRIN) //等 IR 变为高电平
{delayA(1);} //
while (IRIN) //计算IR高电平时长
{
delayA(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;
}//end for k
}//end for j
if (IRCOM[2]!=~IRCOM[3]) //接收时间是否正确
{
EX0=1;
return;
}
/*================红外编码处理====================*/
switch(IRCOM[2])
{
case 0x00: keya=1; break; //1
case 0x01: keyb=1; break; //2
case 0x02: keyc=1; break; //3
case 0x03: keyd=1; break; //4
case 0x04: keye=1; break; //5
case 0x05: keyf=1; break; //6
case 0x06: keyg=1; break; //7
// case 0x07: keyh=1; break; //8
case 0x08: keyi=1; break; //9
// case 0x09: keyj=1; break; //0
//遥控器1(电视遥控器)
/*
case 0x13: key_minish=1; break; //-
case 0x12: key_add=1; break; //+
case 0x18: key_manue=1; break; //菜单
case 0x19: key_ok=1; break; //OK
case 0x15: key_alarm=1; break; //关闹钟的开与关
*/
//遥控器2(ALETNK遥控器)
case 0x15: key_add=1; break; //+
case 0x07: key_minus=1; break; //-
case 0x44: key_set=1; break; //菜单
case 0x40: key_ok=1; break; //OK
case 0x47: key_alarm=1; break; //关闹钟的开与关
case 0x45: key_light=1; break; //背光控制
void IR_IN() interrupt 0 using 0
{
uchar j,k,N=0;
EX0 = 0;
delayA(15);
if (IRIN==1)
{ EX0 =1;
return;
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delayA(1);}
for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{delayA(1);}//
while (!IRIN) //等 IR 变为高电平
{delayA(1);} //
while (IRIN) //计算IR高电平时长
{
delayA(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;
}//end for k
}//end for j
if (IRCOM[2]!=~IRCOM[3]) //接收时间是否正确
{
EX0=0;
return;
}
/*================红外编码处理====================*/
switch(IRCOM[2])
{
case 0x0C: key_0=1; break; //1
case 0x18: key_1=1; break; //2
case 0x5E: key_2=1; break; //3
case 0x08: key_3=1; break; //4
case 0x1C: key_4=1; break; //5
case 0x5A: key_5=1; break; //6
case 0x42: key_6=1; break; //7
case 0x52: key_7=1; break; //8
case 0x4A: key_8=1; break; //9
case 0x16: key_9=1; break; //0
case 0x40: key_minish=1; break; //音量-
case 0x43: key_add=1; break; //音量+
case 0x46: key_manue=1; break; //播放
case 0x45: key_ok=1; break; //OFF
case 0x15: key_up=1; break; //上
case 0x09: key_down=1; break; //下
case 0x19: key_alarm=1; break; //RPT
case 0x47: key_voioff=1; break; //静音
case 0x0D: key_voion=1; break; //U/SD default: break; //别的键按下
}
void IR_IN() interrupt 0 using 0
{
uchar j,k,N=0;
EX0 = 0;
delayA(15);
if (IRIN==1)
{ EX0 =1;
return;
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delayA(1);}
for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{delayA(1);}//
while (!IRIN) //等 IR 变为高电平
{delayA(1);} //
while (IRIN) //计算IR高电平时长
{
delayA(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;
}//end for k
}//end for j
if (IRCOM[2]!=~IRCOM[3]) //接收时间是否正确
{
EX0=0;
return;
}
/*================红外编码处理====================*/
switch(IRCOM[2])
{
case 0x0C: key_0=1; break; //1
case 0x18: key_1=1; break; //2
case 0x5E: key_2=1; break; //3
case 0x08: key_3=1; break; //4
case 0x1C: key_4=1; break; //5
case 0x5A: key_5=1; break; //6
case 0x42: key_6=1; break; //7
case 0x52: key_7=1; break; //8
case 0x4A: key_8=1; break; //9
case 0x16: key_9=1; break; //0
case 0x40: key_minish=1; break; //音量-
case 0x43: key_add=1; break; //音量+
case 0x46: key_manue=1; break; //播放
case 0x45: key_ok=1; break; //OFF
case 0x15: key_up=1; break; //上
case 0x09: key_down=1; break; //下
case 0x19: key_alarm=1; break; //RPT
case 0x47: key_voioff=1; break; //静音
case 0x0D: key_voion=1; break; //U/SD default: break; //别的键按下
}