⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 keil 环境 收IR及发IR的相关软件
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -