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

📄 红外发射程序.txt

📁 iptv机顶盒源码,包括原理图在内
💻 TXT
📖 第 1 页 / 共 2 页
字号:
/******************************************************************** 
*  函数库说明:包含了红外通讯常用收发函数和工具                     * 
*  版本说明:1.0 Bate                                               * 
*  作者:xky183                                                     * 
*  日期:2003年7月                                                  * 
*  修改:GorgonMeducer                                              * 
*  日期:2005年4月21日                                              * 
*  平台:RC 8M                                                      * 
*                                                                   * 
*  说明:红外通讯使用的格式为字节直接发送模式,提供4位自校验的函数  * 
*        通讯时记录载波宽度。未使用串口帧格式。软件载波。           * 
*                                                                   * 
*  硬件连接说明:PC5发送数据(可以修改宏定义)  外中断0接收数据     * 
*                                                                   * 
*  使用说明:添加必要的代码到定时器中断,并且使用头函数中的定时器初 * 
*            始化程序。使用程序中的外中断初始化程序,添加必要的部分 * 
*            到外中断处理程序中。                                   * 
*            发送 数据的时候,调用函数RaySend(),也可以调用KeyDeal()* 
*            来处理并发送4位的控制信号。                            * 
*            对于接收信号,直接从Ordar或者RayDataIn中读取收到的字节 * 
*            请自己清空RayDataIn变量                                * 
*            接受到的数据保存在变量ray_ordar                        * 
*            开启红外线接收时要开外中断0: GICR=0x40;                * 
********************************************************************/ 


/*------------------------------------------------------------------* 
*                      红外发射程序                                 * 
*------------------------------------------------------------------*/ 


#define ray_IO_on  PORTC |=0B00100000; 
#define ray_IO_off PORTC &=0B11011111; 
#define T1I_on     TIMSK |=0B00000001; 
#define T1I_off    TIMSK &=0B11111110; 
/*---------------------*/ 
/*  红外发射全局变量   */ 
/*---------------------*/ 
char ray_Flag = 0; 
char ray_Sign = 0; 

/*---------------------*/ 
/*      函数声明区     */ 
/*---------------------*/ 
char KeyDeal(char TempData);                //数据编码发送函数       
void RaySend(unsigned char DataTemp);         //数据红外发送函数       
void delay_1ms(void); 
void Delay_Ms(unsigned int n); 
void Timer0_init(void); 
void ray_send_init(void); 

/***********红外线发射***************** 
void ray_send_init(void)              * 
{                                     * 
   Timer0_init();             * 
}                                     * 
**************************************/ 

/******************************************************************** 
*  函数说明:1 MS延时程序                                           * 
********************************************************************/ 
void delay_1ms(void) 
{  
unsigned int i; 
for(i=1;i<(unsigned int)(8*143-2);i++) 
   ; 
} 

/******************************************************************** 
*  函数说明:MS延时程序                                             * 
*  输入:需要延时的时长                                             * 
********************************************************************/ 
void Delay_Ms(unsigned int n) 
{ 
unsigned int i=0; 
while(i<n) 
   { 
   delay_1ms(); 
    i++; 
   } 
} 
/*------------------------------------------------------------------- 
*      发射程序需要定时器0的支持,请粘贴以下代码到主程序            * 
--------------------------------------------------------------------/ 
/******************************************************************** 
*  函数说明:定时器0中断处理程序,用来产生40MHz的载波               * 
********************************************************************* 
#pragma interrupt_handler timer0_ovf_isr:10                           
void timer0_ovf_isr(void)     //需要定时器0的中断支持本函数库           
{                                                     
     TCNT0=0xa5;                                         
     ray_Flag++;                                         
     ray_Sign=1;                                         
}                                                      
/******************************************************************** 
*  函数说明:定时器0初始化程序                                      * 
********************************************************************* 
void Timer0_init(void)                                      
{                                                        
     TCCR0=0x01;       // CK                                
     TCNT0=0x9b;                                              
                                                        
}                                                                     
-------------------------------------------------------------------*/ 
                                                        
/******************************************************************* 
* 函数说明:红外发送程序                                           * 
* 输入:要发送的数据                                               * 
*******************************************************************/ 
void RaySend(unsigned char DataTemp) 
{ 
 unsigned char i=0,DataBit=0;  
  
    ray_Flag=0; 
    ray_Sign=0; 
    T1I_off; 

   for (i=0;i<8;i++) 
    {         
         DataBit=DataTemp & 0x01; 
         if(DataBit==0) 
            {     
               T1I_on; 
               while (ray_Flag<40) 
               {      
                     ray_IO_on;                                  //产生高电平          
                   ray_Sign=0; 
                  while( ray_Sign !=1); 
                     ray_IO_off;                                 //产生低电平          
                     ray_Sign=0; 
                    
                 while( ray_Sign !=1);     
                  }    
              ray_Flag=0; 
              ray_Sign=0; 
               ray_IO_off;                                        //产生低电平          
                                                                     //13.125us的时间       
              while (ray_Flag<=40);                              //50                
               T1I_off; 
              ray_Flag=0;   
              ray_Sign=0; 
               
              DataTemp=DataTemp>>1;      
          } 
        else      
           {      
               T1I_on; 
               while (ray_Flag<80) 
                {     ray_IO_on;                                  //产生高电平          
                   ray_Sign=0; 
                  while( ray_Sign !=1); 
                     ray_IO_off;                                 //产生低电平          
                     ray_Sign=0; 
                    
                 while( ray_Sign !=1) 
                 ;     
                   }    
              ray_Flag=0; 
              ray_Sign=0; 

⌨️ 快捷键说明

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