文档库 最新最全的文档下载
当前位置:文档库 › 51单片机红外解码程序

51单片机红外解码程序

/*红外接收头刚好和外部中断0是同一个引脚P3^2*/

#include
typedef unsigned char uchar;
typedef unsigned int uint;
sbit bee=P3^5;
uchar wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar irtime,startflag;
uchar irdate[33];
uchar bitnum;
uchar irreceok;
uchar ircode[4];
uchar irprosok;
uchar disp[8];

void delay()
{
uint a=250;
while(a--);
}

void timer0init()
{
TMOD=0x02;
TH0=0;
TL0=0;
EA=1;
ET0=1;
TR0=1;
}

void int0init()
{
IT0=1;
EX0=1;
EA=1;
}

void irpros()
{
uchar k=1,value,i,j;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
value=value>>1;
if(irdate[k]>6)
{
value=value|0x80;
}
k++;
}
ircode[j]=value;
}
irprosok=1;
bee=0;
delay50us(250);
delay50us(250);
bee=1;
}
void irwork()
{
disp[0]=ircode[3]%16;
disp[1]=ircode[3]/16;
disp[2]=ircode[2]%16;
disp[3]=ircode[2]/16;
disp[4]=ircode[1]%16;
disp[5]=ircode[1]/16;
disp[6]=ircode[0]%16;
disp[7]=ircode[0]/16;
}

void display()
{
uchar i;
for(i=0;i<8;i++)
{
P1=wei[i];
P0=duan[disp[i]];
delay();
}
}

void main()
{
timer0init();
int0init();
while(1)
{
if(irreceok)
{
irpros();
irreceok=0;
}
if(irprosok)
{
irwork();
irprosok=0;
}
display();
}
}

void timer0() interrupt 1
{
irtime++;
}

void int0() interrupt 0
{
if(startflag)
{
if(irtime>32)
{
bitnum=0;
}
irdate[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
irreceok=1;
}
}
else
{
startflag=1;
irtime=0;
}
}

相关文档
相关文档 最新文档