《红外遥控总结》.docx

上传人:b****5 文档编号:7195084 上传时间:2023-01-21 格式:DOCX 页数:16 大小:31.12KB
下载 相关 举报
《红外遥控总结》.docx_第1页
第1页 / 共16页
《红外遥控总结》.docx_第2页
第2页 / 共16页
《红外遥控总结》.docx_第3页
第3页 / 共16页
《红外遥控总结》.docx_第4页
第4页 / 共16页
《红外遥控总结》.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

《红外遥控总结》.docx

《《红外遥控总结》.docx》由会员分享,可在线阅读,更多相关《《红外遥控总结》.docx(16页珍藏版)》请在冰豆网上搜索。

《红外遥控总结》.docx

《红外遥控总结》

《红外遥控总结》

红外遥控器的制作

摘要

本文以STC89C52单片机为核心,设计和制作了一个红外遥控收发系统,其结构主要由单片机控制和数据处理模块、4X4键盘模块、发射模块、接收显示模块等部分组成,具有按键编码发射、数据接收处理、显示等功能。

本设计具有体积小、功耗低、功能强、成本低等特点。

适用于彩电、录像机、音响设备、空调机以及玩具等其他小型电气装置上。

工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外遥控不仅完全可靠而且能有效地隔离电气干扰。

具有较大的实际意义和应用价值。

本论文及系统设计、硬制作和程序调试于一身,是理论与实际的结合,应用了我们所学的单片机、模拟电子、数字电子等知识,对培养和提高应用所学理论知识解决实际问题的能力、动手能力和创新能力具有较大帮助。

关键词:

STC89C52单片机、红外接收、红外发射。

1概

2红外遥控的功能与特

占•••••••

小、

••••

3总体设计方

4系统硬电路设

4.1发射电路部

4.2接收电路部

5遥控程序的发射及接收流程

6遥控的发射及接收程

1概述

红外遥控的频带宽,能携带的信息量多,不易受干扰。

由于红外线的频谱居于可见光之外,所以抗干扰能力强,具有广泛的直线传播特性,不易产生相互干扰,是很好的信息传输媒体。

信息可以直接对红外光进行调制,接收端再去掉载波,取到信息。

容易实现信息的传送,所以在日常生活中应用广泛。

2红外遥控的功能与特点

红外遥控技术是一种利用红外线进行点对点通信的技术,其相应的软和硬技术都已经比较成熟。

它是把红外线作为载体的红外遥控方式。

由于红外线的波长远小于无线电的波长,因此在采用红外遥控方式时,不会干扰电器的正常工作,也不会影响临近的无线电设备。

红外线是利用波长为0.6~1.5微米之间的近红外信号来传递控制信号的。

它具有以下特点:

1.

由于为不可见光,因此,对环境影响很小。

红外线的波长远小于无线电的波长,所以,红外线不会干扰其他家电,也不会影响临近的无线电设备。

2.

红外线为不可见光,具有很强的保密性和隐蔽性,因此在防盗、警戒等安全保卫装置中也得到广泛应用。

3.

红外遥控的遥控距离一般为几米至几十米或更远。

4.

红外遥控具有结构简单,制作方便,成本低廉,抗干扰能力强,工作可靠性高等一系列优点。

同时,由于红外遥控器,工作电压低,功耗小,外围电路简单,因此,在日常生活中广泛应用。

3总体设计方案

利用单片机控制红外线传输方式进行遥控系统的收发。

总体方案结构如图1:

图1

总体方案结构

在发射部分采用4X4按键,以及单片机最小系统,和红外反射管,其框图如图2所示:

图2

红外发射框图

在接收显示部分,使用了红外接收头,单片机最小系统,以及数码管显示,其框图如图3所示:

图3

红外接收框图

4系统硬电路设计

4.1发射电路部分

1)

1、0和1

的编码

根据NEG格式编码原理,当发射器按键按下后,就有遥控码发出,故按下的键不同遥控码也不同。

这种遥控码具有以下特征:

采用脉宽调制串行码,以脉宽0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的"1"。

2)

按键的编码

当我们按下遥控器的按键时,遥控器将发出一串二进制代码,我们称它为一帧数据。

根据各部分的功能。

可将它们分为5部分,分别为引导码、地址码、地址码、数据码、数据反码。

遥控器发射代码时.均是低位在前。

高位在后。

引导码高电平为4.5ms,低电平为4.5mso当接收到此码时.表示一帧数据的开始。

