/.;
if(Im[2]==~Im[3]) /..
void intersvr1(void) interrupt 2 using 1 /,放在数组Im[4]的4字节中
}
if(Tc>/8]=Im[m/
f=0;/.45-3,回到原来的地方继续执行下去;/,接低电平进入
/,共32个位.5低)
{
m=0; /Inum1) /Imin)&&(Tc< /,共32个位;在函数中;取一位码;/外部中断
{
Tc=TH0*256+TL0;/
TL0=0;1.7-1; m++;
}
else IrOK=0;8]>>//,下一次进入外部中断时通过定时器数值判断
/.685)毫秒的0
{
Im[m/。
}
if(f==1)
{
if(Tc>.;8-14毫秒对应引导码13;外部中断为边沿触发;//,从而区分引导码或0码1码;
return;/.565.125(0,如果碰到return 语句,也就是说跳出函数的执行.45毫秒对应NEC码的1;NEC的码为1时;0;
f=1;1|0x80.565)毫秒的1
{
Im[m/Inum2&&Tc<取一位码;Inum3) /1.0毫秒对应NEC码的1,Im[3]为8位数据码的反码
{
IrOK=1; m++;1838将外部的高电平转为低电平
/>Imax)) /,初次进入外部中断.;8]>8]=Im[m/1.565.125(0;定时中断重新置零
if((Tc>Inum1&&Tc<:
/上一脉冲的周期,那么程序就会返回调用该函数的下一条语句执行;
/..5毫秒(9高4; / /
TH0=0;/,启动定时器关键程序如下;//0;Im[2]为8位数据码,放在数组Im[4]的4字节中
}
if(m==32)
{
m=0
dula=0; /
/
if(f==1)
{
取键码的低四位
/ k--),0x4f;Im[m// /8]=Im[m/
j> ,0x7d; IrOK=1; ,
TL0=0; dula=0;
#define Imin 8000 while(1)
unsigned int / {
#define uchar unsigned char
准备读下一码
wela=0; / for(k=125; ,Tc;Imin)&&(Tc< }
,在数码管前两位上就会显示对应按键的编码
#include < dula=0; {
delay(5);
} /
IT1=1;{
m=0; m=0;用遥控器对准红外接收头;
f=1; / 0;
取码
单片机采用外部中断P3; ,0x6f;
void delay(uchar i)
{
f=0;
,按下遥控器按键; wela=1; 0; 。并将8位操作码提取出来在数码管上显示; }
return;
.0592时的取值; m++; dula=1; P0=0xfe; /
/.3管脚和红外接收头的信号线相连。并用定时器0计算中断的间隔时间;
/ / for(j=i; / 找到启始码
/,0x00};
8]=Im[m/ f=0。 0x07; wela=0,0x00; /
,0x39; {
unsigned long m;
display(); ,来区分前导码; 1;
,0x00; if(m==32) Tc=TH0*256+TL0; P0=table[show[1]];>
uchar show[2]={0; 。
#define Inum2 700 Inum1&&Tc< /EX1=1; ,k;8]> {
/
{
提取中断时间间隔时长
1|0x80;
sbit dula=P2^6; k> if(IrOK==1)
sbit wela=P2^7; a;}
if(Im[2]==~Im[3]) Imax))
此处为晶振为11;
/ 8]>
、二进制的“1”;>
,0x77; Inum2&&Tc< {
,
,0x06;定时中断重新置零
/
unsigned char IrOK; 取码完成后判断读码是否正确
#define Inum3 3000
unsigned char Im[4]={0x00; P0=0xfd;
uchar f;0; 外部中断解码程序
void intersvr1(void) interrupt 2 using 1
{
如用其它频率的晶振时;
void main(void)
{
、“0”码,0x66; ,
#define Inum1 1450 reg52;Inum1) /
}
void display()
{
} m=0;
/ show[1]=Im[2] & 0x0F;a--)
Im[m/,0x79; TH0=0;
,0}; }
}
TR0=1; for(a=100;}
}
}
/ wela=1;/
show[0]=Im[2] >IrOK=0; 解码值在Im[2]中;Inum3) > P0=table[show[0]];
要改变相应的取值; 。
/ wela=0; m++;
,当IrOK=1时解码有效; ET0=1; * 51单片机红外遥控解码程序 */
,0x7c; 4; /
uchar code table[]={0x3f;
,0x71};
#define Imax 14000 TH0=0;{
a> delay(5).h>
if((Tc> else IrOK=0; ,0x5b;/ if(Tc> ,0x6d;TL0=0;TMOD=0x11; EA=1; dula=1; *演示主程序*/
uchar j; ,0x5e;/
if(Tc>,0x7f;
/
j--)
/,中断方式为边沿触发方式;
遥控器和你那个一样哈哈,程序改写简单,电源键可接继电器控制总开关,按下0键关闭所有IO口,家里的遥控器均可利用,这个我最近刚写出来,1~8键控制8个IO口,多种工作方式,加qq