红外线遥控系统原理及软件解码实例
红外遥控解码实验报告(3篇)

第1篇一、实验目的本次实验旨在通过搭建红外遥控系统,了解红外遥控的基本原理,掌握红外遥控信号的编码和解码方法,并利用单片机实现对红外遥控信号的解码,实现对红外遥控器的控制。
二、实验原理红外遥控技术是一种无线通信技术,通过发射端发送特定编码的红外信号,接收端接收该信号并进行解码,从而实现对电器的控制。
红外遥控系统主要由发射端和接收端两部分组成。
1. 发射端:由按键矩阵、编码调制电路和红外发射器组成。
按键矩阵根据按键的不同产生不同的编码信号,编码调制电路将这些信号调制在38kHz的载波上,红外发射器将调制后的信号发射出去。
2. 接收端:由红外接收器、前置放大电路、解调电路和指令信号检出电路组成。
红外接收器接收发射端发射的红外信号,前置放大电路对信号进行放大,解调电路将38kHz的载波信号去除,指令信号检出电路从解调后的信号中提取出指令信号。
三、实验设备1. 红外遥控发射器2. 红外接收模块3. 单片机开发板4. 连接线5. 电源6. 红外遥控解码程序四、实验步骤1. 搭建红外遥控系统:将红外接收模块连接到单片机开发板的相应引脚上,确保连接正确无误。
2. 编写红外遥控解码程序:根据红外遥控协议,编写解码程序,实现对红外信号的解码。
3. 程序烧录与调试:将解码程序烧录到单片机中,连接电源,进行程序调试。
4. 测试与验证:使用红外遥控器对单片机进行控制,观察单片机是否能够正确解码红外信号,并实现相应的控制功能。
五、实验结果与分析1. 红外遥控系统搭建成功:通过连接红外接收模块和单片机开发板,成功搭建了红外遥控系统。
2. 解码程序编写与调试:根据红外遥控协议,编写解码程序,实现对红外信号的解码。
在调试过程中,通过观察单片机的输出,验证了程序的正确性。
3. 测试与验证:使用红外遥控器对单片机进行控制,观察单片机是否能够正确解码红外信号,并实现相应的控制功能。
实验结果表明,单片机能够成功解码红外信号,并实现红外遥控器的控制功能。
第13章 红外遥控器的解码

图13-4 发射器改进电路
Page 7
机械工业出版社
2012-2-16
13.1.4 接收器
图13-5 红外接收器模块图
图13-5所示为一个典型的红外接收器模块图。红外信号 由接收器的检波二极管接收,信号通过放大和限幅2个 环节处理。限幅模块如同一个AGC(自动增益控制电 路),使信号有稳定的脉冲电平,因而可以忽略由于遥 控距离不同接收信号强弱引起的问题。
图13-9 HT6221 PPM编码格式
Page 14
机械工业出版社
送一个码,HT6221 会先送出一个 9ms 的头码和 的头码和4.5ms的间隙,然后依次送出 位 的间隙, 的间隙 然后依次送出16位 的地址码( )、8 的地址码(18ms~36ms)、 位数据码( )、 位数据码( 9ms~18ms)和8 位数据反码,如下图 位数据反码,如下图13-10所示 ) 所示 。
当一个键按下超过36ms,振荡器就使芯片激 , 当一个键按下超过 如果这个键按下且延迟大约108ms,这 活,如果这个键按下且延迟大约 这 108ms 发射代码由一个起始码 发射代码由一个起始码9ms ,一个结果 一个结果 码4.5ms ,低 8 位地址码9ms~18ms ,高 8 位地址 低 位地址码 高 位数据码9ms~18ms 和这 8 位 码9ms~18ms ,8 位数据码 组成。 数据的反码 9ms~18ms 组成。如果键按下超过 108ms 仍未松开,接下来发射的代码为连发代 仍未松开, 也就是仅由起始码9ms和结束码 和结束码2.5ms组 码,也就是仅由起始码 和结束码 组 成的代码。 成的代码。
Page 8
机械工业出版社
2012-2-16
红外遥控器软件解码及其应用

