基于单片机的红外线遥控器设计.docx

上传人:b****5 文档编号:3575369 上传时间:2022-11-24 格式:DOCX 页数:17 大小:306.73KB
下载 相关 举报
基于单片机的红外线遥控器设计.docx_第1页
第1页 / 共17页
基于单片机的红外线遥控器设计.docx_第2页
第2页 / 共17页
基于单片机的红外线遥控器设计.docx_第3页
第3页 / 共17页
基于单片机的红外线遥控器设计.docx_第4页
第4页 / 共17页
基于单片机的红外线遥控器设计.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于单片机的红外线遥控器设计.docx

《基于单片机的红外线遥控器设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的红外线遥控器设计.docx(17页珍藏版)》请在冰豆网上搜索。

基于单片机的红外线遥控器设计.docx

基于单片机的红外线遥控器设计

毕业设计

 

姓名:

专业:

班级:

指导教师:

 

 

课程设计任务书

 

姓名:

钟思

专业:

自动化

班级:

1301班

设计课题:

基于单片机的红外线遥控器设计

指导教师:

电子信息工程系印制

二○一五年十二月

 

 

第一章红外发射部分

1.设计要求与指标

红外遥控是目前使用较多的一种遥控手段。

功能强、成本低等特点。

系统。

设计要求利用红外传输控制指令及智能控制系统,借助微处理器强大灵活的控制功能发出脉冲编码,组成的一个遥控系统。

本设计的主要技术指标如下:

(1)遥控范围:

0—1米

(2)显示可控制的通道

(3)灵敏可靠,抗干扰能力强

(4)控制用电器电流最高为2A

红外遥控的特点是不影响周边环境的、不干扰其他电器设备。

由于其无法穿透墙壁,故不同房间的家用电器可使用通用的遥控器而不会产生相互干扰;多路遥控。

红外遥控系统由发射和接收两大部分组成,系统采用编/解码专用集成电路和单片机芯片来进行控制操作。

设计的电路由几个基本模块组成:

直流稳压电源,红外发射电路,红外接收电路及控制部分。

发射电路,利用遥控发射利用键盘,这种代码指令信号调制在40KHz的载波上,激励红外光二极管产生具有脉冲串的红外波,通过空间的传送到受控机的遥控接收器。

2.红外遥感发射系统的设计

红外遥控系统由发射和接收两大部分组成,系统采用编/解码专用集成电路和单片机芯片来进行控制操作。

发射系统设计的电路由如下的几个基本模块组成:

直流稳压电源,红外发射电路。

系统框图如图所示。

3.红外发射电路的设计

3.1.摇控码的编码格式

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

3.2遥控码的发射

当某个操作按键按下时,单片机先读出键值,然后根据键值设定遥控码的脉冲个数,再调制成40kHz方波由红外线发光管发射出去。

P3.5端口的输出调制波如图2-2所示。

图2-2单一按键波形

图2-2连续按键波形

3.3红外发射电路图

遥控发射通过键盘,每按下一个键,即产生具有不同的编码数字脉冲,这种代码指令信号调制在40KHz的载波上,激励红外光二极管产生不同的脉冲,通过空间的传送到受控机的遥控接收器。

电路如下图所示。

4调试结果及其分析

(1)电路要求遥控控制距离为0—1m,在利用38KHz的接收头时,虽然能接收到信号,但是接收的距离很有限。

经过反复调试,换用40KHz的接收头时基本满足了设计需求。

(2)由于将3ms的接收脉冲放在1ms的后面,编码解调出现错误,导致接受端无信号输出。

解决方法是将3ms的接收脉冲放在前面就可以接收到信号。

片机进行数码帧的接收处理,3ms的脉冲检验,当第一位低电平码的脉宽小于2ms时就会错误处理。

在初始化过程中,将P1口全置0,但是继电器仍工作,通过反复调试,将初始化的P1口全置1,通过反向使得输出全为0,从而满足上电复位,继电器掉电,满足初始化要求。

第二章红外接受部分

1.红外遥控系统的设计

红外遥控系统由发射和接收两大部分组成,系统采用编/解码专用集成电路和单片机芯片来进行控制操作。

设计的电路由如下的几个基本模块组成:

红外发射电路,红外接收电路及控制部分。

1.系统框图(如图3-1所示)

2.XTAL2接外部晶体的另一个引脚。

在单片机内部,它是上述振荡器的反相放大器的输出端。

采用外部振荡器时,此引脚应悬浮不连接。

3.输入/输出引脚P0.0~P0.7、P10.~P1.7、P2.0~P2.7和P3.0~P3.7。

①P0端口(P0.0~P0.7)P0是一个8位漏极开路型双向I/O端口。

作为输出口用时,

每位能以吸收电流的方式驱动8个TTL输入,对端口写1时,又可作高阻抗输入端用。

在访问外部程序和数据存储器时,它是分时多路转换的地址(低8位)/数据总线,在访问期间激活了内部的上拉电阻。

②P1端口(P1.0~P1.7)P1是一个带有内部上拉电阻的8位双向I/O端口。

P1的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。

对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。

因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。

③P2端口(P2.0~P2.7)P2是一个带有内部上拉电阻的8位双向I/O端口。

P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。

对端口写1时,通过内部的上拉电阻把端口拉到高电位,P2作输入口使用时,因为有内部的上拉电阻,这时可用作输入口。

P2作为输入口时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。

在访问外部程序存储器和16位地址的外部数据存储器(如执行MOVX@DPTR指令)时,P2送出高8位地址。

在访问8位地址的外部数据存储器(如执行MOVX@Ri,A指令)时,P2口引脚上的内容,在整个访问期间不会改变。

④P3端口(P3.0~P3.7)P3是一个带有内部上拉电阻的8位双向I/O端口。

P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。

对端输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。

在AT89C52中,P3端口还用于一些专门功能,这些兼用功能如下:

(1)P3.0RXD(串行输入口)

(2)P3.1TXD(串行输出口)

(3)P3.2/INT0(外部中断0)

(4)P3.3/INT1(外部中断1)

(5)P3.4T0(记时器0外部输入)

(6)P3.5T1(记时器1外部输入)

(7)P3.6/WR(外部数据存储器写选通)

(8)P3.7/RD(外部数据存储器读选通)

(9)P3口同时为闪烁编程和编程校验接收一些控制信号

 

4.振荡器特性:

XTAL1和XTAL2分别为反向放大器,该反向放大器可以配置为片内振荡器。

石英震荡和陶瓷震荡均可采用。

如采用外部时钟源驱动器件,XTAL2应不接。

由于输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。

5.芯片擦除:

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,ALE管脚处于低电平10ms来完成。

在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

主控制器采用ATMEL公司的8位单片机AT89C52。

AT89C52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统。

图3-9:

主控制器电路原理图

 

2.系统的功能实现方法

2.1摇控码的编码格式

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

图4遥控码的“1”和“0”

红外遥控发射芯片采用PPM编码方式,当发射器按键按下后,将周期性地发出同一种32位二进制码,周期约为108ms的编码脉冲。

遥控编码脉冲由前导码、16位地址码(8位地址码、8位地址码的反码)和16位操作码(8位操作码、8位操作码的反码)组成。

通过对用户码的检验,每个遥控器只能控制一个设备动作,这样可以有效地防止多个设备之间的干扰。

编码后面还要有编码的反码,用来检验编码接收的正确性,防止误操作,增强系统的可靠性。

前导码是一个遥控码的起始部分,由一个9ms的高电平(起始码)和一个4.5ms的低电平(结果码)组成,作为接受数据的准备脉冲。

图5发送一组完整的编码脉冲

上述“0”和“1”组成的32位二进制码经38khz的载频进行二次调制以提高发射频率,然后再通过红外发射二极管产生红外线向空间发射。

 

2.2遥控码的发射

当某个操作按键按下时,单片机先读出键值,然后根据键值设定遥控码的脉冲个数,再调制成40kHz方波由红外线发光管发射出去。

P3.5端口的输出调制波如图4-1所示。

2.3数码帧的接收处理

当红外线接收器输出脉冲帧数据时,第一位码的低电平将启动中断程序实时接收数据帧。

在数据帧接收时,将对第一位码的码宽进行验证。

若第一位低电平码的的脉宽小于2ms,将作为错误码处理。

当间隔位的高电平脉宽大于3ms时,结束接收,然后根据累加器A中的脉冲个数,执行相应输出口操作。

图4-2就是红外线接收器输出的一帧遥控码波形图。

3.红外接受电路图

在接收过程中,脉冲通过光学滤波器和红外二极管转换为40KHZ的电信号,此信号经过放大,检波,整形,解调,送到解码与接口电路。

如图5-1所示。

通常,红外遥控器将遥控信号(二进制脉冲码)调制在40KHz的载波上,经缓冲放大后送至红外发光二极管,产生红外信号发射出去。

将上述的遥控编码脉冲对频率为40KHz(周期为26.3ms)的载波信号进行脉幅调制(PAM),再经缓冲放大后送到红外发光管,将遥控信号发射出去。

4.软件设计:

本系统的软件程序主要包括主程序、接收解码程序、发射程序、遥控器学习识别程序几个大的模块程序。

5.调试结果及分析:

本电路总共设计了21个输入按键,其中11个为特殊按键,其他键均为数字键。

当输入一个按键0时,通过红外发射和接收电路,对应的继电器1的设备工作,液晶显示十六进制代码。

当按下按键1时,数码管显示不同的十六进制代码。

以此类推0—9号数字键功能同上,特殊按键,根据按的特殊按键的不同,会实现不同功能,如快进。

本设计在调试过程中也遇到很多问题。

1.电路要求遥控控制距离为0—1m,在利用38KHz的接收头时,虽然能接收到信号,但是接收的距离很有限。

经过反复调试,换用40KHz的接收头时基本满足了设计需求。

在初始化过程中,将P1口全置0,但是继电器仍工作,通过反复调试,将初始化的P1口全置1,通过反向使得输出全为0,从而满足上电复位,继电器掉电,满足初始化要求。

6.结论:

由于目前的遥控装置大多对某一设备进行单独控制,而在本设计中的红外遥控电路设计了多个控制按键,可以对不同的设备,也可以对同一设备的多个功能进行不同的控制。

基本符合技术要求。

但是本电路也有不完,它只能单通道实现对多个设备的控制,即它不能同时控制两个或者两个以上的设备。

在设计过程中,通过大量的查阅资料,认真研究材料,对单片机有了更为深刻的理解,在设计软件时,须仔细的分析硬件电路,画出程序流程图,培养了我的耐性和刻苦钻研的精神。

参考文献

[1]全国大学生电子设计竞赛组委会.第五届全国大学生电子设计竞赛获奖作品选编,第1版,北京理工大学出版社,2005年,P10-17.

[2]康华光,陈大钦.电子技术基础模拟部分,第4版,高等教育出版社,1999年,第四版,P82-155.

[3]康华光,邹寿彬.电子技术基础数字部分,第4版,高等教育出版,2000年,第四版,P83-155.

附录:

主程序:

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include

#include

 

#defineTURE1

#defineFALSE0

 

sbitIR=P2^2;//红外接口标志

//定义液晶接口

sbitRS=P3^5;//Pin4

sbitE=P3^4;//Pin6

#defineDataP1//数据端口

unsignedinthour,minute,second,count;

charcodeTab[16]="0123456789ABCDEF";

chardataTimeNum[]="";

chardataTest1[]="";

/******************************************************************/

/*变量声明*/

/******************************************************************/

unsignedcharirtime;//红外用全局变量

bitirpro_ok,irok;

unsignedcharIRcord[4];//处理后的红外码,分别是客户码,客户码,数据码,数据码反码

unsignedcharirdata[33];//33个高低电平的时间数据

/******************************************************************/

/*函数声明*/

/******************************************************************/

voidIr_work(void);

voidIrcordpro(void);

