📄 remote51_new.c
字号:
#include <REGX52.H>
#define D45MS 2500
#define D09MS 450
#define D220U 0x90
#define D250U 0x06
//#define IRIN P2_0 //红外输入引脚的定义
#define IRIN P1_4 //红外输入引脚的定义
//#define IRIN P2_7
//#define IRGND P2_6
union myd{
unsigned long r;
unsigned char led[4];
} ;
union myd k;
unsigned long readir(void);
void delay1(unsigned int nms);
void initTimer(unsigned char st0);
void initTimer1(void);
unsigned long readir2(void);
extern void lcd_init(void);
extern void lcd_string(char *strpoint); /*在当前显示位置显示LCD 字符串*/
unsigned char code remcode[]={0x12,0x90,0xb8,0xf8,0x98,0xd8,0x88,0xe8,0x48,0x68,//0,1-9
0xb0,0xa8,0x99,0x00,0x08,0x60,0x02,0x20,
//VOL+,VOL-,CH+,CH-,POWER,mute,recall,-/--
0x40,0xa0,0x2a,0xb2,0x50,0x78,0x70,0x58,0x38,0x30};
// 最后3排AV。。。Freeze。。。video。。。hide。。。panel等
void int1(void) interrupt 2
{ EA = 0;
k.r = readir();
IE1 = 0;
EA = 1;
IE1 = 0;
}
//UART init
void initUart(void)
{
TMOD|=0x20;
SCON=0x50;
// PCON|=0x80;
TH1=0xfd;
TL1=0xfd;
TR1=1;
ET1=0;
}
int main(void)
{
union myd rdata;
bit IROLD=0;
bit IRNEW=0;
unsigned char m,n,i;
unsigned char code seg[]={0x01,0x02,0x04,0x08,0x10,0x00,0x00,0x00};
unsigned char code zxm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff, };
unsigned int rekey;
unsigned char key, str1[]="Code: -------- SYS:-- USER:--";
unsigned char code str2[]="Please press any key.....";
unsigned char idata irdb[128];
unsigned char leader[4];
initTimer(0);
initUart();
TI=0;
P1=0xff;
SBUF = 0xee;while(!TI);TI=0;
SBUF= 0x55;
while(!TI);TI=0;
IT1=1;
EX1=1;
EA=0;rekey=0;
key=0x10;
//lcd_init();
//lcd_string(str2);
while(1){
IROLD=1; TR0=0;
while(IRIN);
while(IROLD){
IRIN =1;
rekey=0;
TR0=0;
TH0=0;TL0=0;TR0=1;
while(!IRIN){rekey++;}
TR0=0;leader[0]=TH0;leader[1]=TL0;
TH0=0;TL0=0;TR0=1;
if(rekey>500) {
IROLD=0;
}
}
while(IRIN); //高电平
TR0=0;
leader[3]=TH0;leader[4]=TL0;
TL0=0x00; TH0=0x00;
TR0=1;
m=0;
while(m<127){
IRIN =1;
while(IRIN==0); //低电平
TR0=0;
irdb[m++]=TH0;
irdb[m++]=TL0;
TL0=0x00;TH0=0x00;
TR0=1;
while(IRIN); //高电平
TR0=0;
irdb[m++]=TH0;
irdb[m++]=TL0;
TL0=0x00; TH0=0x00;
TR0=1;
}
TR0=0;
rekey=0;
m=0;
while(m<4){
SBUF=leader[m++];while(!TI);TI=0;
SBUF=leader[m++];while(!TI);TI=0;
}
m=0;
while(m<127){
SBUF=irdb[m++];while(!TI);TI=0;
SBUF=irdb[m++];while(!TI);TI=0;
}
IROLD=0;
while(IROLD){
IRIN =1;
rekey=0;
while(IRIN){IRIN =1;rekey++;}
if(rekey>500) IROLD=0;
}
TI=0;
SBUF=0xaa;while(!TI);TI=0;
SBUF=0xbb;while(!TI);TI=0;
rekey=0;
k.r=0;
}
}
unsigned long readir2(void)
{ static bit IROLD=0;
bit IRNEW;
union myd rem;
IRIN =1;
IRNEW = IRIN;
if(IRNEW != IROLD)
{
rem.led[0]=TL0;
rem.led[2]=TH0;
TL0=0x00;
TH0=0x00;
TR1=1;
}
else
{
rem.r=0;
}
IROLD =IRNEW;
return rem.r;
}
void delay1(unsigned int nms)
{
while(nms--);
}
// 24---220us, 06---250us
void initTimer(unsigned char st0)
{
TMOD=0x01;
TH0=st0;
TL0=st0;
TR0=0;
ET0=0;
ET1=0;
}
void initTimer1(void)
{
TMOD =0x10;
TH1=0x00;
TL1=0x00;
TR1=0;
ET1=0;
//ET1=0;
}
unsigned long readir(void)
{ unsigned char i;
unsigned int delay;
unsigned long rdata=0;
union myd rem;
IRIN = 1;
if(IRIN) return 0;
EA=0;i=0;
initTimer2();TF0=0;
while(IRIN==0);
/* {
while(TF0==0);
TF0=0;i++;
TH0=0xfc;TL0=0x18;
}
TR0=0;
if (i<6) return i;*/
i=32;
while(i--) //始接收
{
delay =80;
initTimer(D220U);
while(delay--) // 延时4.5ms~6.0ms
{
while(TF0==0);
TF0=0;if(IRIN==0) delay = 0;
}
TR0=0;
while(IRIN==0) IRIN = 1; //等待高电平
// 延时0.9ms begin
initTimer(D220U);
delay=6;
while(delay--)
{while(TF0==0);TF0=0;}
TR0=0;
// 延时0.9ms end
rdata <<=1;
IRIN =1;
if(IRIN)
rdata |= 0x1;
}
rem.r = rdata;
if(rem.r+1) {
if (((rem.led[0]+ rem.led[1])== 0xff) &&((rem.led[2]+ rem.led[3])== 0xff)) return rdata;
else return 0;
}
else return rdata;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -