?? remote51_new.c
字號:
#include <REGX52.H>
#define D45MS 2500
#define D09MS 450
#define D220U 0x90
#define D250U 0x06
#define IRIN P3_2 //紅外輸入引腳的定義
//#define IRIN P1_4 //紅外輸入引腳的定義
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 remcode2[]={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等
unsigned char code remcode[]={
0x90,0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,//0-9的編碼
0x28, 0x68,0x08, 0x88, 0x58,0x48,0xc8, 0xa8,
//TV/AV,關機,頻道-,頻道+,重復,VOL+,VOL-, 靜音MUTE,
0x78, 0xb8, 0x38, 0xe8, 0x98,0x18, 0x98, 0x50,0xd0,
//亮度,MIN,HOUR,IMER,SET,定時,畫中畫,2*, 3*
};
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[142];
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;
P2= 0xff;
P0=zxm[0];
//lcd_init();
//lcd_string(str2);
while(1){
IROLD=1; TR0=0;
P0=zxm[0];
//while(IRIN); // 高電平等待
P0=zxm[9];
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;
}
P0=zxm[1];
}
P0=zxm[2];
while(IRIN); //高電平
TR0=0;
leader[3]=TH0;leader[4]=TL0;
TL0=0x00; TH0=0x00;
TR0=1;
m=0;
while(m<140){
IRIN =1;
while(IRIN==0) //低電平
{rekey++; //高電平
if (rekey>10000) break;
}
TR0=0;
irdb[m++]=TH0;
irdb[m++]=TL0;
TL0=0x00;TH0=0x00;
TR0=1;
rekey=0;
while(IRIN) //高電平
{rekey++;
if (rekey>10000) break;
}
TR0=0;
irdb[m++]=TH0;
irdb[m++]=TL0;
TL0=0x00; TH0=0x00;
TR0=1;
P0=zxm[3];
}
TR0=0;
rekey=0;
SBUF = 0xBB;while(!TI);TI=0;
SBUF= 0xAA; while(!TI);TI=0;
m=0;
while(m<4){
SBUF=leader[m++];while(!TI);TI=0;
SBUF=leader[m++];while(!TI);TI=0;
P0=zxm[4];
}
m=0;
while(m<140){
SBUF=irdb[m++];while(!TI);TI=0;
SBUF=irdb[m++];while(!TI);TI=0;
P0=zxm[5];
}
SBUF=0xaa;while(!TI);TI=0;
SBUF=0xbb;while(!TI);TI=0;
P0=zxm[6];
IRIN =1;
rekey=0;
while(rekey<500){rekey++;}
IROLD=0;
P0=zxm[7];
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 + -