📄 main.c
字号:
#include <intrins.h>
#include <REG52.H>
#include "switch.H"
#define NO_USED_IR 1
#define COM_KEY 1
#define TRUE 1
#define FALSE 0
/*100 US FOR 24MHZ*/
#define MS1TL0 0x37
#define MS1TH0 0xff
/*100 US FOR 12MHZ*/
/*
#define MS1TL0 0x9b
#define MS1TH0 0xff
*/
/*1ms for 12mhz*/
/*
#define MS1TL0 0x17
#define MS1TH0 0xfc
*/
/*2ms for 12mhz*/
/*
#define MS1TL0 0x2f
#define MS1TH0 0xf8
*/
/*2ms for 24mhz*/
/*
#define MS1TL0 0x5F
#define MS1TH0 0xf0
*/
#define HIGH 0x01
#define LOW 0x00
/**************************************************/
#define IR_NONE 0Xff // 0XFF
#define IR_DVD_POWER 0XD7
/*
#define IR_AV_SWITCH 0X9D
#define IR_CHANNEL_UP 0XDD
#define IR_CHANNEL_DOWN 0XB5
#define IR_VOLUME_DOWN 0XAF
#define IR_VOLUME_UP 0X8f
#define IR_MCU_SETUP 0X87
#define IR_SUB_TITLE 0X15// 0X87
#define IR_NUM1 0X6F //
#define IR_NUM2 0X47 //
#define IR_NUM3 0X07 //
#define IR_NUM4 0X4F //
#define IR_NUM5 0X67 //
#define IR_NUM6 0X27 //
#define IR_NUM7 0X77 //
#define IR_NUM8 0X57 //
#define IR_NUM9 0X17 //
#define IR_NUM0 0XB7 //
#define IR_TV_GOTO 0X65 //
#define IR_PAL_NTSC 0X7D //
#define IR_SYS_R_L 0XEF //
#define IR_DVD_SETUP 0XF5 // 0X07
#define IR_UP 0X55 // 0X9F
#define IR_PLAY_PAUSE 0XED // 0x37
#define IR_STOP 0XAD //0X47
#define IR_LEFT 0X85 // 0XFD
#define IR_PLAY_ENTER 0X9F //0xAF
#define IR_RIGHT 0X5f //0X1D
#define IR_REPEAT 0X3f //0X1D
#define IR_PBC 0X1D //0xAF
#define IR_DOWN 0X1F //0X1D
#define IR_FR 0XFD //0X1D
#define IR_FF 0XBF //0X1D
#define IR_TITLE 0XE7 //0xAF
#define IR_PREV 0X0F //0X1D
#define IR_NEXT 0X75 //0X1D
#define IR_MUTE 0XA7 //0X1D
#define IR_DVD_GOTO 0X35 //0xAF
#define IR_ANGLE 0X7F //0X1D
#define IR_SLOW 0X5D //0X1D
*/
/*******************************************************************/
/*********************************IR********************************/ // 00 FF
// MENU 12 ED
// TITLE E0 1F
// MODE 08 F7
// 1 EA 15
// 2 82 7D
// 3 62 9D
// 4 6A 95
// 5 52 AD
// 6 D8 27
// 7 88 77
// 8 A8 57
// 9 40 BF
// 0 48 B7
// 10+ 9A 65
// SEARCH 10 EF
// DISPLAY 92 6D
// SUBTITLE CA 35
// SLOW AA 55
// PROGRAM
// ANGLE C2 3D
// AUDIO 80 7F
// MUTE 18 E7
// REPEAT FA 05
// SETUP F0 0F
// UP 60 9F
// ZOOM 8A 75
// PLAY/PAUSE C8 37
// LEFT E2 1D
// ENTER F5 0A
// RIGHT 02 FD
// STOP B8 47
// DOWN 22 DD
// FR B0 4F
// FF 98 67
// VOLUME_DOWN A2 5D
// VOLUME_UP 0A F5
// PREV 7A 85
// NEXT A0 5F
/*******************************************************************/
/*
unsigned char code Remote_Convert[36][2]=
{
{IR_PAL_NTSC, 0xf7 },
{IR_SYS_R_L, 0x7f },
{IR_DVD_SETUP, 0X0F },
{IR_UP, 0X9F },
{IR_PLAY_PAUSE, 0X37 },
{IR_STOP, 0X47 },
{IR_LEFT, 0X1D },
{IR_PLAY_ENTER, 0XAF },
{IR_RIGHT, 0XFD },
{IR_REPEAT, 0X05 },
{IR_PBC, 0XED },
{IR_DOWN, 0XDD },
{IR_FR, 0X4F },
{IR_FF, 0X67 } ,
{IR_TITLE, 0X1F },
{IR_PREV , 0X85 },
{IR_NEXT, 0X5F },
{IR_MUTE , 0XE7 },
{IR_DVD_GOTO, 0XEF },
{IR_ANGLE , 0X3D },
{IR_SLOW , 0X55 },
{IR_NUM0, 0XB7 },
{IR_NUM1, 0X15 },
{IR_NUM2, 0X7D },
{IR_NUM3, 0X9D },
{IR_NUM4 , 0X95 },
{IR_NUM5, 0XAD },
{IR_NUM6 , 0X27 },
{IR_NUM7, 0X77 },
{IR_NUM8 , 0X57 },
{IR_NUM9 , 0XBF },
{IR_TV_GOTO , 0X65 },
{IR_VOLUME_UP , 0XF5 },
{IR_VOLUME_DOWN , 0X5D },
{IR_AV_SWITCH , 0XFF },
{IR_SUB_TITLE, 0X35 },
};
*/
/*
#define MS1TH1 0xfc
#define MS1TL1 0x17
*/
/*FOR 24MHZ*/
#define MS1TH1 0xf8
#define MS1TL1 0x2f
unsigned char Temp1=0;
unsigned char ir_100us=0;
bit pulse_flag=0;
static char data_type=0;
bit read_data_flag=0;
unsigned char data1=0;
unsigned char data2=0;
unsigned char data3=0;
unsigned char data4=0;
static char data1_num=0;
bit IRsendFlag=0;
/**************************************************************/
sbit SYS_POWER_PIN=P1^7;
sbit SYS_MUTE_PIN=P1^5;
/**************************************************************/
void FrontKeyScan(void);
bit En_Flag=0;
bit SYSPowerFlag=0;
/***************************************************************/
/*interrupt subroutine(dedecating on remote subroutine) */
/*as time tick of receiving remote pulse */
/***************************************************************/
void Timer0_Ser() interrupt 1
{
TR0=0;
TH0=MS1TH0;
TL0=MS1TL0;
ir_100us++;
TR0=1;
}
/*****************************************************************/
/*interrupt subroutine */
/* time tick of system */
/*****************************************************************/
unsigned char TimerBase=0;
void IRSendFunction(void);
void Timer1_Ser() interrupt 3
{
TR1=0;
TH1=MS1TH1;
TL1=MS1TL1;
TimerBase++;
if(TimerBase>=25)
{
TimerBase=0;
FrontKeyScan();
}
TR1=1;
}
/***************************************************************/
/*extern interrupt subroutine */
/*interrupt suroutine of receiving remote pulse */
/***************************************************************/
void exter_interrupt0() interrupt 2
{
EX1=0;
if(NO_USED_IR)
{
pulse_flag=0;
if(ir_100us>3)
{
if(read_data_flag==0)
{
if((ir_100us>=110)&&(ir_100us<=160))
{
data_type=0;
}
switch(data_type)
{
case 0:
{
if((ir_100us>=110)&&(ir_100us<=160))
{
data_type=1;
data1_num=0;
}
}
break;
case 1:
{
if((ir_100us>=7)&&(ir_100us<=27))
{
if((ir_100us>=7)&&(ir_100us<=16))
{
data1=data1<<1;
data1=(data1&0xfe);
}
if((ir_100us>=17)&&(ir_100us<=27))
{
data1=data1<<1;
data1=(data1|0x01);
}
data1_num=data1_num+1;
if(data1_num==8)
{
data_type=2;
data1_num=0;
}
}
else
{
data_type=0;
}
}
break;
case 2:
{
if((ir_100us>=7)&&(ir_100us<=27))
{
if((ir_100us>=7)&&(ir_100us<16))
{
data2=data2<<1;
data2=(data2&0xfe);}
if((ir_100us>=17)&&(ir_100us<=27))
{
data2=data2<<1;
data2=(data2|0x01);
}
data1_num++;
if(data1_num==8)
{
data_type=3;
data1_num=0;
}
}
else
data_type=0;
}
break;
case 3:
{
if((ir_100us>=7)&&(ir_100us<=27))
{
if((ir_100us>=7)&&(ir_100us<16))
{
data3=data3<<1;
data3=(data3&0xfe);
}
if((ir_100us>=17)&&(ir_100us<=27))
{
data3=data3<<1;
data3=(data3|0x01);
}
data1_num++;
if(data1_num==8)
{
data_type=4;
data1_num=0;
}
}
else
data_type=0;
}
break;
case 4:
{
if((ir_100us>=7)&&(ir_100us<=27))
{
if((ir_100us>=7)&&(ir_100us<16))
{
data4=data4<<1;
data4=(data4&0xfe);
}
if((ir_100us>=17)&&(ir_100us<=27))
{
data4=data4<<1;
data4=(data4|0x01);
}
data1_num++;
if(data1_num==8)
{
data_type=0;
data1_num=0;
if(data4==IR_DVD_POWER)
{
read_data_flag=1;
En_Flag=1;
IRsendFlag=0;
}
else
{
read_data_flag=0;
En_Flag=0;
IRsendFlag=1;
}
}
}
else
data_type=0;
}
break;
}
}
ir_100us=0;
}
pulse_flag=1;
}
EX1=1;
}
//void TestLED(unsigned char Times);
void Delay_ms(unsigned char cTime)
{
unsigned char i;
unsigned int j;
for(i=0;i<cTime;i++)
{
for(j=0;j<10000;j++)
{
_nop_();
}
}
}
main()
{
/*************************************************************/
/*the following is used by initializing*/
/*************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -