📄 main.h
字号:
#define REPEAT_DELAY 3
#define g_ir_system_code 0xff
bit RMDTSET; // 1:received
bit KEYUP;
bit TxbEmpty;
unsigned char tick_count;
unsigned char RMDATA;
unsigned char count;
unsigned char RECDATA; //key code signal
unsigned char SRecData; //key code signal
extern unsigned char togglebit;
/*
void delay(int i)
{
int j;
for(j=0;j<i;j++);
}
*/
void timer0handle() interrupt 1 using 1
{
IE = 0x0b1;//0x8d;//1(EA)0(X)1(ET2)1(ES) - 0(ET1)0(EX1)0(ET0)1(EX0)
RECDATA=1;
KEYUP=1;
}
void serialporthandler() interrupt 4 using 2
{
if(TI!=0)
{
TI = 0;
TxbEmpty = 1;
};
if(RI!=0)
{
RI = 0 ;
SRecData = SBUF;
}
}
void timer2handler() interrupt 5 using 3
{
T2CON = 0x04;//0(TF2)1(EXF2)0(RCLK)0(TCLK) - 0(EXEN2)1(TR2)0(C_T2)0(CP_RL2)
tick_count++;
}
void main_init()
{
RMDTSET=0;
count=0;
RECDATA=0;
TxbEmpty = 1;
}
void ir_init()
{
TMOD = 0x21;//0x11; //TIMER0: 16 BIT TIMER MODE;timer1:MODE 2
TH1 = 0x0fd;
TL1 = 0x0fd;
TH2 = 0x3c;
TL2 = 0x0b0;
RCAP2H = 0x3c;
RCAP2L = 0x0b0;
IP = 0x00;
TCON = 0x41; //0x41; //0(TF1)1(TR1)0(TF0)0(TR0)-0(IE1)0(IT1)0(IE0)1(IT0)
T2CON = 0x04; // 0(TF2)1(EXF2)0(RCLK)0(TCLK)-0(EXEN2)0(TR2)0(C/T2)1(CP/RL2)
SCON = 0x70; // 0(SM0)1(SM1)1(SM2)1(REN)-0(TB8)0(RB8)0(TI)0(RI)
IE = 0x0b1; //0x0a1;//0x89;//1(EA)0(X)1(ET2)0(ES)-1(ET1)0(EX1)0(ET0)1(EX0)
}
void updowncode(unsigned char *codevalue)
{
unsigned int temp;
int i;
temp=*codevalue;
*codevalue = 0;
for(i=0;i<8;i++)
{
if(temp&0x01)
{
*codevalue=(*codevalue)<<1;
*codevalue=(*codevalue)|0x1;
}
else
{
*codevalue=(*codevalue)<<1;
}
temp=temp>>1;
}
}
void int0handle( void ) interrupt 0 using 0
{
static unsigned char keycode;
static unsigned char count; //bit count
static unsigned char leader; //remote leader
static unsigned char custom_ok; //judge the custom code
static char repeat_delay;
static char repeat_enable;
static unsigned long custom; //store the data
unsigned int timer;
TCON=0X41;//0x45; //0(TF1)1(TR1)0(TF0)1(TR0)-0(IE1)1(IT1)0(IE0)1(IT0)
if(RECDATA==0)
{
RECDATA=1;
}
else
{
TR0=0;
timer=TH0;
timer&=0x0ff;
// if( (timer >0x30 ) &&(timer < 0x39) ) //leader code
if( (timer >0x2c ) &&(timer < 0x35) ) //leader code
{
leader = 1;
custom_ok = 0;
repeat_delay = REPEAT_DELAY;
count = 0;
repeat_enable = 0;
}
// else if( timer >0x2a && timer <0x30 ) //repeat code
else if( timer >0x26 && timer <0x2c ) //repeat code
{
if( repeat_delay )
repeat_delay --;
else if( repeat_enable )
{
if(RECDATA==1) //{KEYUP=0;RMDTSET=1;}
{
if(RMDATA==0x5C||RMDATA==0x58||RMDATA==0x40||RMDATA==0x45||RMDATA==0x1b||RMDATA==0X09||RMDATA==0X04||RMDATA==0X0C)
{
togglebit=!togglebit;
KEYUP=0;RMDTSET=1;
}
}
}
}
else //data code
{
// if( timer >1&& timer <6 ) //0
if( timer >1&& timer <5 ) //0
{
custom <<= 1;
count ++;
}
// else if( timer >6 &&timer < 12 ) //1
else if( timer >5 &&timer < 11 ) //1
{
custom = (custom << 1) | 1;
count ++;
}
else //not the correct remote controller,reset it
{
count = custom = custom_ok = leader = 0;KEYUP=1;RMDTSET=0;
}
if( count ==16&& leader ) //custom code
{
count = 0;
if( ! custom_ok ) //check custom code or first time press the key
{
if( custom == g_ir_system_code )
custom_ok = 1;
else
{
leader = 0; //reset;
}
}
else //data code
{
keycode = (custom >> 8);
updowncode(&keycode);
repeat_enable = 1;
KEYUP=0;
RMDTSET=1;
RMDATA=keycode;
leader = 0;//johnson
RECDATA=0;
}
}
}
}
TH0=0;
TL0=0;
ET0=1;
TR0=1;
}
void tcom_data(unsigned char cdata)
{
unsigned char i;
i =0;
while(TxbEmpty!=1 && i < 200)
{
_nop_();
i++;
}
SBUF = cdata;
TxbEmpty = 0;
}
void dis_data(unsigned char d_data)
{
unsigned char x_data;
// tcom_data(0x20);
tcom_data(0x30);
tcom_data(0x58);
x_data = (d_data&0xf0)>>4;
if(x_data > 9)
x_data = x_data-10 + 0x41;
else
x_data = x_data + 0x30;
tcom_data(x_data);
x_data = d_data&0x0f;
if(x_data > 9)
x_data = x_data-10 + 0x41;
else
x_data = x_data + 0x30;
tcom_data(x_data);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -