红外遥控系统毕业设计.docx
《红外遥控系统毕业设计.docx》由会员分享,可在线阅读,更多相关《红外遥控系统毕业设计.docx(20页珍藏版)》请在冰豆网上搜索。
红外遥控系统毕业设计
《单片机设计》课程设计
题目:
基于单片机的红外遥控系统设计
专业:
电气工程系
班级:
姓名:
学号:
指导老师:
小组成员:
成绩:
摘要
随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的遥控系统开始进入了人们的生活。
采用单片机进行遥控系统的应用设计,具有编程灵活多样、操作码个数可随便设定等优点。
由于单片机具有集成度高、体积小、可靠性高、价格便宜等优点,其在机电一体化、工业控制、仪器仪表和家用电器等领域得到了广泛应用。
当前单片机对家用电器控制呈现出外形简单化、功能多样化、产品智能化的发展趋向。
红外遥控技术具有使用方便、功耗低、抗干扰能力强、价格便宜的特点,因此它的应用前景十分广阔。
本课题以延伸红外无线遥控技术为目的,提出了一种红外遥控器集中控制的方案,核心是设计出一个红外接收系统。
本设计以红外线作为传递信息的载体,可对受控对象的工作状态进行短距离无线控制,适用于遥控工业、医疗、家用电器等设备的开闭状态。
并含有设备计数模块,可对处于工作状态的设备进行计数,并显示出来。
课题的重点在于通过软件实现二进制数据的解码工作,然后通过红外收发头进行数据传输控制系统。
关键词:
红外遥控;单片机控制;显示模块
1引言
1.1课题研究的目的
本设计主要研究并设计一个基于单片机的红外发射及接收系统,实现对温度控制、蜂鸣器、LED灯的隔离控制。
控制系统主要是由MCS-51系列单片机、集成红外发射遥控器、红外接收电路、LCD显示电路,温度控制电路等部分组成,发射遥控信号经红外接收处理传送给单片机,单片机根据不同的信息码控制温度报警,并完成相应的状态指示。
红外遥控是一种无线、非接触控制技术、具有抗干扰能力强,信息传输可靠,功耗低,成本低,易于实现等显著优点,被诸多电子设备特别是家用电器广泛采用。
1.2基于单片机的红外遥控系统概述
当今社会科学技术的发展与日俱增,人们生活水平也是日益提高,为了减少人们的工作量,所以对各种家用电器、电子器件的非人工控制的要求越来越高,针对这种情况,设计出一种集成度比较高的控制体系是必然的。
现代科技的飞速发展在许多危险、不可近场合也对远程控制提出了越来越高的要求。
单片机是指一个集成在一块芯片上的完整计算机系统。
尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:
CPU、内存、内部和外部总线系统,目前大部分还会具有外存。
同时集成诸如通讯接口、定时器,实时时钟等外围设备。
而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。
使用红外线做信号载波的优点很多:
成本低、传播范围和方向可以控制、不产生电磁辐射干扰,也不受干扰等等。
因此被广泛地应用在各种技术领域中。
由于红外线为不可见光,因此对环境影响很小,再由红外光波动波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电器,也不会影响临近的无线电设备。
最典型的应用就是家电遥控器。
红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在设计家用电器的红外线遥控器时,不必要像无线电遥控器那样,每套(发射器和接收器)要有不同的遥控频率或编码(否则,就会隔墙控制或干扰邻居的家用电器)。
同类产品的红外线遥控器,也可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。
这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方面。
2设计任务及要求
2.1红外遥控系统的设计与实现任务,主要完成:
(1)对红外遥控温度系统进行硬件设计和软件流程设计,分为主程序设计,数据处理,温度显示程序设计、LED灯和蜂鸣器的开关控制程序设计等;
(2)设计LED灯和蜂鸣器的开关控制
(3)软件的调试,功能仿真,画出红外遥控系统的电路原理图。
(4)完成实物,实现功能
2.2红外遥控系统的设计要求:
本设计主要研究并设计一个基于单片机的红外发射及接收系统,实现对温度控制的隔离控制。
控制系统主要是由MCS-51系列单片机、集成红外发射遥控器、红外接收电路、LCD显示电路,温度控制电路等部分组成,发射遥控信号经红外接收处理传送给单片机,单片机根据不同的信息码控制温度报警,并完成相应的状态指示。
(1)温度传感器对周围环境温度进行检测;
(2)遥控最远距离8到10m;
(3)工作频率为38KHz,即红外发射和接收的载频为38KHz;
(4)接收端可显示受控状态以及输入控制数据;
(5)显示程序的设计,用4位数码管显示所测得的温度值;
(6)LED灯和蜂鸣器控制程序设计,根据按键进行相应的处理。
3红外遥控系统的硬件设计
3.1本设计方案思路
本设计主控芯片采用目前比较通用的MCS-51系列单片机。
此类单片机的运算能力强,软件编程灵活,自由度大,市场上比较多见,价格便宜且技术比较成熟容易实现。
红外传输利用载波对信号进行调制从而减少信号传输过程中的光波干扰,提高数据传输效率。
由遥控器将键盘信息及系统识别码等数据调制在红外载波上经红外发射头发射出去。
接收方由红外一体化接收头实现对接收信号的放大解调并还原为数据流,经由单片机解码后对相关IO口进行操作(如图1)。
图1红外线遥控系统框图
3.2研发方向和技术关键
(1)合理设计硬件电路,使各模块功能协调;
(2)红外接收信号的脉冲波形;
(3)红外接收信号的编解码;
(4)单片机对IO口的操作;
3.3系统硬件电路的总体设计
3.3.1红外遥控系统
红外遥控系统是集中集光、电于一体的系统。
其工作原理是用户按键信号经单片机编码处理后转化为脉冲信号,经由红外发射头发送出去;接收端由红外一体化接收头实现对接收信号的放大解调并还原为数据流,经由单片机解码后对相关IO口进行操作,从而完成整个遥控操作。
整个系统主要是由51单片机基本电路、红外接收电路、LCD显示电路,温度控制电路等部分组成。
系统硬件由以下几部分组成:
红外数据发射遥控器。
红外数据接收则是采用HX1838一体化红外接收头,内部集成红外接收、数据采集、解码的功能,只要在接收端INT0检测头信号低电平的到来,就可完成对整个串行的信号进行分析得出当前控制指令的功能。
然后根据所得的指令去操作相应的用电器件工作,如图2所示。
图2系统总体结构框图
3.3.1单片机最小系统
单片机的最小系统主要包括:
晶振电路、复位电路等。
(1)晶振电路,即为时钟振荡器,本设计采用12Mhz的晶振。
如图2-1所示。
(2)
图3-1晶振电路
(2)RST:
复位输入。
如图3-2所示。
图3-2单片机复位电路
(3)单片机系统。
如图3-3所示。
3.3.2红外遥控发射模块原理
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。
发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。
遥控发射器专用芯片很多,根据编码格式可以分成脉冲宽度调制和脉冲相位调制两大类,这里我们以运用比较广泛,解码比较容易的脉冲宽度调制来加以说明,组成发射电路编码原理。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:
图2遥控码“0”和“1”
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;
以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”。
上述“0”和“1”组成的42位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。
然后再通过红外发射二极管产生红外线向空间发射,7461产生的遥控编码是连续的42位二进制码组,其中前26位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。
后16位为8位的操作码和8位的操作反码用于核对数据是否接收准确。
图3红外发射码
当遥控器上任意一个按键按下超过36ms时,芯片的振荡器使芯片激活,将发射一个特定的同步码头,对于接收端而言就是一个9ms的低电平,和一个4.5ms的高电平,这个同步码头可以使程序知道从这个同步码头以后可以开始接收数据。
3.3.3红外接收模块
遥控接收器是根据接收到的不同频率的红外光信号,由CPU转化为对应的控制功能对控制电路实施控制。
当接收电路接收到第一个红外线脉冲时,中断INT1被触发,启动定时器1和计数器0。
定时器1作为计数时间控制器,计数器0作为在规定记数时间内所记得的红外脉冲数。
接收信号端接至P3.3和P3.4口,该两引脚为复用引脚,P3.3引脚复用为外部中断1请求输入端;P3.4引脚复用为定时器/计数器0计数脉冲输入端。
图红外接收器
红外编码标准
发射端所发射的一帧码含有一个引导码、8位用户码、8位用户反码,8位键数据码、8位键数据反码。
引导码由一个9ms的高电平和4.5ms的低电平组成。
当按下持续时间超过108ms时,则发送简码(简码由9ms高电平和2.25ms的低电平组成)来告之接收端是某一个按一直按着,象电视的音量和频道切换键都有此功能,简码与简码之间相隔是108ms。
“1”和“0”的区分采用脉冲位置调制方式(PPM)。
二进制信号的调制
二进制信号的调制仍由发送单片机来完成,如图9所示,A是二进制信号的编码波形,B是频率为38KHz(周期为26μs)的连续脉冲,C是经调制后的间断脉冲串(相当于C=A×B),用于红外发射二极管发送的波形。
图9中,待发送的二进制数据为101。
二进制信号的解调
二进制信号的解调由一体化红外接收头VS1838B来完成,它把接收到的红外信号(图10中波形D,也是图9中波形C)经内部处理并解调复原,在输出脚输出图10中波形E(正好是对图9中波形A的取反),VS1838B的解调可理解为:
在输入有脉冲串时,输出端输出低电平,否则输出高电平。
可直接与单片机串行输入口及外中断相联,以实现随时接收遥控信号并产生中断,然后由单片机对编码还原。
图10红外接收头接收及输出波形
二进制信号的解码
二进制信号的解码由接收单片机来完成,它把红外接收头送来的二进制编码波形通过解码,还原出发送端发送的数据。
如图10,把波形E解码还原成原始二进制数据信息101。
3.3.4LED模拟外围设备模块
发光二极管(LED)在电路及仪器中作为指示灯。
74HC573八进制3态非反转透明锁存器。
输入是和标准CMOS输出兼容的;加上拉电阻,他们能和LS/ALSTTL输出兼容。
当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。
当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
3.3.5液晶显示模块
1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD。
1602LCD主要技术参数主要技术参数主要技术参数主要技术参数:
显示容量:
16×2个字符芯片工作电压:
4.5—5.5V工作电流:
2.0mA(5.0V)模块最佳工作电压:
5.0V字符尺寸:
2.95×4.35(W×H)mm
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。
图:
1602液晶显示模块
元件清单
序号
元器件
数量
数值
作用
1
R1
1
10kΩ
复位电阻
2
C1
1
10uF
电解电容(复位)
3
C2,C3
2
30pF
振荡瓷片电容
4
晶振
1
12MHz
晶振
5
STC89C52
1
单片机芯片
6
活动IC座(40脚)
1
7
排阻
1
8
HXD蜂鸣器
1
模拟外围器件
9
LED灯
4
模拟外围器件
10
R1-R4
4
100Ω
LED限流电阻
11
1602
1
显示模块
12
HX1838
1
红外接收器
4红外遥控系统的软件设计
4.1主控程序
主控程序很简单,主程序主要是对软硬件环境进行初始化,如在中断服务入口地址添加跳转,跳转到所需要执行的中断服务程序、对所用到的P1,P2口进行初始化,设置外部中断0为下降沿触发,并开中断,然后循环等待外部中断。
4.2遥控发射部分
红外遥控信号的发射是由LC7461芯片组成发射电路嵌入在遥控器中,本设计的重点在于对它发射的红外信号进行解码识别,进而完成相应的控制。
其中发射部分程序固化在遥控器芯片中,当我们按键,会自动执行编码程序,并进行调制和发射。
本遥控发射器采用脉冲宽度调制方式,当不同的指令键被按下时,指令信号电路产生不同脉冲编码的指令信号,也就是进行编码,然后经调制电路调制,用不同的脉宽来区分“0”和“1”,产生连续42位二进制码组,其中前26为用户识别码,能区别不同的红外遥控设备,后16位为8位的操作码和8位的操作反码用于区别按键,再由驱动电路驱动红外发射器发射红外信号。
整体过程如下:
图3.1遥控发射部分过程图
4.3遥控接收处理部分
当解码成功之后,内存单元1AH中存放的就是我们所按键的键值,根据键值我们查表取出控制字,可以转移到相应的控制程序,这里为了简便,用控制字开控制开关,当红色开关键时,调用子程序来开关系统,当按下数字键时,对应的小灯会亮,如按键1,则第一个小灯亮。
5测试结果及分析
5.1实验仪与计算机的连接
将实验仪与计算机通过串行口COM1进行连接,并进行相应的配置,设置波特率,编写简单的程序,如果能够通过计算机对实验仪进行操作,可表示连接正确。
可以往下进行试验。
5.2硬件系统的调试
要检查我们要使用的一些硬件资源是否完好,是否可用。
检查所用到的小灯,蜂鸣器是不是能够控制,检查P2口,P1口,P3口是不是能够控制输入输出,检查红外接收器是不是能够实现接收,检查P3.2口是不是能引发外部中断。
对于本试验要用到的遥控器,也要确定是否可用,是否能正确的发射红外信号。
通过简单的调试,确定所用资源都可用时,可接着进行软件系统的调试。
5.3软件系统的调试
当编写好程序之后,运行不能达到所要的效果,就要检查是不是程序出了问题,通过设置断点,单步运行,了解程序的走向,找出出错的地方,进行修改。
通过不断地试验修改,程序终于可以实现所预期的效果。
6总结与体会
通过这次的课程设计,让我明白到,理论和实操是两个不同的概念。
我们不
能一味的依照原本的原理图来操作,要根据实际情况对电路图进行修改。
这次课程设计是以自己动手动脑,并亲手设计、制作、组装与调试为特色的。
它将基本技能训练,基本工艺知识和创新启蒙有机结合,培养我们的实践能力和创新精神,作为信息时代的大学生,仅会书本理论是不够的,基本的动手能力是一切工作和创造的基础和必要条件。
这次课程设计中我主要负责方案设计、仿真及后期调试。
通过proteus软件对电路进行设计,仿真。
在这一次的课程设计中,我们小组分工合作,良好地完成了红外控制系统设计。
在最后的组装和调试中,则让我们深刻意识到,理论上能行到,到了实践的时候很有可能就会出各种问题,比如这次,我们的程序在开发板上能正常运行,但到了自己焊接的板上就运行不了,最后踩发现原来是外部中断的端口设置出了问题。
此外调试的时候虽然是最困难的,也是一个比较烦的环节,由于误差等各方面的原因,显示模块浓度调试出现了较大的问题,难以调出理想的显示,最后经过努力,基本能显示。
总的来说,这一次的试训获益良多,首先是培养了我们小组合作的精神,其次是加深了对单片机功能的认识,也让自己编程能力得到了提高,最重要的是提高了自己的动手能力,能让自己学到的知识用到现实的成品中,让我对这个专业更加有兴趣,使我以后学校更加有动力。
这次课程设计,让我了解到那些实操的理论也只是纸上谈兵,真正实操起来,很多的知识都不够扎实,所以遇到问题的时候我们不断地翻阅书本,询问老师,在这过程中,学习到了不少的新知识。
感谢王哲老师的悉心指导,多次与我们开座谈会,同时为我们搜集提供了重要资料,使得课程设计的圆满成功。
老师辛苦了,我衷心地感谢老师您。
参考文献
[1]《基于Proteus的单片机应用技术》主编:
江世明(电子工业出版社)2009.6
[2]《51单片机开发与应用基础教程(c语言版)》主编:
刘剑 刘奇穗(中国电力出版社)2011.10
[3]《数字电子技术基础》主编:
余孟尝(高等教育出版社)2009.7
[4]《传感器原理与应用》主编:
黄贤武郑筱霞(高等教育出版社)2008.7
7附录程序代码
//本解码程序适用于NEC的upd6121及其兼容芯片的解码,支持大多数遥控器实验板采用11.0592MHZ晶振
#include//包含单片机寄存器的头文件
#include//包含_nop_()函数定义的头文件
#include"lcd_1602.h"//1602头文件
#include"beep.h"//蜂鸣器响一声头文件
#include"Digital-18B20.h"//包含18B20头文件
sbitIR=P3^2;//将IR位定义为P3.2引脚
sbitdu=P2^6;//573锁存器锁存?
sbitD1=P1^0;//白色灯
sbitD2=P1^2;//绿色灯
sbitD3=P1^4;//蓝色灯
sbitD4=P1^6;//红色灯
unsignedchara[4];//储存用户码、用户反码与键数据码、键数据反码
unsignedintLowTime,HighTime;//储存高、低电平的宽度
/************************************************************
函数功能:
对4个字节的用户码和键数据码进行解码
说明:
解码正确,返回1,否则返回0
出口参数:
dat
*************************************************************/
bitDeCode(void)
{
unsignedchari,j;
unsignedchartemp;//储存解码出的数据
for(i=0;i<4;i++)//连续读取4个用户码和键数据码
{
for(j=0;j<8;j++)//每个码有8位数字
{
temp=temp>>1;//temp中的各数据位右移一位,因为先读出的是高位数据
TH0=0;//定时器清0
TL0=0;//定时器清0
TR0=1;//开启定时器T0
while(IR==0)//如果是低电平就等待
;//低电平计时
TR0=0;//关闭定时器T0
LowTime=TH0*256+TL0;//保存低电平宽度
TH0=0;//定时器清0
TL0=0;//定时器清0
TR0=1;//开启定时器T0
while(IR==1)//如果是高电平就等待
;
TR0=0;//关闭定时器T0
HighTime=TH0*256+TL0;//保存高电平宽度
if((LowTime<400)||(LowTime>600))
return0;//如果低电平长度不在合理范围,则认为出错,停止解码
if((HighTime>400)&&(HighTime<600))//如果高电平时间在560微秒左右,即计数560/1.085=516次
temp=temp&0x7f;//(520-100=420,520+100=620),则该位是0
if((HighTime>1300)&&(HighTime<1700))//如果高电平时间在1680微秒左右,即计数1680/1.085=1548次
temp=temp|0x80;//(1550-250=1300,1550+250=1800),则该位是1
}
a[i]=temp;//将解码出的字节值储存在a[i]
}
if(a[2]==~a[3])//验证键数据码和其反码是否相等,一般情况下不必验证用户码
return1;//解码正确,返回1
}
/*------------------二进制码转换为压缩型BCD码,并显示---------------*/
voidtwo_2_bcd(unsignedchardate)
{
unsignedchartemp;//temp临时存放待转码数据
temp=date;
date&=0xf0;
date>>=4;//右移四位得到高四位码
date&=0x0f;//与0x0f相与确保高四位为0
if(date<=0x09)
{
WriteData(0x30+date);//lcd显示键值高四位
}
else
{
date=date-0x09;
WriteData(0x40+date);
}
date=temp;
date&=0x0f;
if(date<=0x09)//小于9,+30H为ASC码0-9
{
WriteData(0x30+date);//lcd显示低四位值
}
else
{
date=date-0x09;//大于9,A以上,-09H求补,再加40H对应
WriteData(0x40+date);//ASC码大写字母
}
WriteData(0x48);//显示字符'H'
}
/************************************************************
函数功能:
1602LCD显示
*************************************************************/
voidDisp(void)
{
WriteAddress(0x40);//设置显示位置为第二行的第1个字
two_2_bcd(a[0]);
WriteData(0x20);//写入空白符做间隔
two_2_bcd(a[1]);
WriteData(0x20);
two_2_bcd(a[2]);
WriteData(0x20);
two_2_bcd(a[3]);
}
/***********************************************************
函数功能:
LED闪烁LED_Flash
入口参数:
unsignedchara
***********************************************************/
void