voidShowString(unsignedcharline,char*ptr);

/******************************************************************/

/*定时器0中断服务函数*/

/******************************************************************/

voidtim0_isr(void)interrupt1using1//定时器0中断服务函数

{

irtime++;//用于计数2个下降沿之间的时间

}

/******************************************************************/

/*外部中断0函数*/

/******************************************************************/

voidex0_isr(void)interrupt0using0//外部中断0服务函数

{

staticunsignedchari;//接收红外信号处理

if(irtime<63&&irtime>=33)//引导码TC9012的头码,9ms+4.5ms

i=0;

irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1

irtime=0;

i++;

if(i==33)

{

irok=1;

i=0;

}

 

}

/******************************************************************/

/*屏蔽数码管程序*/

/******************************************************************/

/******************************************************************/

/*定时器0初始化*/

/******************************************************************/

voidTIM0init(void)//定时器0初始化

{

TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值

TH0=0x00;//重载值

TL0=0x00;//初始化值

ET0=1;//开中断

TR0=1;

}

/******************************************************************/

/*外部中断初始化*/

/******************************************************************/

voidEX0init(void)

{

IT0=1;//指定外部中断0下降沿触发,INT0(P3.2)

EX0=1;//使能外部中断

EA=1;//开总中断

}

/******************************************************************/

/*红外键值处理*/

/******************************************************************/

voidIr_work(void)//红外键值散转程序

{

TimeNum[5]=Tab[IRcord[0]/16];//处理客户码并显示

TimeNum[6]=Tab[IRcord[0]%16];

TimeNum[8]=Tab[IRcord[1]/16];//处理客户码并显示

TimeNum[9]=Tab[IRcord[1]%16];

TimeNum[11]=Tab[IRcord[2]/16];//处理数据码并显示

TimeNum[12]=Tab[IRcord[2]%16];

TimeNum[14]=Tab[IRcord[3]/16];//处理数据反码并显示

TimeNum[15]=Tab[IRcord[3]%16];

ShowString(1,TimeNum);//显示处理过后的码值

irpro_ok=0;//处理完成后清楚标志位

}

/******************************************************************/

/*红外解码函数处理*/

/******************************************************************/

voidIrcordpro(void)//红外码值处理函数

{

unsignedchari,j,k;

unsignedcharcord,value;

k=1;

for(i=0;i<4;i++)//处理4个字节

{

for(j=1;j<=8;j++)//处理1个字节8位

{

cord=irdata[k];

if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差

{

value=value|0x80;

}

else

{

value=value;

}

if(j<8)

{

value=value>>1;

}

k++;

}

IRcord[i]=value;

value=0;

}irpro_ok=1;//处理完毕标志位置1

}

 

/******************************************************************/

/*微秒延时函数*/

/******************************************************************/

voidDelayUs(unsignedcharus)//delayus

{

unsignedcharuscnt;

uscnt=us>>1;/*Crystalfrequencyin12MHz*/

while(--uscnt);

}

/******************************************************************/

/*毫秒函数声明*/

/******************************************************************/

voidDelayMs(unsignedcharms)//delayMs

{

while(--ms)

{

DelayUs(250);

DelayUs(250);

DelayUs(250);

DelayUs(250);

}

}

/******************************************************************/

/*写入命令函数*/

/******************************************************************/

voidWriteCommand(unsignedcharc)

{

DelayMs(5);//操作前短暂延时,保证信号稳定

E=0;

RS=0;

_nop_();

E=1;

Data=c;

E=0;

}

/******************************************************************/

/*写入数据函数*/

/******************************************************************/

voidWriteData(unsignedcharc)

{

DelayMs(5);//操作前短暂延时,保证信号稳定

E=0;

RS=1;

_nop_();

E=1;

Data=c;

E=0;

RS=0;

}

/******************************************************************/

/*写入字节函数*/

/******************************************************************/

voidShowChar(unsignedcharpos,unsignedcharc)

{

unsignedcharp

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

当前位置:首页 > 人文社科 > 教育学心理学

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

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