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

📄 shan.c

📁 通过红外遥控器
💻 C
字号:
#include <pic.h>


/***********************/
//---fosc=4MHz---//
#define DLY_882US 110     //0.88ms
#define DLY_1000US 128
#define DLY_4740US 607
/***********************/

unsigned char BufferCount;
unsigned char Buffer[2];



#define INFRARED RB0//红外线接口定义
#define SPEAKER  RC1//蜂鸣器接口定义

char i;
char j;
char k;

void shan()
{ for(i=0;;i++)  
  { TMR1H=(65536-65535)/256;  
    TMR1L=(65536-65535)%256;
    TMR1IF=0;
    TMR1ON=1;
    while(TMR1IF==0);
    TMR1ON=0;
    TMR1IF=0; 
    PORTD=~PORTD;
   }


}



void main(void)
{
  TRISD=0;
  PORTD=0xFF;
  TRISC0=0;
  SPEAKER=1;
  TRISB0=1;
  RB0=1;
  
  T1OSCEN=0;//禁止自带振荡器功能
  TMR1CS=0;//选择内部时钟源(FOSC/4),工作于定时方式
  T1CKPS1=1;//预分频比为1:8
  T1CKPS0=1;
  TMR1IF=0;
  
  RBPU=0;//启RB内部若上拉功能
  INTEDG=0;//选择下降沿触发
  INTF=0;
  INTE=1;//允许INT开中断
  GIE=1;//允许CPU开中断

  
  
  
 while(1);
}


void interrupt Infrared_isr(void)
{
  unsigned char i,j;
  unsigned char temp;
  
  GIE=0;
  if(INTF==1)
    {      
      INTF=0;
      INTE=0;
      

      
          TMR1H=(65536-1120)/256;
          TMR1L=(65536-1120)%256;  //0.904ms
          TMR1IF=0;
          TMR1ON=1;
          while(TMR1IF==0);
          TMR1ON=0;
          TMR1IF=0;          
          if(INFRARED==1)goto Exit_Int0;
      
     
 

     while(INFRARED==0);

     TMR1H=(65536-630)/256;  //5ms
     TMR1L=(65536-630)%256;
     TMR1IF=0;
     TMR1ON=1;
     while(TMR1IF==0);
     TMR1ON=0;
     TMR1IF=0;              //跳过将近5ms的低电平

     while(INFRARED==0);    //把用户吗的第一个低电平浪费掉
 
     TMR1H=(65536-12)/256;  //进入用户码的第一个高电平一点点
     TMR1L=(65536-12)%256;
     TMR1IF=0;
     TMR1ON=1;
     while(TMR1IF==0);
     TMR1ON=0;
     TMR1IF=0; 

     for(j=0;j<26;j++)       //跳过26位用户码
       {

        while(INFRARED==0);
        while(INFRARED==1);
       }
      

     TMR1H=(65536-12)/256;  //进入下一个高电平一点点
     TMR1L=(65536-12)%256;
     TMR1IF=0;
     TMR1ON=1;
     while(TMR1IF==0);
     TMR1ON=0;
     TMR1IF=0;  
    

    BufferCount=0;                      //解用户码控制码前八位
                              
          temp=0;
          for(i=0;i<8;i++)                   
            { 
              temp>>=1;
              while(INFRARED==0);
              TMR1H=(65536-DLY_882US)/256;
              TMR1L=(65536-DLY_882US)%256;
              TMR1IF=0;
              TMR1ON=1;
              while(TMR1IF==0);
              TMR1IF=0;
              TMR1ON=0;
              if(INFRARED==1)temp+=0x80;
              if(INFRARED==1)
                {

                  TMR1H=(65536-DLY_1000US)/256;
                  TMR1L=(65536-DLY_1000US)%256;
                  TMR1IF=0;
                  TMR1ON=1;
                  while(TMR1IF==0);
                  TMR1IF=0;
                  TMR1ON=0;
                }
            
       
        }
          
     
         if(temp==0b00000001)

          shan();
        
 Exit_Int0:
      INTF=0;
      INTE=1;      
    }
  GIE=1;
}

⌨️ 快捷键说明

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