单片机可以准备接收下面的数据。

地址码由8位二进制组成,共256种。

地址码重发一次可以加强遥控器的可靠性。

如果两次地址码不相同.则说明本帧数据有错,应丢弃。

不同的设备可以拥有不同的地址码,因此,同种编码的遥控器只要设置地址码不同,也不会相互干扰。

地址码为十六进制的0EII(注意低位在前),在同一个遥控器中,所有按键发出的地址码都是相同的;数据码为8位,可编码256种状态,代表实际所按下的键;数据反码是数据码的各位求反。

通过比较数据码与数据反码,可判断接收到的数据是否正确。

如果数据码与数据反码之间的关系不满足相反的关系.则本次遥控接收有误,数据应丢弃。

在同一个遥控器上,所有按键的数据码均不相同。

数据码为十六进制的OCH,数据反码为十六进制的0F3H(注意低位在前).两者之和应为OFFHo

3)

红外发射电路图

如图4所示:

图4

红外发射电路

4.2接收电路部分

1)

红外接收

红外遥控接收可采用一体化红外接收头,它将红外接收二极管、放大、解调、整形等电路做在一起,只有三个引脚,分别是+5V电源、地、信号输出。

红外接收头的信号输出接单片机的INTO或INT1脚。

2)

遥控信号的解码算法及程序编制

平时,遥控器无键按下,红外发射二极管不发出信号,遥控接收头输出信号1;有键按下时,0和1编码的高电平经过遥控头反相后会输出信号0。

由于与单片机的中断脚相连,将会引起单片机中断(单片机预先设定为下降沿时产生中断)。

单片机在中断时使用定时器0或定时器1开始计时,到下一个脉冲到来时,即再次产生中断时,先将计数值取出。

清零计数值后再开始计时,通过判断每次中断与上一次中断之间的时间间隔,便可知接收到的是引导码还是

0或1。

如果计数值为9ms,接收到的是引导码;如果计时值等于1・12ms,接收到的是编码0;如果计数值等于2

25ms,接收到的是编码1。

在判断时间时,应考虑一定的误差值。

因为不同的遥控器由于晶振参数等原因,发射及接收到的时间也会有很小的误差

3)

解码方法如下:

(1)设外部中断0(或者1)为下降沿中断,定时器0(或者1)为16位计时器.初始值均为0。

(2)第一次进入遥控中断后,开始计时。

(3)从第二次进入遥控中断起,先停止计时。

并将计时值保存后,再重新计时。

如果计时值等于前导码的时间,设立前导码标志。

准备接收下面的一帧遥控数据,如果计时值不等于前导码的时间,但前面已接收到前导码,则判断是遥控数据的()还是1。

(4)继续接收下面的地址码、数据码、数据反码。

(5)当接收到32位数据时,说明一帧数据接收完毕。

此时可停止定时器的计时,并判断本次接收是否有效。

如果两次地址码相同且等于本系统的地址,数据码与数据反码之和等于OFFH,则接收的本帧数据码有效,否则丢弃本次接收到的数据。

(6)接收完毕,初始化本次接收的数据,准备下一次遥控接收。

4、红外接收电路图

如图5所示:

图5

红外接收电路

5遥控程序的发射及接收流程图

5.1发射流程图

如图6所示:

图6

发射流程图

6.2接收流程图接

1)接收主程序流程图如图7所示

图7

接收主程序流程图

2)接收子程序流程图如图8所示

图8

接收子程序流程图

6遥控的发射及接收程序

6.1发射程序

#include

static

bit

OP;

〃红外发射管的亮灭

static

unsigned

int

count;

〃延时计数器

static

unsigned

int

endcount;

//终止延时计数

static

unsigned

int

temp;

//按键

static

unsigned

char

flag;

//红外发送标志

static

unsigned

char

num;

sbitir_in=P3^4;

//红外发射管脚

//sbit

LED二P0"0;

char

iraddrl;

〃十六位地址的第一个字节

char

iraddr2;

//十六位地址的第二个字节

unsigned

char

code

table[]={

0xf9,0xa4,OxbO,0x99,0x92,0x82,0xf8,0x80,0x90,OxcO,0x88,0x83,0xc6,Oxal,0x86,0x8e

};

〃共阳数码管

//红外数据传输void

SendIRdata(char

p_irdata);

//红外数据传输void

delay(unsignedint);

void

keyscan();

//4键盘扫描

void

main(void)

num=O;

Pl=0x3f;count

