《红外遥控总结》Word格式.docx

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

《红外遥控总结》Word格式.docx

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

《红外遥控总结》Word格式.docx

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

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

红外线是利用波长为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接收电路部分

红外接收

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

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

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

平时,遥控器无键按下,红外发射二极管不发出信号,遥控接收头输出信号1;

有键按下时,0和1编码的高电平经过遥控头反相后会输出信号0。

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

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

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

0或1。

如果计数值为9ms,接收到的是引导码;

如果计时值等于1・12ms,接收到的是编码0;

如果计数值等于2

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

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

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

解码方法如下:

(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;

〃红外发射管的亮灭

unsigned

int

count;

〃延时计数器

endcount;

//终止延时计数

temp;

//按键

char

flag;

//红外发送标志

num;

sbitir_in=P3^4;

//红外发射管脚

//sbit

LED二P0"

0;

iraddrl;

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

iraddr2;

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

code

table[]={

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

};

〃共阳数码管

//红外数据传输void

SendIRdata(char

p_irdata);

delay(unsignedint);

void

keyscan();

//4键盘扫描

main(void)

num=O;

Pl=0x3f;

count

flag

OP

ir_in=

EA

1;

//允许CPU中断

TMOD

0x11;

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

ETO

//定时器0中断允许

TII0

OxFF;

TLO

0xE6;

//设定时值0为38K

也就是每隔26us中断一次

TRO

〃开始计数

iraddrl=3;

//00000011

iraddr2=252;

//11111100

do

keyscan();

wh订e⑴;

}

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

vXx

timeint(void)

interrupt

1

{

TH0=0xFF;

TL0=0xE6;

//设定时值为38K

count++;

if

(flag==l)

0P=~0P;

//发射管亮

else

//红外发射

//LED二OP;

p_irdata)

//红外数据传输

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;

irdataJp—irdeita;

endcount二10;

count二0;

do{}while(countO;

x--)

for(y=110;

y>

y--);

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

voidkeyscan(){

P2=0xfe;

//第一行temp二P2;

temp二temp

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

=0xf0)

//有按键按下

//delay(5);

temp二P2;

switch(temp)

case

Oxee:

num二1;

break;

Oxde:

num二2;

Oxbe:

num=3;

0x7e:

num二4;

while(temp!

=OxfO)

temp=temp

Pl二table[num-1];

SendIRdata(table[num-1]);

P2=0xfd;

//第二行

Oxed:

num二5;

Oxdd:

num二6;

Oxbd:

num=7;

0x7d:

num二8;

temp=P2;

Pl=table[num-1];

SendIRdata(table[numT]);

P2=0xfb;

//第三行

//判断有无按键按下

Oxeb:

num二9;

Oxdb:

num二10;

Oxbb:

num二11;

0x7b:

num二12;

while(temp!

SendIRdata(table[num~l]);

P2二Oxf7;

//第四行

〃判断有无按键按下

0xe7:

num=13;

0xd7:

num=14;

0xb7:

num二15;

0x77:

num=16;

6.2接收程序

#define

uchar

uint

dis_num,num,numl,num2tnum3;

sbit

led=PO0;

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

//共阳数码管

0〜~f

prem

二P3“2;

//定义遥控头的接收脚

ram[4]={0,0,0,0};

//存放接受到的4个数据

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

delaytime(uint

time)

//延迟90uS

a,b;

for(a=time;

a>

a一一)

for(b=40;

b>

b--);

rem()interrupt

〃中断函数

ramc=0;

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

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

1=0;

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

内是否有高电平

prem=l;

for(i=0;

i

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

当前位置:首页 > IT计算机 > 计算机硬件及网络

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

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