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

📄 红外发射程序.txt

📁 iptv机顶盒源码,包括原理图在内
💻 TXT
📖 第 1 页 / 共 2 页
字号:
               ray_IO_off;                                        //产生低电平          
                                                                     //13.125us的时间       
              while (ray_Flag<=40);                              //50                
               T1I_off; 
              ray_Flag=0;   
              ray_Sign=0; 
              DataTemp=DataTemp>>1;    
          }    
    } 
     
    ray_Flag=0; 
     ray_IO_off;                                                     //为低电平             
    i=0; 
    T1I_off; 
      
    Delay_Ms(6);                                                    //两个字节的数据之间间隔 
} 

char KeyDeal(char TempData) 
/******************************************************************** 
*  函数说明:数据格式转换(4位数据加上自己的反码作交验)            * 
*  输入:需要转换和发送的信息                                       * 
*  输出:转换好的数据,并自动发送数据                               * 
********************************************************************/ 
{ 
 char TempReturn=0; 
 char i=0; 
 TempReturn =~ TempData & 0x0f;  
 TempReturn <<= 4; 
 TempReturn |= 0x0f & TempData; 
 for(i=0;i<10;i++) 
   { 
   RaySend(TempReturn); 
   Delay_Ms(6); 
   } 
 return TempReturn; 
} 




/*------------------------------------------------------------------* 
*                      红外接受程序                                 * 
*------------------------------------------------------------------*/ 

/*---------------------*/ 
/*  红外接收全局变量   */ 
/*---------------------*/ 
char ray_singal_num = 0;                                             //接受信号               
char  ray_data_in = 0;                                                //ray_data_in为接收的数据 
char ray_symbol = 0; 
char ray_count_array[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//Bit位数组               
char ray_ordar = 0;                                                  //最终得到的命令(鸡肋)  

/*---------------------*/ 
/*      函数声明区     */ 
/*---------------------*/ 
void ray_judger(void); 
void int0_init(void); 
void Timer1_init(void); 

/*******红外线接收********** 
void ray_receive_init(void)  
{                            
  int0_init();               
  Timer1_init();             
}                            
***************************/ 


/*------------------------------------------------------------------- 
*    发射程序需要定时器1和外中断0的支持,请粘贴以下代码到主程序     * 
--------------------------------------------------------------------/ 
/******************************************************************** 
*  函数说明:定时器1初始化程序                                      * 
********************************************************************* 
void Timer1_init(void)                                                
{                                                                     
    TCNT1 =0;                                                         
    TCCR1B =0x03;                                                    
}                                                                     
/******************************************************************** 
*  函数说明:外中断0初始化程序                                      * 
********************************************************************* 
void int0_init(void)                                                  
{                                                                     
    MCUCR=0x02;//开中断0、下降沿触发脉冲                              
    GIFR=0Xff;                                                        
}                                                                     
#pragma interrupt_handler ext_int0:2    //M8参考外中断向量            
/******************************************************************** 
*  函数说明:外中断0中断处理程序                                    * 
********************************************************************* 
void ext_int0(void)                                                    
{                                                                     
     char temp =0;                                                    
    temp = TIMSK;                                                    
    TIMSK = 0;                                                       
    if(ray_symbol == 0)                                              
    {                                                                
      if(TCNT1 >= 0x00ff)        //大于4MS则重置指针                
      {                                                             
          ray_singal_num = 0;                                       
      }                                                             
      TCNT1 = 0X00;              //0.5ms记数值为31                  
      MCUCR = 0X03;              //INT0上升沿触发                   
      ray_symbol = 1;                                               
    }                                                                
     else                                                             
     {                                                                
      if((TCNT1H == 0)&&(TCNT1 <= 0x00ff))                          
      {                                                             
         ray_count_array[ray_singal_num] = TCNT1L;                 
          ray_singal_num ++;                                        
         if (ray_singal_num == 8)                                 
          {                                                         
             ray_singal_num = 0;                                    
             ray_judger();                                          
          }                                                         
          ray_symbol = 0;                                           
      }                                                             
      else                                                          
      {                                                             
                                                                      
          ray_singal_num = 0;                                       
      }                                                             
                                                                    
      MCUCR = 0X02;              //INT0下降沿触发                   
      TCNT1 = 0;                                                    
    }                                                                
    TIMSK = temp;                                                    
}                                                                     
/*******************************************************************/ 

/******************************************************************** 
*   函数说明:红外信号处理程序                                      * 
********************************************************************/ 
void ray_judger(void) 
{     
     char i=0; 
     ray_data_in=0;       
     
     for(i=0;i<8;i++)                                               //加入适当的冗错处理 
    { 
      if(ray_count_array[i] < 0x38)                                //0.5ms为低电平 
      { 
         ray_data_in &= ~(1<<i); 
      } 
      if(ray_count_array[i] >=0x38)                                //1ms为高电平 
      { 
         ray_data_in |= (1<<i); 
      } 
    }      
    ray_ordar = ray_data_in;   
} 


-----此内容被Gorgon Meducer于2005-04-26,13:27:24编辑过

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -