51单片机实现红外线编码检测

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机实现红外编码检测

通过51 单片机及外围电路实现对接受信号的处理(通过外部中断和计数器)获得信号的01编码,设备显示。

红外传感基础知识:

❖红外发光管:红外发光二极管通常使用砷化镓(GaAs)、砷铝化镓(GaAlAs)等材料,采用全透明或浅蓝色、黑色的树脂封装。

产生的光波波长为940nm左右,为红外光

❖红外接收头:左图为一常用的红外接收模块。其内部含有高频的滤波电路,专门用来滤除红外线合成信号的载波信号(38KH),并送出接收到的信号。当红外线合成信号进入红外接收模块,在其输出端便可以得到原先发射器

发出的数字编码,只要经过单片机解码程序进行解码,便可以

得知按下了哪一个按键,而做出相应的控制处理,完成红外遥

控的动作。

❖红外发送协议:引导码+客户码1+客户码2+操作码

+操作反码

***用户真正须要的只有操作码***

❖调制:“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率(因红外接收头能接收的红外线为38KHz 左右),还可达到降低电源功耗的

目的。

主要内容:

通过51 单片机及外围电路实现对接受信号的处理(通过外部中断和计数器)获得信号的01编码,用设备显示,(lcd或数码管);这里管脚的对应P3.2接受红外对管信息,lcd接线:

主程序:

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include

sbit IR=P3^2; //红外接口标志

/*------------------------------------------------

全局变量声明

------------------------------------------------*/

unsigned char irtime;//红外用全局变量

bit irpro_ok,irok;

unsigned char IRcord[4];

unsigned char irdata[33];

/*------------------------------------------------

函数声明

------------------------------------------------*/

void Ircordpro(void);

/*------------------------------------------------

定时器0中断处理

------------------------------------------------*/

void tim0_isr (void) interrupt 1 using 1

{

irtime++; //用于计数2个下降沿之间的时间

}

/*------------------------------------------------

外部中断0中断处理

------------------------------------------------*/

void EX0_ISR (void) interrupt 0 //外部中断0服务函数

{

static unsigned char i; //接收红外信号处理

static bit startflag; //是否开始处理标志位

if(startflag)

{

if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms

i=0;

irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1

irtime=0;

i++;

if(i==33)

{

irok=1;

i=0;

}

}

else

{

irtime=0;

startflag=1;

}

}

/*------------------------------------------------

定时器0初始化

------------------------------------------------*/

void TIM0init(void)//定时器0初始化

{

TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值

TH0=0x00; //重载值

TL0=0x00; //初始化值

ET0=1; //开中断

TR0=1;

}

/*------------------------------------------------

外部中断0初始化

------------------------------------------------*/

void EX0init(void)

{

IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2)

EX0 = 1; //使能外部中断

EA = 1; //开总中断

}

/*------------------------------------------------

红外码值处理

------------------------------------------------*/

void Ircordpro(void)//红外码值处理函数

{

unsigned char i, j, k;

相关文档
最新文档