红外遥控发射芯片采用PPM编码方式,当发射器按键按下后,将发射一组108ms的编码脉冲。遥控编码脉冲由前导码、8位用户码、8位用户码的反码、8位操作码以及8位操作码的反码组成。通过对用户码的检验,每个遥控器只能控制一个设备动作,这样可以有效地防止多个设备之间的干扰。编码后面还要有编码的反码,用来检验编码接收的正确性,防止误操作,增强系统的可靠性。前导码是一个遥控码的起始部分,由一个9ms的低电平(起始码)和一个4. 5ms的高电平(结果码)组成,作为接受数据的准备脉冲。以脉宽为0. 56ms、周期为1. 12ms的组合表示二进制的“0”;以脉宽为1. 68ms、周期为2. 24ms的组合表示二进制的“1”。如果按键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2. 5ms)组成。 ### 51单片机红外遥控解码技术详解 #### 一、红外遥控编码原理 在探讨51单片机如何实现红外遥控解码之前,我们先了解一下红外遥控的编码方式及其基本原理。 红外遥控系统通常采用PPM(Pulse Position Modulation,脉冲位置调制)编码方式来传输信号。当按下遥控器上的某个按键时,遥控器会发射出一组特定的编码脉冲,该脉冲序列包含了以下几部分: 1. **前导码**:由一个9ms的低电平和一个4.5ms的高电平组成,用于启动接收端的数据接收准备。 2. **用户码**:一个8位的二进制序列,用于标识不同的遥控器。 3. **用户码的反码**:用户码的取反值,用于校验用户码是否被正确接收。 4. **操作码**:一个8位的二进制序列,用于表示用户按下的是哪个按键。 5. **操作码的反码**:操作码的取反值,同样用于校验目的。 在实际应用中,为了减少误操作的可能性,编码后面还会有编码的反码。这种设计可以有效防止误操作,增强系统的可靠性。 二进制“0”和“1”的编码规则如下: - 二进制“0”:以脉宽为0.56ms、周期为1.12ms的组合表示。 - 二进制“1”:以脉宽为1.68ms、周期为2.24ms的组合表示。 当按键按下时间超过108ms时,后续发射的信号(连发代码)将简化为起始码(9ms低电平)和结束码(2.5ms低电平)。 #### 二、51单片机红外遥控解码实现 基于以上原理,下面详细介绍如何使用51单片机实现红外遥控信号的解码。 ##### 1. 硬件连接 在硬件连接方面,红外接收头一般通过一个GPIO引脚与单片机相连,用于捕捉红外信号的变化。 ##### 2. 软件实现 软件实现主要包括以下几个步骤: - **初始化**: 设置定时器中断,用于捕捉红外信号变化的时间间隔。 - **中断处理**: 在定时器中断服务函数中判断信号的高电平和低电平持续时间,从而识别是二进制“0”还是“1”。 - **解码**: 根据接收到的信号进行解码,并存储到相应的变量中。 下面是一个简化的代码示例,展示了如何使用51单片机进行红外信号的接收和解码: ```c #include <reg52.h> #define uchar unsigned char sbit dula = P2^6; // LED1 sbit wela = P2^7; // LED2 uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; uchar f; #define Imax 14000 // 最大时间 #define Imin 8000 // 最小时间 #define Inum1 11450 // 某个阈值 #define Inum2 700 #define Inum3 3000 uchar Im[4] = {0x00, 0x00, 0x00, 0x00}; uchar show[2] = {0, 0}; unsigned long m, Tc; uchar IrOK; void delay(uchar i) { uchar j, k; for (j = i; j > 0; j--) { for (k = 125; k > 0; k--); } } void display() { dula = 0; P0 = table[show[0]]; dula = 1; dula = 0; wela = 0; P0 = 0xfe; wela = 1; wela = 0; delay(5); P0 = table[show[1]]; dula = 1; dula = 0; P0 = 0xfd; wela = 1; wela = 0; delay(5); } void intersvr1(void) interrupt 2 using 1 { Tc = TH0 * 256 + TL0; TH0 = 0; TL0 = 0; if ((Tc > Imin) && (Tc < Imax)) { m = 0; f = 1; return; } if (f == 1) { if (Tc > Inum1 && Tc < Inum3) { Im[m / 8] = Im[m / 8] >> 1 | 0x80; m++; } if (Tc > Inum2 && Tc < Inum1) { Im[m / 8] = Im[m / 8] >> 1; m++; } if (m == 32) { m = 0; f = 0; if (Im[2] == ~Im[3]) { IrOK = 1; } else { IrOK = 0; } } } } void main(void) { unsigned int a; m = 0; f = 0; EA = 1; IT1 = 1; EX1 = 1; TMOD = 0x11; TH0 = 0; TL0 = 0; TR0 = 1; while (1) { if (IrOK == 1) { show[1] = Im[2] & 0x0F; show[0] = Im[2] >> 4; IrOK = 0; } for (a = 100; a > 0; a--) { display(); } } } ``` 这段代码实现了基本的红外信号接收和解码功能。需要注意的是,实际应用中可能还需要根据具体需求对代码进行优化和调整。 #### 三、总结 本文详细介绍了51单片机如何实现红外遥控解码,包括编码原理、硬件连接以及软件实现等方面的内容。通过本篇文章的学习,读者可以更好地理解和掌握红外遥控解码的相关技术,为实际项目开发打下坚实的基础。



















作者:叶大鹏 更新时间:2009-2-6 14:23:15 浏览次数:19416
红外遥控发射芯片采用PPM编码方式,当发射器按键按下后,将发射一组108ms的编码脉冲。遥控编码脉冲由前导码、8位用户码、8位用户码的反码、8位操作码以及8位操作码的反码组成。通过对用户码的检验,每个遥控器只能控制一个设备动作,这样可以有效地防止多个设备之间的干扰。编码后面还要有编码的反码,用来检验编码接收的正确性,防止误操作,增强系统的可靠性。前导码是一个遥控码的起始部分,由一个9ms的低电平(起始码)和一个4. 5ms的高电平(结果码)组成,作为接受数据的准备脉冲。以脉宽为0. 56ms、周期为1. 12ms的组合表示二进制的“0”;以脉宽为1. 68ms、周期为2. 24ms的组合表示二进制的“1”。如果按键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2. 5ms)组成。
单片机采用外部中断INTI管脚和红外接收头的信号线相连,中断方式为边沿触发方式。并用定时器0计算中断的间隔时间,来区分前导码、二进制的“1”、“0”码。并将8位操作码提取出来在数码管上显示。
// 解码值在Im[2]中,当IrOK=1时解码有效。
/* 51单片机红外遥控解码程序 */
//用遥控器对准红外接收头,按下遥控器按键,在数码管前两位上就会显示对应按键的编码
#include <reg52.h>
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar f;
#define Imax 14000 //此处为晶振为11.0592时的取值,
#define Imin 8000 //如用其它频率的晶振时,
#define Inum1 1450 //要改变相应的取值。
#define Inum2 700
#define Inum3 3000
unsigned char Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
dula=0;
P0=table[show[0]];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
P0=table[show[1]];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
}
剩余5页未读,继续阅读


- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 新时代高职生网络生活状况研究.docx
- 基于改进粒子群优化算法的 BP 神经网络房价预测研究
- 人工智能写作会不会抢了电竞媒体的饭碗?.docx
- 单片机与PC机的温控制系统硬件设计.doc
- 基于51单片机ds1302和ds18b20芯片方案设计书的电子日历.doc
- ASPnet管理开题.doc
- 电子商务专业个人简历-范例.doc
- 2015最新Excel甘特图模板项目管理必备.xls
- 单片机测控系统中的抗干扰技术.doc
- (源码)基于C++的Alexa Voice Service原型.zip
- 基于单片机的水箱温自动控制系统设计张强.doc
- Go编程语言全面指南
- 大数据-资本市场下一波的宠儿.docx
- 谈供电局配网自动化的研究与实现.docx
- 基于词典与机器学习的中文微博情感分析.docx
- 基因工程制药下游技术生物学自然科学专业资料.ppt


