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

📄 034_红外遥控器按键识别.c

📁 这个代码是关于红外遥控器按键识别
💻 C
字号:
//|******************************************|
//|      AT89S52,fosc=22.1184MHz             |
//|      Author: Sun An-Qing                 |
//|      Date:   2005/11/22                  |
//|      www.supermcu.com                    |
//|      glsaq@sina.com.cn                   |
//|      版权所有,供学习使用,请勿商业用途  |
//|******************************************|

//|******************************************|
//|      SP_Lab_011:红外遥控器               |
//|                 (C51)                    |
//|******************************************|

//|******************************************|
//|红外遥控器信号通过P3.2口接收,由INT0的中断|
//|完成信号接收与处理,定时器T0产生精确定时,|
//|通过P3.6口给出红外遥控器解码成功提示信号。|
//|******************************************|

#include <REGX51.H>

/***********************/
//---fosc=22.1184MHz---//
#define DLY_882US 1626
#define DLY_1000US 1843
#define DLY_4740US 8737
/***********************/

sbit Infrare=P3^2;
sbit SPK=P3^7;

unsigned char BufferCount;
unsigned char Buffer[2];

void main(void)
{
  IT0=1;
  EX0=1;
  EA=1;

  TMOD=0x01;

  while(1);
}

void int0(void) interrupt 0
{
  unsigned char i,j;
  unsigned char temp;

  EX0=0;

  for(i=5;i>0;i--)
    {
      TH0=(65536-DLY_882US)/256;
      TL0=(65536-DLY_882US)%256;
      TF0=0;
      TR0=1;
      while(TF0==0);
      TF0=0;
      TR0=0;
      if(Infrare==1)goto Exit_Int0;
    }

  while(Infrare==0);
  TH0=(65536-DLY_4740US)/256;
  TL0=(65536-DLY_4740US)%256;
  TF0=0;
  TR0=1;
  while(TF0==0);
  TF0=0;
  TR0=0;
  
  for(i=16;i>0;i--)
    {
      while(Infrare==0);
      TH0=(65536-DLY_882US)/256;
      TL0=(65536-DLY_882US)%256;
      TF0=0;
      TR0=1;
      while(TF0==0);
      TF0=0;
      TR0=0;
      if(Infrare==1)
        {
          TH0=(65536-DLY_1000US)/256;
          TL0=(65536-DLY_1000US)%256;
          TF0=0;
          TR0=1;
          while(TF0==0);
          TF0=0;
          TR0=0;
        }
    }
  
  BufferCount=0;  
  for(j=2;j>0;j--)
    {
      temp=0;
      for(i=8;i>0;i--)
        {
          temp>>=1;
          while(Infrare==0);
          TH0=(65536-DLY_882US)/256;
          TL0=(65536-DLY_882US)%256;
          TF0=0;
          TR0=1;
          while(TF0==0);
          TF0=0;
          TR0=0;
          if(Infrare==1)temp+=0x80;
          if(Infrare==1)
            {
              TH0=(65536-DLY_1000US)/256;
              TL0=(65536-DLY_1000US)%256;
              TF0=0;
              TR0=1;
              while(TF0==0);
              TF0=0;
              TR0=0;
            }
        }
      Buffer[BufferCount]=temp;
      BufferCount++;
    }

  if(Buffer[0]==~Buffer[1])
    {
      P0=Buffer[1];
      SPK=0;
      for(i=3;i>0;i--)
        {
          TH0=(65536-DLY_4740US)/256;
          TL0=(65536-DLY_4740US)%256;
          TF0=0;
          TR0=1;
          while(TF0==0);
          TF0=0;
          TR0=0;
        }
      SPK=1;
    }

Exit_Int0:
  EX0=1;
}

⌨️ 快捷键说明

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