文档库 最新最全的文档下载
当前位置:文档库 › 红外解码程序,IR1308接收头

红外解码程序,IR1308接收头

#include
#include
UINT8 irtime;
UINT8 irdata[33],irprodata[4];
bit irreceive_ok,irpro_ok;
UINT8 code LCD_TAB[]={"0123456789ABCDEF"};
void Timer0_Init()
{
TMOD|=0X02;
TH0=0;
TL0=0;
IE|=0x82;
TR0=1;
}

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

void Int0_Init()
{
IT0=1;
IE|=0x81;
}

void Int_IRQ(void) interrupt 0
{
static bit irstart;//bit变量默认分配一个内存单元,每次调用函数,不改变单元的位置
static UINT8 i;//定义成静态变量,定义时即分配一个内存单元,每次调用时不改变内存单元的位置。
//若不加static修饰,编译结果会节约内存,每次调用中断处理函数时随即分配一个单元给i,
//导致原来i的数据丢失,破坏程序逻辑,不能完成正常储存
if(irstart==1)
{
if(irtime>32&&irtime<64)
i=0;
irdata[i]=irtime;//每次外中断时i会自加1,可见是一个i静态变量
irtime=0;
i++;
if(i==33)
{
i=0;
irtime=0;
irreceive_ok=1;
}
}
else
{
irstart=1;
irtime=0;
}
}

void IrPro(void)
{
UINT8 i,j,k;
k=1;
for(i=0;i<4;i++)
irprodata[i]=0;
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
irprodata[i]>>=1;
if(irdata[k]>6)
irprodata[i]|=0x80;
k++;
}
}
irpro_ok=1;
}

void IrWork(void)
{
UINT8 temp[11];
temp[0]=LCD_TAB[irprodata[0]/16];
temp[1]=LCD_TAB[irprodata[0]%16];
temp[2]='-';
temp[3]=LCD_TAB[irprodata[1]/16];
temp[4]=LCD_TAB[irprodata[1]%16];
temp[5]='-';
temp[6]=LCD_TAB[irprodata[2]/16];
temp[7]=LCD_TAB[irprodata[2]%16];
temp[8]='-';
temp[9]=LCD_TAB[irprodata[3]/16];
temp[10]=LCD_TAB[irprodata[3]%16];
LCD1602_SendString(5,1,temp);
}


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