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

📄 remodecode.c

📁 一个采用单片机的外部中断0口实现的红外遥控解码程序 可对大部分的遥控器进行解码 而只需要对其进行一些小的改动即可 采用的是avr的atmega16的单片机
💻 C
字号:
#include <RemoKey.h>
#include<define.h>
#include <iom16.h>

unsigned char RemoFlag;
unsigned char RemoCount;
unsigned char RemoCmd;
unsigned char RemoSuccess;
unsigned char RemoData[3];

extern void NmDelay(unsigned int);
extern void Uart_Send_Byte(unsigned char c);
extern void WDT_On(void);
extern void WDT_Off(void);
#pragma vector=INT0_vect
__interrupt void RemoDecode(void)
{
 unsigned char temp; 
 temp=TCNT0;
 //Uart_Send_Byte(temp);
 TCNT0=0;
 TCCR0=CLK_1024;
 if(RemoFlag==0)
 {
  RemoFlag=1;
  RemoData[0]=0;
  RemoData[1]=0;
  RemoData[2]=0; 
  return;
 }
 if(RemoFlag==1)
 { 
  if(temp<Time4_5_Big&&temp>Time4_5_Small)
  {  
   RemoFlag=2;   
   return;
  }
 }
 if(RemoFlag>=2&&RemoFlag<=4)
   {     
      RemoCount++;     
      RemoData[RemoFlag-2]>>=1; 
     if(temp<Time1_7_Big&&temp>Time1_7_Small)
       RemoData[RemoFlag-2]|=0x80;
     else if(temp<Time0_6_Big&&temp>Time0_6_Small)
       RemoData[RemoFlag-2]&=0x7f;
       if(RemoCount>=8)
       {         
        RemoFlag++;
        RemoCount=0;
       }     
   }
     if(RemoFlag==5)
     {      
      //Uart_Send_Byte(RemoData[0]);     
      //Uart_Send_Byte(RemoData[1]);         
      if(RemoData[0]==RemoCustom0&&RemoData[1]==RemoCustom1)
      {
       INT0_Disable;
       RemoSuccess=1;
       RemoCmd=RemoData[2];
       Uart_Send_Byte(RemoCmd);       
       NmDelay(10);
       RemoData[0]=0;
       RemoData[1]=0;
       RemoData[2]=0;
       RemoFlag=0;       
       RemoCount=0;
      }
      else RemoFlag=0;
     }  
}

#pragma vector=TIMER0_OVF_vect
__interrupt void Timer0_Over(void)
{
  TCCR0=CLK_STOP;
  INT0_Enable;
  TCNT0=0;
  RemoData[0]=0;
  RemoData[1]=0;
  RemoData[2]=0;
  //Uart_Send_Byte(0x88);
}

void Remo_ProT1(void)
{
 switch(RemoCmd)
 {
  case    UP: ICR1+=10; if(ICR1>=350)  ICR1=350; break;
  case  DOWN: ICR1-=10; if(ICR1<=100)  ICR1=100; break;
  case RIGHT: OCR1A+=10; if(OCR1A>=90) OCR1A=90; break;
  case  LEFT: OCR1A-=10; if(OCR1A<=10) OCR1A=10; break;
  default:break;
 }
}

void Remo_ProT0(void)
{
 switch(RemoCmd)
 {
  case     UP: OCR0+=10; if(OCR0>=240) OCR0=240; break;
  case   DOWN: OCR0-=10; if(OCR0<=10)  OCR0=10;   break;   
  default:break;
 }
}
void Remo_ProWDT(void)
{
 switch(RemoCmd)
 {
  case     UP: OCR0+=10;Uart_Send_Byte(0x44); if(OCR0>=240) OCR0=240;Uart_Send_Byte(0x66); break;
  //case   DOWN: while(1); break;  
  case   LEFT: WDT_On() ;Uart_Send_Byte(0x56);break;
  case  RIGHT: WDT_Off();Uart_Send_Byte(0x46);break;
  default:break;
 }
}

⌨️ 快捷键说明

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