你的程序不对啊,按遥控器后,根本不能接收到有效的键码。
我有一个程序,可以做到红外遥控,你只要遥控灯,我就只放了这个功能。
/*
红外遥控示例程序
*/
#include<reg51.h>
#include<intrins.h>
#define LED P2//LED灯
sbit HWX=P3^2;//红外接收管在I/O口
unsigned char HWXSJ[4];
bit JSCG=1;
void Config();
void delay(void)//延时35.5us
{
unsigned char i=10;
while(i--);
}
void Delay10ms(unsigned char c)
{
unsigned char a,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
void main()
{
Config();
LED=0xff;//初始化关灯
while(1)
{
if (JSCG==1)
{
JSCG=0;
if (HWXSJ[2]==0x45)//遥控器上电源开关键
{
LED=~LED;
}
}
}
}
void Config()
{
IT0=1;
EX0=1;
EA=1;
TMOD=0X10;
HWX=1;
}
void ReadIr() interrupt 0
{
unsigned char i,ia;
TL1=0;
TH1=0;
TR1=1;
while(!HWX)
{
if (TH1>40)
{
TR1=0;
TL1=0;
TH1=0;
return;
}
}
TR1=0;
if(TH1<25)
{
return;
}
TH1=0;
TL1=0;
TR1=1;
while(HWX)
{
delay();
if(TH1>25)
{
TR1=0;
TL1=0;
TH1=0;
return;
}
}
TR1=0;
if(TH1<15)
{
return;
}
for(i=0;i<4;i++)
{
for(ia=0;ia<8;ia++)
{
TL1=0;
TH1=0;
TR1=1;
while(!HWX)
{
if(TH1>5)
{
TR1=0;
TL1=0;
TH1=0;
return;
}
}
TR1=0;
TH1=0;
TL1=0;
TR1=1;
while(HWX)
{
delay();
if(TH1>10)
{
TR1=0;
TL1=0;
TH1=0;
return;
}
}
TR1=0;
HWXSJ[i]>>=1;
if(TH1>4)
{
HWXSJ[i]|=0x80;
}
}
}
if ((HWXSJ[0]==~HWXSJ[1])&&(HWXSJ[2]==~HWXSJ[3]))
{
JSCG=1;
}
else
{
JSCG=0;
}
}
|