红外遥控器软件解码及其应用随着现代科技的不断发展,红外遥控器已经成为人们日常生活中的必备工具之一。
不过,很多人并不了解红外遥控器的工作原理以及它是如何通过软件解码来实现遥控效果的。
本文将详细介绍红外遥控器软件解码的相关知识,以及其在实际应用中的作用。
一、红外遥控器的工作原理首先,我们需要了解红外遥控器的工作原理。
简单来说,红外遥控器是一种利用红外线光谱来传输指令的设备,通过在发射端发送编码的红外信号,再在接收端解码后执行相应的指令。
通常,红外遥控器由发射部分与接收部分两个部分组成。
发射部分由红外LED发射器构成,它会通过红外发射现象来发送编码的红外信号。
在接收端,红外接收器则会接收到这些信号,并将其转换成电信号进行解码。
之后,解码器会解析出信号的编码含义,然后执行相应的指令。
这就是红外遥控器的基本工作原理。
二、红外遥控器软件解码的实现在红外遥控器的工作中,软件解码起到了重要的作用。
所谓软件解码,就是在终端设备中运行的一种程序,能够将遥控器发射的红外编码转换成可读的指令。
而这些指令就可以用于控制各种家电、设备等。
软件解码的实现主要有两种方式。
第一种是使用硬件解码器,这需要在终端设备上安装一个专门的硬件解码器,用于解析红外信号,并输出相应的指令。
第二种方法则是使用软件解码器,这需要在终端设备上安装一个软件程序,用于解析红外信号并输出指令。
在软件解码的实现中,最常见的是使用赛贝尔红外编解码库。
这个库已经成为了广泛使用的一种红外编解码方案。
它可以用于各种嵌入式设备、物联网设备、手机、电视机顶盒等多种应用场景中。
三、红外遥控器软件解码的应用目前,红外遥控器软件解码已广泛应用于各种智能家居、物联网设备、工控设备等领域。
下面列举一些具体的应用案例:1、智能家居:通过使用红外遥控器软件解码,可以实现对家中的各种电器、设备的遥控控制。
如电视、空调、照明设备等。
2、物联网设备:红外遥控器软件解码还可以用于物联网设备中,如智能家居中的智能门锁、智能家电等。
电路工作原理揭秘遥控器的红外发射与信号解码

电路工作原理揭秘遥控器的红外发射与信号解码红外发射技术是现代电子产品中常见的一种通信方式,广泛应用于各种遥控器中。
它的工作原理是通过红外光发射器将信号转换成红外光信号,然后通过红外接收器接收并解码,实现远程控制设备的操作。
本文将揭秘遥控器的红外发射与信号解码的工作原理及其应用。
一、红外发射器的工作原理红外发射器是遥控器中的核心部件,它能将电信号转换成红外光信号,并通过空气传输到接收器。
红外发射器工作原理如下:1.1 发光二极管红外发射器通常采用发光二极管(Light Emitting Diode,简称LED)进行红外光的发射。
LED是一种能够发出可见光和红外光的二极管,当通电时,LED会发出特定频率的光信号。
1.2 调制技术为了确保遥控器发出的红外信号能够被接收器正确解码,通常会采用调制技术。
调制技术是通过改变信号的频率、幅度或脉冲来表示信息,常见的调制方式有脉冲宽度调制(PWM)和脉冲位置调制(PPM)。
1.3 码型遥控器发射的红外信号通常是经过编码的,不同的信号对应不同的功能。
常见的红外码型有NEC码、RC-5码、RC-6码等,不同的遥控器使用不同的码型。
二、红外信号解码技术接收器是红外发射信号的接收和解码装置,它能将接收到的红外信号转换成电信号,并进行解码还原为原始信号,从而控制相应的设备。
红外信号解码技术主要包括以下几个方面:2.1 红外接收器红外接收器是用于接收红外信号的装置,它通常由红外接收模块和解码电路组成。
红外接收模块能够接收并转换传输过来的红外光信号,解码电路则负责解析接收到的信号。
2.2 滤波和放大由于环境中存在多种光源,为了确保只接收到有效的红外信号,红外接收器通常会设置滤波器来屏蔽其他频率的光信号。
同时,接收到的红外信号经过放大,以增强信号的强度和稳定性。
2.3 解码和译码接收到的红外信号经过解码电路的处理,通过特定的解码算法还原为原始信号,这样就可以实现对设备的控制。
解码算法通常根据不同的码型进行设计,以确保正确地解析红外信号。
红外线遥控编码解码控制

红外遥控具有结构简单,制作方便,成本低廉,抗干扰能力强,工作可靠性高等一系列优点。
同时,由于红外遥控器件,工作电压低,功耗小,外围电路简单,因此,在日常生活中广泛应用,如彩电,录像机,音响空调,风扇,即其它的小型电器上。
遥控距离在几米到十几米。
波长在0.76um~1000um的光波为红外光(线),红外光为不可见光。
红外光按波长范围分为近红外、中红外、远红外、极红外4类。
红外线遥控是利用近红外光传送遥控指令的,波长为0.76um~1.5um。
用近红外作为遥控光源,是因为目前红外发射器件(红外发光管)与红外接收器件(光敏二极管、三极管及光电池)的发光与受光峰值波长一般为0.8um~0.94um,在近红外光波段内,二者的光谱正好重合,能够很好地匹配,可以获得较高的传输效率及较高的可靠性。
一、红外遥控系统的构成:主要由两大部分构成: 红外编码发射部分,红外解码接收部分。
红外发射部分主要由,键盘,红外编码芯片(sc6122/ht6122),电源,红外发射管组成。
红外解码部分:由红外接收电路、红外解码、电源和应用电路组成。
红外遥控接收器的主要作用是将遥控发射器发来的红外光信好转换成电信号,再放大、限幅、检波、整形,形成遥控指令脉冲,输出至遥控微处理器。
其中红外接收电路主要是接收部分的红外接收管是一种光敏二极管(现在常用一体化红外接收头)。
三、红外遥控的编码与解码常用的编码芯片HT6122,遥控器的按键信息由编码芯片编码后,以38KHZ的载频,经红外发射管,向外发射。
有引导码,16为用户编码,按键编码,按键反码构成。
引导码:引导码,也称引导脉冲,一般由高电平1和低电平0的脉冲组成,高电平9ms,低电平4.5ms用来标志遥控编码脉冲信号的开始,使遥控接收器能由此判断出所接收的信号是干扰还是系统的遥控代码。
用户码:通常由8位原码和8位反码组成。
它用来指示遥控系统的种类,以区别其它遥控系统,防止各遥控系统的误动作。
红外解码程序

