利用红外解码可以的到红外遥控按键的码值,然后就可以利用红外遥控器进行一些操作,这样就比较简单,红外接收需要对时序进行操作,还需要读接收的数据进行检验,代码如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar irtime;
uchar startflag,bitnum,irreceok,irprosok,irtime,aa,bb;
uchar irdata[33];
uchar ircode[4];
uchar disp[2];
sbit lcdrs=P2^6;
sbit lcdrw=P2^5;
sbit lcden=P2^7;
sbit IR=P3^2;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(aa)
{
lcdrs=0;
P0=aa;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void write_data(bb)
{
lcdrs=1;
P0=bb;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
void init()
{
// P2=0xff;
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void timer0init(void)
{
TMOD=0x02;
TH0=0x00;
TL0=0x00;
ET0=1;
EA=1;
TR0=1;
}
void int0init(void)
{
IT0=1;
EX0=1;
EA=1;
}
void timer0 () interrupt 1
{
irtime++;//255
}
void int0 () interrupt 0
{
EX0=0;
delay(10);
if (IR==1)
{ EX0 =1;
return;
}
while(!IR);
while(IR);
irdata[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==32)
{
bitnum=0;
irreceok=1;
}
}
void irpros()
{
uchar k,value,i,j;
k=1;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
value=value>>1;
if(irdata[k]>6)
{
value=value | 0x80;
k++;
}
}
ircode[j]=value;
}
irprosok=1;
}
void irwork (void)
{
disp[0]=ircode[2]/16;
disp[1]=ircode[2]%16;
if(disp[0]>9)
{
disp[0]=disp[0]+0x37;
}
else
disp[0]=disp[0]+0x30;
if(disp[1]>9)
{
disp[1]=disp[1]+0x37;
}
else
disp[1]=disp[1]+0x30;
}
void display(void)
{
write_data(disp[0]);
delay(1);
write_data(disp[1]);
delay(1);
}
void main()
{
IR=1;
timer0init();
int0init();
init();
while(1)
{
if(irreceok)
{
irpros();
irreceok=0;
if(irprosok)
{
irwork();
irprosok=0;
display();
}
}
}
}