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

📄 ir.c

📁 用AVR M8控制PT2134音频芯片的程序,显示是LCM2402,还带有有红外遥控功能.
💻 C
字号:
#include <avr/io.h>
#include <util/delay.h> 
#include<avr/interrupt.h>
#include "IR.h"
//---------------------------------------------------------------

uchar    date[4]={0,0,0,0};//date数组为存放地址原码,反码,数据原码,反码 
uchar    ike;

//-----------------------------------------------------------------------------------
/*----------------------------------------------------------*/
/*-----------------------红外解码程序(核心)-----------------*/
/*----------------------------------------------------------*/

uchar IR_decode(void)
{
          uchar ir_n,irnm,irn,i,j;

          while(ir_0 );
          delay10us(240);
       if(ir_1 )                                       //延时2.4ms后如果是高电平则是新码          
        {
           delay10us(200);
          for(i=0;i<4;i++)
          {
		    
            for(j=0;j<8;j++)
            {
                   while(ir_0 );                               //等待地址码第1位高电平到来       
                   delay10us(84);                                 //延时882us判断此时引脚电平      
                   if(ir_0 )
                   { 
				        
             date[i]>>=1;
             date[i]=date[i]|0x00;     
                   }
            else if(ir_1 )
             {			 
             delay10us(100);
             date[i]>>=1;
             date[i]=date[i]|0x80;
             }
            }                                            //1位数据接收结束     
          }                                               //32位二进制码接收结束     
       } 
	     irn=~date[3];
//--------------------------------------
	     if(date[2]==irn)
          {		     
           ir_n=date[2];         
           if(ir_n==0x0F){irnm=10;}
		   else if(ir_n==0x14){irnm=9;}	
		    else irnm=0;	
		   if(ir_n==0x56){irnm=17;date[2]=0;}	      
           if(ir_n==0x1b){irnm=6;date[2]=0;}
           if(ir_n==0x11){irnm=7;date[2]=0;}
           if(ir_n==0x15){irnm=8;date[2]=0;}
           if(ir_n==0x17){irnm=11;date[2]=0;}
           if(ir_n==0x1E){irnm=12;date[2]=0;}
           if(ir_n==0x5B){irnm=13;date[2]=0;}
		  return irnm;
	      }
         else  return 0;
//---------------------------------------
}

/*------------------------外部中断0程序-------------------------*/
/*------------------主要用于处理红外遥控键值--------------------*/

SIG_INTERRUPT0(void) 
{ 
           uchar i;  uchar  k=0;      //红外解码判断标志位,为0则为有效信号,为1则为无效
  
          
           cli();                           //检测到有效信号关中断,防止干扰 
		  ir_in; 
		  ir_on;    
           for(i=0;i<4;i++)
           { 
             delay10us(100);
             if(ir_1 ){k=1;}                           //刚开始为9ms的引导码.     
           }
          
           if(k==0)
           {  
                                     //检测到有效信号关中断,防止干扰        
           ike=IR_decode();                                  //如果接收到的是有效信号,则调用解码程序         
           delay10us(240);
           delay10us(240);
           delay10us(240); 
		   delay10ms(7);       
           }
          

	      sei();  //开外部中断,允许新的遥控按键    
//--------------------------------------------- 
}

⌨️ 快捷键说明

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