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

📄 红外遥控接收.c

📁 这些是自己大学里认为非常宝贵的AVR程序
💻 C
字号:
/*****************************************************************************
程 序 名:51AVR实验板配套程序 - TC9012红外接收显示程序
开发环境:Keil
编 写 者:www.01mcu.net
功能简述:接收TC9012红外线发射信号,将收到的数据以HEX方式显示到数码管上
硬件说明:红外接收输出脚已经接到INT0(P3.2)上了,直接使用就是了
          晶体为12MHz
其它说明:关于TC9012详情,请参阅实验目录下的器件手册
完成日期:2008.06.23
参考资料:

TC-9012型遥控器实测数据
key     code (hex)
 1       0x00
 2       0x01
 3       0x02
 4       0x03
 5       0x04
 6       0x05
 7       0x06
 8       0x07
 9       0x08
 0       0x09
--/-     0x0a

频道+  0x10
频道-  0x11
音量+  0x12(对于RM-F2型万能遥控器的“快搜”键相当于“音量+”)
音量-  0x13
POWER    0x14
MUTE     0x15
菜单   0x17
睡眠   0x18

往复   0x1a

******************************************************************************/

#include <reg51.h>

unsigned char rdata=0x00;

sbit remin=P3^2;
sbit ls1=P0^2;     //个位公共极
sbit ls2=P0^3;     //十位公共极

#define Out P1     //数据输出端

unsigned char tab[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xa0,0x83,0xa7,0xa1,0x84,0x8e}; //共阳
//0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f

//延时----------------------------
Delay(unsigned int t)
{
 while(t--);
}
//显示----------------------------
void Display(unsigned char mun)
{
 unsigned char i1,i2,j;
 i1=(mun & 0xf0)>>4;   //提取高位
 i2=mun & 0x0f;

 for(j=0;j<50;j++)
  {
     Out=tab[i2];
     ls1=0;
     Delay(100);
     ls1=1;

     Out=tab[i1];
     ls2=0;
     Delay(100);
     ls2=1;
  }
}

//--主程序---------------------------------------------------------
main()
{
 EA=EX0=1;
 while(1)
 {
  Display(rdata);
 }
}
//----TC9012遥控芯片解码程序----------------------------------------
//关于以下程序原理,请先阅读TC9012芯片的编码规则
REM()interrupt 0 using 1
{
 unsigned int x;
 unsigned char a,b,c,remdata1[4];
 for(x=0;!remin&&x<0x180;x++);             //引导码
 if(x<0x100||x>0x160) goto remout;
 for(x=0;remin&&x<0x180;x++);
 if(x<0x100||x>0x160) goto remout;
 TF0=TH0=TL0=a=b=c=0,TMOD|=1,TR0=1;
 do
  {while(b<8)
   {while(!TF0&&!remin);if(TF0)goto remout;
    while(remin);if(TF0)goto remout;
    a>>=1;if(TH0>6)a|=0x80;TH0=TL0=0;b++;
   }b=0;remdata1[c]=a;a=0;
  }
 while(c++<3);                           // 地址吗效验
 if(remdata1[0]==remdata1[1]){if(remdata1[2]==~remdata1[3])rdata=remdata1[2];}//      指令校验
 remout:
 ;
}

⌨️ 快捷键说明

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