本帖最后由 wolfwyf 于 2013-8-17 09:34 编辑
目的 通过遥控器控制P0口的Led亮灭 红外接口P3。2
遥控器上面的码值是正确的 现在就是程序有有问题 无法正常解码 求高手们给看看~
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit IR=P3^2;
uint Low_
time,High_Time;
unsigned char a[4];
bit De_Code(void)
{
uchar i,j;
uchar temp;
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
temp=temp>>1; //右移一位
TH0=0; //低电平
TL0=0;
TR0=1;
while(IR==0);
TR0=0;
Low_Time=TH0*256+TL0;
TH0=0; //高电平
TL0=0;
TR0=0;
while(IR==1);
TR0=0;
High_Time=TH0*256+TL0;
if((Low_Time<370)||(Low_Time>640))
{
return 0;
}
if((High_Time>420)&&(High_Time<620))
{
temp=temp&0x7f;
}
if((High_Time>1300)&&(High_Time<1800))
{
temp=temp|0x80;
}
}
a
=temp;
}
return 1;
}
void Car_Run()
{
switch(a[3])
{
case(0x03):P0=0x55;break;
case(0x1b):P0=0xaa;break;
case(0x09):P0=0xdd;break;
case(0x1f):P0=0x77;break;
case(0x10):P0=0x99;break;
case(0x01):P0=0x66;break;
default:P0=0x00;
}
}
void main()
{
EA=1;
EX0=1;
ET0=1;
IT0=1;
TMOD=0x01;
TR0=0;
while(1);
}
void Int0(void) interrupt 0
{
EX0=0;
TH0=0;
TL0=0;
TR0=1;
while(IR==0);
TR0=0;
Low_Time=TH0*256+TL0;
TH0=0;
TL0=0;
TR0=1;
while(IR==1);
TR0=0;
High_Time=TH0*256+TL0;
if((Low_Time>7800)&&(Low_Time<8800)&&(High_Time>3600)&&(High_Time<4700))
{
if(De_Code()==1)
{
Car_Run();
}
}
EX0=1;
}
一周热门 更多>