0;

flag

0;

OP

0;

ir_in=

0;

EA

1;

//允许CPU中断

TMOD

0x11;

〃设定时器0和1为16位模式1

ETO

1;

//定时器0中断允许

TII0

OxFF;

TLO

0xE6;

//设定时值0为38K

也就是每隔26us中断一次

TRO

1;

〃开始计数

iraddrl=3;

//00000011

iraddr2=252;

//11111100

do

keyscan();

wh订e⑴;

}

/***********************定时器0中断处理

vXx

void

timeint(void)

interrupt

1

{

TH0=0xFF;

TL0=0xE6;

//设定时值为38K

也就是每隔26us中断一次

count++;

if

(flag==l)

0P=~0P;

//发射管亮

}

else

OP

0;

}

ir_in=

OP;//红外发射

//LED二OP;

}

void

SendIRdata(char

p_irdata)

{

//红外数据传输

int

1;

char

irdata二p_irdata;

//发送9ms的起始码

endcount二223;

flag=l;

count=0;

do{}while(count>l;

}

irdata=iraddr2;

for(i=0;i>l;

/******************发送八位数据

^ix

irdata=p_irdata;

for(i=0;i>l;

irdataJp—irdeita;

for(i=0;i>l;

}

//红外数据传输

endcount二10;

flag=l;

count二0;

do{}while(countO;x--)

for(y=110;y>0;y--);

}

/*********************4X4键盘扫描按下按键发射数据

voidkeyscan(){

P2=0xfe;//第一行temp二P2;

temp二temp

//判断有无按键按下while(temp!

=0xf0)

//有按键按下

{

//delay(5);

temp二P2;

switch(temp)

case

Oxee:

num二1;

break;

case

Oxde:

num二2;

break;

case

Oxbe:

num=3;

break;

case

0x7e:

num二4;

break;

while(temp!

=OxfO)

temp二P2;

temp=temp

Pl二table[num-1];

SendIRdata(table[num-1]);

P2=0xfd;

//第二行

temp二P2;

temp二temp

//判断有无按键按下while(temp!

=OxfO)

//有按键按下

{

temp二P2;

switch(temp)

{

case

Oxed:

num二5;

break;

case

Oxdd:

num二6;

break;

case

Oxbd:

num=7;

break;

case

0x7d:

num二8;

break;

}

while(temp!

=0xf0)

temp=P2;

temp二temp

}

Pl=table[num-1];

SendIRdata(table[numT]);

}

P2=0xfb;

//第三行

temp=P2;

temp二temp

//判断有无按键按下

while(temp!

=OxfO)

//有按键按下

{

temp二P2;

switch(temp)

{

case

Oxeb:

num二9;

break;

case

Oxdb:

num二10;

break;

case

Oxbb:

num二11;

break;

case

0x7b:

num二12;

break;

while(temp!

=OxfO)

temp二P2;

temp=temp

Pl二table[num-1];

SendIRdata(table[num~l]);

P2二Oxf7;

//第四行

temp二P2;

temp二temp

〃判断有无按键按下

while(temp!

=OxfO)

//有按键按下

{

temp二P2;

switch(temp)

{

case

0xe7:

num=13;

break;

case

0xd7:

num=14;

break;

case

0xb7:

num二15;

break;

case

0x77:

num=16;

break;

while(temp!

=0xf0)

temp二P2;

temp二temp

}

Pl=table[num-1];

SendIRdata(table[numT]);

}

}

6.2接收程序

#include

#define

uchar

unsigned

char

#define

uint

unsigned

int

uchar

dis_num,num,numl,num2tnum3;

sbit

led=PO0;

unsigned

char

code

table[]={

OxcO,0xf9,0xa4,OxbO,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,Oxal,0x86,0x8e

};

//共阳数码管

0〜~f

sbit

prem

二P3“2;

//定义遥控头的接收脚

uchar

ram[4]={0,0,0,0};//存放接受到的4个数据

地址码16位+按键码8位+按键码取反的8位

void

delaytime(uint

time)

//延迟90uS

{

uchar

a,b;

for(a=time;a>0;a一一)

for(b=40;b>0;b--);

}

void

rem()interrupt

0

〃中断函数

{

uchar

ramc=0;

〃定义接收了4个字节的变量

uchar

count二0;

〃定义现在接收第几位变量

uint

1=0;

//此处变量用来在下面配合连续监测9MS

内是否有高电平

prem=l;

for(i=0;i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1