红外解码程序本篇介绍红外解码的原理和程序的写法。
下面来看一下,红外线是如何编码的。
下面来具体说一下,解码的原理,每按一下遥控器的一个按键,遥控器就会发出32个“0”“1”代码(当然是通过高低电平的占空比来判断是0还是1的),具体是0,1是如何编码的上面图片中有介绍,和一个引导码,引导码的作用是告诉处理器,接下来将要开始发送代码,我们在编写程序时,当检测到引导码时,就应该准备接受数据了。
32位代码中的前16位是用户识别码,不同的遥控器不相同,防止互相干扰的,后16是8为数据码,和8位数据反码。
接下来开始介绍如何解码程序的编写。
程序中用到了两个中断,一个是定时器中断,一个是外部中断。
定时器中断用来准确计时,判断接受的代码是0还是1,外部中断用来准确确定定电平到来的时刻,然后开始计时。
/*********************************************************函数功能:红外解码,用八位数码管显示红外线的按键码,便于红外控制测试环境:hot 51学习板编译环境:keil4整理人:张家越QQ:435835181整理时间:2011-04-03************************************************************/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code seg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0 x6f,0x77,0x7c,0x39,0x5E,0x79,0x71 };//0-f的段选码unsigned char code seg_we[]={0,1,2,3,4,5,6,7};uchar irtime,startflag,bitnum,irreceok;uchar irdata[33];uchar irprosok;uchar display[8];uchar ircode[8] ;sbit led1=P0^1;sbit led2=P0^2;/******************************************************************** ****函数功能:延时函数,在数码管显示时使用,不需要很精确********************************************************************* ****/void delay_50us(uint t){uchar j;for(;t>0;t--)for(j=19;j>0;j--);}/******************************************************************** ******函数的功能:定时器0的初始化********************************************************************* *****/void timer0init(){TMOD=0x02; //设置定时器工作在方式2TH0=0x00; //TL0=0x00; //设置定时器的初值ET0=1; //开定时器中断TR0=1; // 打开定时器EA=1; //开总中断}/******************************************************************** ****外部中断1的初始化********************************************************************* **/void int1init(){IT1=1; //设置触发方式为上升沿EX1=1; //开外部中断1EA=1; //开总中断}/******************************************************************** **定时器0的功能函数,每中断一次irtime++,用于计时********************************************************************* **/void timer0() interrupt 1{irtime++; //定时器中断一次irtime++,用于计时}/******************************************************************** ***外部中断0的处理函数,每当有低电平数据过来时,中断一次,(使用次中断的前提是,信号线必需接在外部中断0上面,也就是P3^2口),函数功能是,把信号从高低电平变成时间的代码放入irdata【】中********************************************************************* ***/void int1() interrupt 2{if(startflag){if(irtime>32) //一组代码检测完毕{bitnum=0;}irdata[bitnum]=irtime; //把检测到的时间送到数组irdata【】中去irtime=0;bitnum++;if(bitnum==33) //如果检测到bitnum=33,说明32位用户码已经检测完毕{bitnum=0; //将bitnum清零以便重新计数irreceok=1; //接收完毕标志位置一}}else //(此函数先进入else语句,跳过引导码的检测){startflag=1; //将开始标志位置一irtime=0; //设置时间初值为零irreceok=1; //接收完毕标志位置一}}/******************************************************************** *****函数功能:把irdata【】中的时间代码转换成二进制代码存放在ircode【】中********************************************************************* *****/void irpros(){uchar k=1,value,j,i;for(j=0;j<4;j++){for(i=0;i<8;i++){value=value>>1; //右移7次(第一次是00,相当于没有移位)if(irdata[k]>6) //循环8次{value=value|0x80;}k++;}ircode[j]=value;}irprosok=1;}/******************************************************************** ********函数的功能是:将ircode【】中的二进制代码转换成为16进制代码便于在数码管上显示******************************************************************* ********/void irwork(){display[0]=ircode[0]/16;display[1]=ircode[0]%16;display[2]=ircode[1]/16;display[3]=ircode[1]%16;display[4]=ircode[2]/16;display[5]=ircode[2]%16;display[6]=ircode[3]/16;display[7]=ircode[3]%16;}/******************************************************************** ****函数功能:用数码管显示解码结果********************************************************************* ***/void display1(){uchar i;for(i=0;i<8;i++){P2=seg_we[i];P0=seg_du[display[i]];delay_50us(40);}}void main(){timer0init(); //定时器初始化int1init(); //外部中断初始化while(1){if(irreceok) //判断数据接收完毕(数组中存储的是高低电平的时间){irpros(); //执行处理函数,将高低电平时间转化成16进制的0,1代码,存放在数组中irreceok=0; //标志清零}if(irprosok) //处理函数执行完毕,{irwork(); //将存储的16进制代码分离,便于数码管显示irprosok=0; //标志清零}display1();}}//在最后我再分析一下程序的编写思路,便于大家理解,一旦有按键按下,接受管接收到引导码,进入外部中断,并将高低电平的时间放入irdata【】数组中,接受完毕标志位置一,判断接受标志位,为1,进行处理函数,将高低电平转换成16进制数,处理标志位置一,判断处理标志位,为1,执行分离函数,将16进制数分离,便于数码管显示,分离完毕后显示。
红外调制与解调原理

4 功能模块设计4.1 红外的发射和接收红外线波长在750nm至1um之间的电磁波,它的频率低于可见光,是一种人的眼睛看不到的光线。
红外遥控具有抗干扰能力强,信息传输可靠,功耗低,成本低,易于实现等显著优点。
红外遥控由发送和接收两部分组成,发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲信号,通过红外发射管发射红外信号。
红外接收采用性能可靠的一体化红外接收头接收红外信号,它同时对信号进行放大,检波,整形,得到TTL电平的编码信号,再送给单片机,经单片机解码并进行相关操作。
发送与接收示意图如下所示:图4 发送与接收示意图由上所述可知,遥控系统分为编码,调制,解调和解码如图5所示四大部分:图5 遥控与接收系统4.1.1 编码如图4,二进制信号中的‘1’的高低电平均等于0.26ms,相当于10个26us的宽度;二进制信号中的‘0’的低电平宽0.52ms,高电平宽0.26ms。
图6 编码示意图4.1.2 调制红外信号的调制有脉冲宽度调制(PWM),脉冲位置调制(PPM)等方法,本设计采用脉宽调制。
二进制的调制由单片机来完成,它把编码后的二进制信号调制成频率为38khz 的间断脉冲串,此脉冲串即是用于红外发射二极管发送的信号。
如图7,A是二进制信号的编码波形,B是频率为38khz(周期约为26us)的连续脉冲串,C是经调制后的间断脉冲串,即是用于发送的信号。
图7中,待发的二进制数据为101。
图7 信号调制示意图4.1.3 解调二进制信号的解调由一体化红外接收头来完成,它把接收到的信号(图8中的波形D 也是图7中的波形C)经内部处理并解调复原,输出图8中的波形E(正好是图7中A的取反)。
接收头的解调可理解为:在输入脉冲串时输出低电平,否则输出高电平。
二进制的解码由单片机来完成,它把红外接收头送来的二进制编码波形通过解码,还原成发送端发送的数据。
如图8,把波形E解码还原成数据信息101。
图8 信号解调示意图4.1.4 解码在发送字节的开始先通过单片机发送20个脉冲宽度(每个脉冲周期26us)的高电平作为传输的开始(同步帧),接着发送8位二进制数据(高位在前,低位在后),最后发送10个脉冲宽度的低电平作为传输的结束,如图9所示:图9 字节传输当接收到同步帧后,进入解码部分。
红外遥控器软件解码原理和程序

