基于51单片机的红外线遥控器解码程序设计

发布者:sjp5035022最新更新时间:2021-06-25 来源: eefocus关键字:51单片机  红外线遥控器  解码程序 手机看文章 扫描二维码
随时随地手机看文章

描述


下面是一个对51实验板配套的红外线遥控器的解码程序,它可以把红外遥控器每一个按键的键值读出来,并且通过实验板上P1口的8个LED显示出来,在解码成功的同时并且能发出“嘀嘀嘀”的提示音。

基于51单片机的红外线遥控器解码程序设计

;=================================================

; 红外遥控接收

;=================================================

; ew51仿真编程器 配套实验板学习例程

;

; 中山单片机学习网 智佳科技 逸风

;

; http://www.zsMCU.com

; E-mail:info@zsmcu.com

;=================================================

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位数据,

;存放在1AH/1BH/1CH/1DH的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,{1}6

;LJMP -à跳到对应按键执行处

;CJNE A,#xxH,{1}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


关键字:51单片机  红外线遥控器  解码程序 引用地址:基于51单片机的红外线遥控器解码程序设计

上一篇:使用Keil C进行51单片机延时程序编写的几点心得
下一篇:51单片机开发之DS18B20温度传感器

推荐阅读最新更新时间:2024-11-09 17:41

你会51单片机的精确延时吗
对于某些对时间精度要求较高的程序,用 c 写延时显得有些力不从心,故需用到汇编程序。本人通过测试,总结了 51 的精确延时函数(在 c 语言中嵌入汇编)分享给大家。至于如何在 c 中嵌入汇编大家可以去网上查查,这方面的资料很多,且很简单。以 12MHz 晶振为例,12MHz晶振的机器周期为 1us,所以,执行一条单周期指令所用时间就是 1us,如 NOP 指令。下面具体阐述一下。 若要延时 1us,则可以调用_nop_();函数,此函数是一个 c 函数,其相当于一个 NOP 指令 使用时必须包含头文件 intrins.h 例如: #include intrins.h #include reg52.h void m
[单片机]
C51单片机定时器/计数器中断功能详细分析(二)
一.外部中断相关寄存器 1.定时器/计数器控制寄存器控制寄存器(TCON) IT0:外部中断0触发方式控制位 当IT0=0时,为电平触发方式(低电平有效) 当IT0=1时,为边沿触发方式(下降沿有效) IT1:外部中断1触发方式控制位 当IT1=0时,为电平触发方式(低电平有效) 当IT1=1时,为边沿触发方式(下降沿有效) 2.中断允许控制寄存器(IE) EX0:外部中断0允许位; EX1:外部中断1允许位; EA :CPU中断允许(总允许)位。 二.外部中断的处理过程 1、设置中断触发方式,即IT0=1或0,IT1=1或0 2、开对应的外部中断,即EX0=1或EX1=1; 3、开总中断,即EA=1; 4、等待外部设
[单片机]
C<font color='red'>51单片机</font>定时器/计数器中断功能详细分析(二)
51单片机外部中断点亮LED
外部中断软件设计原理 中断发生的三个条件 ①中断源有中断请求; ②此中断源的中断允许位为 1; ③CPU 开中断(即 EA=1)。 比如我们配置外部中断 0,对应的配置程序如下: EA=1;//打开总中断开关 EX0=1;//开外部中断 0 IT0=0/1;//设置外部中断的触发方式(下降沿触发) 如果要配置的是外部中断 1,只需将 EX0 改为 EX1,IT0 改为 IT1 在编写程序时通常我们会将外部中断的配置放到一个自定义函数内便于管 理维护。如下伪代码所示: void Int0Init() { //设置 INT0 IT0=1;//边沿触发方式(下降沿) EX0=1;//打开 INT0 的中断允许。 EA=1;//打开总
[单片机]
51单片机-代码文件和测试
创建好“infrared.c”和“infrared.h”文件。 1.infrared.c的代码 #include reg52.h #include infrared.h unsigned char irflag = 0; //红外接收标志,收到一帧正确数据后置1 unsigned char ircode ; //红外代码接收缓冲区 /* 初始化红外接收功能 */ void InitInfrared() { IR_INPUT = 1; //确保红外接收引脚被释放 TMOD &= 0x0F; //清零T1的控制位 TMOD |= 0x10; //配置T1为模式1 TR1 = 0; //停止T
[单片机]
<font color='red'>51单片机</font>-代码文件和测试
51单片机 矩阵按键控制数码管显示0~F
通过按下4*4矩阵按键让数码管显示对应的数值 #include reg52.h typedef unsigned char u8; typedef unsigned int u16; u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0 1 2 3 4 5 6 7 8 9 A b C d E F u16 key_value; void delay(u16 i) { while(i--); } void keyscan() { P1=
[单片机]
C51单片机外部中断的触发方式
1. 电平触发方式 ○ CPU采样外部中断引脚电平 ○ 低电平,则硬件置1(IE=1) ○ 高电平,则硬件清0(IE=0) ○ 外部中断引脚的低电平要一直保持,直到CPU响应外部中断 ○ CPU响应中断后,会硬件将IE清0(IE=0),但是不会取消掉外部中断引脚的低电平,因此需要硬件加软件清除低电平(p133) 2. 下降沿触发方式 ○ CPU采样外部中断的引脚电平 ○ 如果上一个机器周期电平为高,下一个机器周期电平为低,则硬件置1(IE=1) ○ 等待CPU响应中断 ○ CPU响应中断,硬件清0(IE=0)
[单片机]
C<font color='red'>51单片机</font>外部中断的触发方式
51单片机入门——16路抢答器
设计要求 同时为16支参赛队提供抢答功能,抢答成功后应能通过数码管显示出参赛队号数,同时点亮发光二极管示意抢答成功。 加入独立开关,可启动10秒倒计时功能,通过数码管显示出倒计时时间(倒计时状态下抢答功能不起作用,反之亦然)。 电路原理图 硬件原理 时钟信号(晶振) 单片机晶振部位电路,详情请参考《51单片机入门——单片机最小系统》,在此项目中我们选择 11.0592 MHz的晶振。 矩阵按键与独立按键 在该项目中矩阵按键用于选手的抢答器,独立按键用于主持人复位重置抢答。 代码解析 矩阵按键部分代码: keyboard.c #include KEYBOARD.H uchar keySta = {
[单片机]
<font color='red'>51单片机</font>入门——16路抢答器
AT89C2051单片机双路路灯照明控制器
  通常我们常见的路灯、通道灯、广告灯箱等公共场所用照明灯具往往彻夜通明,或者说在白天不应照明时工作了,造成了电能的浪费。还有些因为采用了定时控制方式,随着季节的变化未能及时设置好控制器,造成了控制不适时,如天已暗灯未明等现象,影响了照明效果。本文介绍采用AT89C2O5l 单片机 制作的双路路灯照明控制器,仍然采用光控式,但与一般的光控开关相比由于采用了单片机,具有较强  的抗干扰性能,一路为夜间全明,另一路可设置晚上照明时间,到时自动关闭。 iframe id="iframeu2163852_0" src="http://pos.baidu.com/ycmm?conwid=250&conhei=250&rdid=216
[单片机]
AT89C20<font color='red'>51单片机</font>双路路灯照明控制器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved