📄 红外遥控接收.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 + -