📄 remote51.c
字号:
#include <REGX52.H>
#define D45MS 2500
#define D09MS 450
#define D220U 0x90
#define D250U 0x06
#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);
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;
}
int main(void)
{
union myd rdata;
unsigned char m,n,i,seg[]={0x01,0x02,0x04,0x08,0x10,0x00,0x00,0x00};
unsigned char 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.....";
initTimer(D220U); //220us
IT1=1;
EX1=1;
EA=0;rekey=0;
key=0x10;
lcd_init();
lcd_string(str2);
while(1){
//IRGND =0;
k.r = readir();
if (k.r ==0xffffffff) rekey++;
else rekey =0;
P0 = zxm[key];
P2 = seg[3];
m=2;
while(m--)
{
if(k.r)
{
if (!rekey)
{
rdata = k;
//k.r=0x12345678;
str1[6]=0x30 | (k.led[0]&0xf0)>>4;
str1[7]=k.led[0]&0x0f | 0x30;
str1[8]=0x30 | (k.led[1]&0xf0)>>4;
str1[9]=k.led[1]&0x0f+0x30;
str1[10]=0x30 | (k.led[2]&0xf0)>>4;
str1[11]=k.led[2]&0x0f | 0x30;
str1[12]=0x30 | (k.led[3]&0xf0)>>4;
str1[13]=k.led[3]&0x0f | 0x30;
i=6;
while(i<14)
{
if(str1[i]>0x39) str1[i] +=('A'-'9'-1);
i++;
}
str1[24]=str1[6];
str1[25]=str1[7];
str1[34]=str1[10];
str1[35]=str1[11];
lcd_init();
lcd_string(str1);
}
}
i=0;
/*while(i<2)
{
P2 &= 0xe0;P0 = 0xff;
P0=zxm[(rdata.led[2*i]>>4 ) & 0x0f];
P2 |= seg[i*2];
n=100;while(n--);
P2 &= 0xe0;P0 = 0xff;
P0=zxm[rdata.led[2*i] & 0x0f];
//P0=zxm[8];
//P2 = seg[2*i+1];
P2 |= seg[i*2+1];
i++;
n=100;while(n--);
P2 &= 0xe0;P0=0xff;
}
*/
i=0;
P2 &=0xe0;
while(i<16){
if(remcode[i]==rdata.led[2]) {
//Request(remotekey);//通过串口来查看解码是否正确
key=i;
i=22;
}
i++;
}
P0 = zxm[key];
P2 = seg[3];
n=100;while(n--);
//P2 &= 0xe0;P0=0xff;
}
//IRGND=0;
}
}
void delay1(unsigned int nms)
{
while(nms--);
}
// 24---220us, 06---250us
void initTimer(unsigned char st0)
{
TMOD=0x02;
TH0=st0;
TL0=st0;
TR0=1;
ET0=0;
ET1=0;
}
void initTimer2()
{
TMOD=0x01;
TH0=0xfc;
TL0=0x18;
TR0=1;
ET0=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;
if ((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 + -