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

📄 ir.h

📁 无线遥控器的源代码
💻 H
字号:
unsigned char ir_rx_complete_flag=0;
unsigned char bitcnt=0;
unsigned char user_code=0;
unsigned char operate_code=0;
unsigned char codebegin;
unsigned int  ir_num;

void spk(void)
{
 PORTD&=~BIT(PD7);
 delay_ms(100);
 PORTD|=BIT(PD7);
}

#pragma interrupt_handler timer1_capt_isr:iv_TIM1_CAPT
void timer1_capt_isr(void)
{
 //timer 1 input capture event, read (int)value in ICR1 using;
 // value=ICR1L;            //Read low byte first (important)
 // value|=(int)ICR1H << 8; //Read high byte and shift into top byte
 static unsigned int oldFall;
 unsigned int temp,newFall;
 newFall=ICR1;
 temp=newFall-oldFall; //计算脉冲加间隔的时间
 oldFall=newFall;
 if(temp>100&&temp<1500) //判断数据0信号
 {
  temp=0;
  bitcnt++;
  if(bitcnt<16)//开始接收前16位 
   user_code<<=1;
  else if(bitcnt<32)//开始接收后16位 
   operate_code<<=1;
  else if(bitcnt==32)//接收完最后一位
  {
   ir_rx_complete_flag=1;
   bitcnt=40;
  }//接收完最后一位
 }
 else if(temp>1500&&temp<4000)//判断数据1信号
 {
  temp=1;
  bitcnt++;
  if(bitcnt<16) //开始接收前16位
  {
   user_code++;
   user_code<<=1;
  }
  else if(bitcnt==16)
   user_code++;
  else if(bitcnt<32) //开始接收后16位
  {
   operate_code++;
   operate_code<<=1;
  }
  else if(bitcnt>=32)
  {
   operate_code++;
   ir_rx_complete_flag=1;//接收完最后一位
   bitcnt=40; 
   return;
  }
 }
 else if(temp>10000&&temp<15000) //判断引导码信号,返回,等待下次开始接收
 {
  codebegin=1;
  bitcnt=0;
  user_code=0;
  operate_code=0;
 }
}

void get_ir_code(void)
{
 if(ir_rx_complete_flag==1)
 {
  if((codebegin==1)&&(bitcnt==40))
  {
   switch(operate_code)
   {
	case 0x04:  ir_num=0;break;//0
	case 0x84:  ir_num=1;break;//1
	case 0x44:  ir_num=2;break;//2
	case 0xc4:  ir_num=3;break;//3
	case 0x24:  ir_num=4;break;//4
	case 0xa4:  ir_num=5;break;//5
	case 0x64:  ir_num=6;break;//6
	case 0xe4:  ir_num=7;break;//7
	case 0x14:  ir_num=8;break;//8
	case 0x94:  ir_num=9;break;//9
	case 0xe8:  ir_num=10;break;//取消
	case 0x49:  ir_num=11;break;//确认
	case 0x78:  ir_num=12;break;//左
	case 0x98:  ir_num=13;break;//右
	case 0xf8:  ir_num=14;break;//前
	case 0x18:  ir_num=15;break;//后
	case 0x2d:  ir_num=16;break;
	case 0xc8:  ir_num=17;break;
	case 0x20:  ir_num=18;break;
	case 0xc0:  ir_num=19;break;
	case 0x3e:  ir_num=20;break;
	case 0x89:  ir_num=21;break;
	case 0xda:  ir_num=22;break;
	case 0x5a:  ir_num=23;break;
	case 0xde:  ir_num=24;break;
	case 0x9e:  ir_num=25;break;
	case 0xb9:  ir_num=26;break;
	case 0x38:  ir_num=27;break;
	default:  break;
   }
   LCD_write_data(10,0,operate_code);
   if(ir_num<28)
   {
    codebegin=0;
	spk();
   }
   ir_rx_complete_flag=0;
   bitcnt=0;
   operate_code=0;
   user_code=0;	   
  }
 }
}

⌨️ 快捷键说明

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