📄 ir_lpc.c
字号:
#include <REG932.H> // register definition
#define uchar unsigned char
/*
//#define XTAL_14M318
#ifdef XTAL_14M318
#define T102 0x1f
#define T205 0x3f
#define T820 0xfc
#else
#define T102 0x10
#define T205 0x20
#define T820 0x82
#endif
*/
#define T102 0x10
#define T205 0x20
#define T820 0xa3
bit F_RemoReady;
uchar data RemoSystem;
uchar data RemoCommand;
static uchar data RemoState;
uchar data temp[34];
uchar data counter;
///////////////////////////////////////////////////////////////
void delay (unsigned int cnt)
{
while (--cnt);
}
void main()
{
uchar i;
P2M1 = 0;
IE1 = 0; /* no external interupt 1 detected */
IT1 = 1; /* select transition-activated external int. */
EX1 = 1; /* enable external interrupt 1 */
TMOD = 0x10;
TL1 = 0;
TH1 = 0;
TR1 = 0;
ET1 = 0; /* 0=Disable Timer 1 interrupt */
EA = 1; /* enable all interrupt */
RemoState=0;
RemoSystem=0;
RemoCommand=0;
counter=0;
for(;;)
{
for (i = 0x01; i; i <<= 1)
{
P2 = i;
delay (10000);
}
for (i = 0x80; i; i >>= 1)
{
P2 = i;
delay (10000);
}
if(F_RemoReady)
{
F_RemoReady = 0;
P2 = RemoCommand+1;
for (i=0; i<10; i++)
delay(50000);
P2 = 0x00;
}
}
}
//-----------Ir remo module-------------------
void remo_check(void) interrupt 2
{
static uchar data RemoBuffer0;
static uchar data RemoBuffer1;
uchar data CaptureTime;
IE1 = 0;
CaptureTime = TH1;
temp[counter]=TH1;
if(++counter>34)counter=0;
TL1 = 0;
TH1 = 0;
if(++RemoState>34)
{
RemoState=0;
}
if( (CaptureTime>(T102-2))&&(CaptureTime<(T102+2))&&(RemoState>2) )
{
RemoBuffer0=(RemoBuffer0>>1)|0x00;
}
else if( (CaptureTime>(T205-2))&&(CaptureTime<(T205+2))&&(RemoState>2) )
{
RemoBuffer0=(RemoBuffer0>>1)|0x80;
}
else if( (CaptureTime>(T820-0x30))&&(CaptureTime<(T820+0x30)) )
{
RemoState=2;
}
else
{
RemoState=0;
}
switch(RemoState){
//startt receive
case 1:
break;
//receive reader
case 2: RemoBuffer0=0;
break;
//receive system0
case 10: RemoBuffer1=RemoBuffer0;RemoBuffer0=0;
break;
//receive system1
case 18: //if(RemoBuffer0==~RemoBuffer1)
//{
// RemoSystem=RemoBuffer1;
RemoBuffer0=0;
//}
//else
//{
// RemoState=0;
//}
break;
//reveive command0
case 26: RemoBuffer1=RemoBuffer0;RemoBuffer0=0;
break;
//the end bit
case 34: if(RemoBuffer0==~RemoBuffer1)
{
RemoCommand=RemoBuffer1;
F_RemoReady=1;
}
RemoState=0;
break;
default:;
}
TR1 = 1;
ET1 = 1;
}
void remo_timer(void) interrupt 3
{
RemoState = 0;
counter = 0;
TR1 = 0;
ET1 = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -