|
#include <reg51.h>
#include "lcd2.h"
#include "delay.h"
sbit IR=P3^2;
unsigned char IR_Code[4];
unsigned char IR_Data[33];
unsigned char IR_Time;
bit IR_RCV_OK;
bit IR_Pro_OK;
unsigned char TempData[16];
unsigned char LCD[16]="0123456789ABCDEF";
void Timer_Init(void)
{
TMOD=0x02;
TH0=0;
TL0=0;
ET0=1;
TR0=1;
}
void EX0_Init(void)
{
IT0=1;
EX0=1;
EA=1;
}
void Time0_ISR(void) interrupt 1
{
IR_Time ++;
}
void EX0_ISR(void)interrupt 0
{
static bit startflag;
static unsigned char BitCnt;
if(startflag)
{
if(IR_Time<60&&IR_Time>40)
{
BitCnt=0;
}
IR_Data[BitCnt]=IR_Time;
IR_Time=0;
BitCnt++;
if(BitCnt==33)
{
IR_RCV_OK=1;
BitCnt=0;
startflag=0;
}
}
else
{
IR_Time=0;
startflag=1;
IR_RCV_OK=0;
}
}
void IR_Pro(void)
{
unsigned char i,j,k;
unsigned char val;
k=1;
for(i=0;i<4;i++)
{
for(j=1;j<=8;j++)
{
if(IR_Data[k]>7)
{
val |=0x80;
}
if(j<8)
{
val>>=1;
}
k++;
}
IR_Code=val;
val=0;
}
IR_Pro_OK=1;
}
void button(void)
{
}
void IR_Work(void)
{
switch(IR_Code[2])
{
case 0x45:button();break;
default:break;
}
}
void IR_Disp(void)
{
TempData[0]=LCD[IR_Code[0]/16];
TempData[1]=LCD[IR_Code[0]%16];
TempData[2]='-';
TempData[3]=LCD[IR_Code[1]/16];
TempData[4]=LCD[IR_Code[1]%16];
TempData[5]='-';
TempData[6]=LCD[IR_Code[2]/16];
TempData[7]=LCD[IR_Code[2]%16];
TempData[8]='-';
TempData[9]=LCD[IR_Code[3]/16];
TempData[10]=LCD[IR_Code[3]%16];
LCD_Write_String(2,1,TempData);
}
void main()
{
Timer_Init();
EX0_Init();
LCD_Init();
LCD_Clear();
while(1)
{
if(IR_RCV_OK)
{
IR_RCV_OK=0;
IR_Pro();
}
if(IR_Pro_OK)
{
IR_Pro_OK=0;
IR_Work();
IR_Disp();
}
}
}
|
|