void rs232(void) interrupt 4{ static unsigned char sbuf1,sbuf2,rsbuf1,rsbuf2; //sbuf1,sbuf2 用来接收 发送临时用,rsbuf1,rsbuf2 用来分别用来存放接收发送的半字节 EA=0; //禁止中断 if(RI){ RI=0; //清除接收中断标志位 sbuf1=SBUF; //将接收缓冲的字符复制到 sbuf1 if(sbuf1==HEAD){ //判断是否帧开头 state1=10; //是则把 state 赋值为 10 buf1=RECEIVE; //初始化接收地 址 } else{
void tf_2(void); void read_ir(void); void ir_jiema(void); void ir_init(void); void ir_exit(void); void store_ir(void); void read_key(void); void reset_iic(void); unsigned char read_byte_ack_iic(void); unsigned char read_byte_nack_iic(void); bit write_byte_iic(unsigned char a); void send_ack_iic(void); void send_nack_ic(void); bit receive_ack_iic(void); void start_iic(void); void stop_iic(void); void write_key_data(unsigned char a); unsigned int read_key_data(unsigned char a); void ie0(void) interrupt 0{ie_0();} void tf0(void) interrupt 1{tf_0();} void ie1(void) interrupt 2{ie_1();} void tf1(void) interrupt 3{tf_1();tf_2();} void tf2(void) interrupt 5{ //采用中断方式跟查询方式相结合的办法解 码 EA=0; //禁止中断 if(TF2){ //判断是否是溢出还是电平变化产生的中断 TF2=0; //如果是溢出产生的中断则清除溢出位,重 新开放中断退出 EA=1; goto end; } EXF2=0; //清除电平变化产生的中断位 *ir=RCAP2H; //把捕捉的数保存起来 ir++; *ir=RCAP2L; *ir++; F0=1; TR0=1; //开启计数器 0 loop: TL0=0; //将计数器 0 重新置为零 TH0=0; while(!EXF2){ //查询等待 EXF2 变为 1 if(TF0)goto exit; //检查有没超时,如果超时则退出 };
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
红外线遥控系统原理及软件解码实例
简介:红外线遥控是目前使用最广泛的一种通信和遥控手段。
由于红外线遥控装置具有体积小、功耗低、功
关键字:红外
红外线遥控是目前使用最广泛的一种通信和遥控手段。
由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
1、红外遥控系统
通用红外遥控系统由发射和接收两大部分组成。
应用编解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、LED 红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
图1 红外线遥控系统框图
2 、遥控发射器及其编码
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、VCD、音响都使用这种编码方式)。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125 ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25 ms的组合表示二进制的“1”,其波形如图2所示。
图2 遥控码的“0”和“1” (注:所有波形为接收端的与发射相反)
上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。
然后再通过红外发射二极管产生红外线向空间发射,如图3所示。
图3 遥控信号编码波形图
UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。
该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。
U PD6121G最多额128种不同组合的编码。
遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108 ms。
一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。
图4 遥控连发信号波形
当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个引导码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8 位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。
如果键按下超过108ms仍未松开,接下来发射的代码(连发码)将仅由起始码(9ms)和结束码(2.25ms)组成。
图5 引导码图6连发码
3 、遥控信号接收
接收电路可以使用一种集红外线接收和放大于一体的一体化红外线接收器,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。
接收器对外只有3个引脚:Out、GND、Vcc与单片机接口非常方便,如图7所示。
图7
①脉冲信号输出接,直接接单片机的IO 口。
②GND接系统的地线(0V);
③Vcc接系统的电源正极(+5V);
4 遥控信号的解码
下面是一个对51实验板配套的红外线遥控器的解码程序,它可以把红外遥控器每一个按键的键值读出来,并且通过实验板上P1口的8个LED显示出来,在解码成功的同时并且能发出“嘀嘀嘀”的提示音。
ORG 0000H
MAIN
JNB P2.2,IR ;遥控扫描
LJMP MAIN ;在正常无遥控信号时,一体化红外接收头输出是高电平,程序一直在循环。
;=================================================
; 解码程序
IR
;以下对遥控信号的9000微秒的初始低电平信号的识别,波形见图5。
MOV R6,#10
IR_SB
ACALL DELAY882 ;调用882微秒延时子程序
JB P2.2,IR_ERROR ;延时882微秒后判断P2.2脚是否出现高电平如果有就退出解码程序
DJNZ R6,IR_SB ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
;识别连发码,和跳过4.5ma的高电平。
JNB P2.2, $ ;等待高电平避开9毫秒低电平引导脉冲
ACALL DELAY2400
JNB P2.2,IR_Rp ;这里为低电平,认为是连发码信号,见图6。
ACALL DELAY2400 ;延时4.74毫秒避开4.5毫秒的结果码
;以下32数据码的读取,0和1的识别请看图2
MOV R1,#1AH ;设定1AH为起始RAM区
MOV R2,#4
IR_4BYTE
MOV R3,#8
IR_8BIT
JNB P2.2,$ ;等待地址码第一位的高电平信号
LCALL DELAY882 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P2.2 ;将P2.2引脚此时的电平状态0或1存入C中
JNC IR_8BIT_0 ;如果为0就跳转到IR_8BIT_0
LCALL DELAY1000
IR_8BIT_0
MOV A,@R1 ;将R1中地址的给A
RRC A ;将C中的值0或1移入A中的最低位
MOV @R1,A ;将A中的数暂时存放在R1中
DJNZ R3,IR_8BIT ;接收地址码的高8位
INC R1 ;对R1中的值加1,换下一个RAM
DJNZ R2,IR_4BYTE ;接收完16位地址码和8位数据码和8位数据,
;存放在1AH1BH1CH1DH的RAM中
;解码成功
JMP IR_GOTO
IR_Rp
;这里为重复码执行处
;按住遥控按键时,每过108ms就到这里来
JMP IR_GOTO
IR_ERROR
;错语退出
LJMP MAIN ;退出解码子程序
;=================================================
;遥控执行部份
IR_GOTO
;这里还要判断1AH和1BH两个系统码或用户码,用于识别不同的遥控器
;MOV A,1AH
;CJNE A,#xxH,IR_ERROR ;用户码1不对则退出
;MOV A,1BH
;CJNE A,#xxH,IR_ERROR ;用户码2不对则退出
;判断两个数据码是否相反
MOV A,1CH
CPL A
CJNE A,1DH,IR_ERROR ;两个数据码不相反则退出
;遥控执行部份
;MOV A,1DH ;判断对应按键
;CJNE A,#xxH,$+6
;LJMP -à跳到对应按键执行处
;CJNE A,#xxH,$+6
;LJMP -à跳到对应按键执行处
;.
MOV P1,1DH ;将按键的键值通过P1口的8个LED显示出来! CLR P2.3 ;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功LCALL DELAY2400
LCALL DELAY2400
LCALL DELAY2400
SETB P2.3 ;蜂鸣器停止
;清除遥控值使连按失效
MOV 1AH,#00H
MOV 1BH,#00H
MOV 1CH,#00H
MOV 1DH,#00H
LJMP MAIN
;================================================= ; 延时子程序
;=============================882
DELAY882 ;1.085x ((202x4)+5)=882
MOV R7,#202
DELAY882_A
NOP
NOP
DJNZ R7,DELAY882_A
RET
;=============================1000
DELAY1000 ;1.085x ((229x4)+5)=999.285
MOV R7,#229
DELAY1000_A
NOP
NOP
DJNZ R7,DELAY1000_A
RET
;=============================2400 DELAY2400 ;1.085x ((245x9)+5)=2397.85 MOV R7,#245
DELAY2400_A
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY2400_A
RET
END。