《基于单片机的红外遥控系统设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的红外遥控系统设计.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 课程设计基于单片机的红外遥控系统设计学院:电脑与通信工程学院专业:通信工程班级:通信11-3班:学号:摘要 本设计采用51单片机作为遥控发射接收芯片,HS003B作为红外一体化接收发射管,在此基础上设计了一个简易的智能红外遥控系统。系统包括接收和发射两大部分,发射部分有16个按键,接收部分含有8盏彩色LED灯、一片二位数码管和蜂鸣器系统。发射部分通过键盘扫描判断哪个键被按下,经过单片机编码程序进行编码,控制红外发射电路发送信号。接收部分解码信号,实现相应的输出。本设计方案结合红外遥控设计简单、作方便、成本低廉等特点。关键字: 红外遥控 信号调制 编码 解码 目录摘要II1.绪论1课题目的和意
2、义1红外线简介1红外遥控系统简介12 课题方案和设计思路2总体方案2红外发射器设计3红外发射器原理3红外编码3红外接收端设计43硬件结构设计与介绍53.1 AT89C51系列单片机功能特点53.1.1 主要特性53.1.2 管脚说明5基本电路73.2 红外发射电路8红外接收电路设计93.3.1 红外接收模块9数码管93.3.3 彩灯系统10蜂鸣器系统11红外接收端电路图124 软件设计124.1 定时/计数器功能简介124.2 遥控码的发射134.3 红外接收145.课程设计总结和心得15参考文献16附录17附录1 Proteus仿真图17附录2 发射程序17附录3 接收程序20学习文档 仅供
3、参考 随着科技的发展,人们生活的节奏也越来越快,随之人们对方便,快捷的要求也随之不断增高。遥控器的出现,在一定程度上满足了人们这个要求。遥控器是由高产的发明家Robert Adler在五十年代发明的1。而红外遥控是20世纪70年代才开始发展起来的一种远程控制技术,其原理是利用红外线来传递控制信号,实现对控制对象的远距离控制,具体来讲,就是有发射器发出红外线指令信号,有接收器接收下来并对信号进行处理,最后实现对控制对象的各种功能的远程控制。红外遥控具有独立性、物理特性与可见光相似性、无穿透障碍物的能力及较强的隐蔽性等特点。随着红外遥控技术的开发和迅速发展,很多电器采用该项技术,使人们的生活更加便
4、捷。本小组通过红外遥控技术来控制多盏彩灯的亮灭情况,实现各种花型以及数码管的数值显示。通过本课题的设计,更好的理解红外线的编码解码方式及其红外遥控系统的其他工作原理。简介红外线又称红外光波,在电磁波谱中,光波的波长范围为0.01um1000um。根据波长的不同可分为可见光和不可见光,波长为的光波可为可见光,依次为红、橙、黄、绿、青、蓝、紫七种颜色。光波为的光波为紫外光(线),波长为0.76um1000um的光波为红外光(线)。红外光按波长范围分为近红外、中红外、远红外、极红外4类。红外线遥控是利用近红外光传送遥控指令的,波长为。用近红外作为遥控光源,是因为目前红外发射器件(红外发光管)与红外接
5、收器件(光敏二极管、三极管及光电池)的发光与受光峰值波长一般为,在近红外光波段内,二者的光谱正好重合,能够很好地匹配,可以获得较高的传输效率及较高的可靠性。红外遥控系统主要由遥控发射器、一体化接收头、单片机、接口电路组成,遥控器用来产生遥控编码脉冲,驱动红外发射管输出红外遥控信号,遥控接收头完成对遥控信号的放大、检波、整形、解调出遥控编码脉冲。遥控编码脉冲是一组串行二进制码,对于一般的红外遥控系统,此串行码输入到微控制器,由其内部CPU完成对遥控指令解码,并执行相应的遥控功能。使用遥控器作为控制系统的输入,需要解决如下几个关键问题:如何接收红外遥控信号;如何识别红外遥控信号以及解码软件的设计、
6、控制程序的设计。红外遥控是单工的红外通信方式,整个通信中,需要一个发射端和一个接收端。发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号。红外接收端普遍采用价格廉价,性能可靠的一体化红外接收头接收红外信号,它同时对信号进行放大、检波、整形,得到TTL。 2 课题方案和设计思路总体方案 红外遥控系统一般由红外发射装置和红外接收设备两大部分组成,图2为所示为结构框图。 VCCINTOAT89C51GND +5V红外接收器一体化接收器 Vcc红外发射电路遥控键盘 OUT 图2-1 系统结构框图红外发射装置又由键盘电路、红外编码芯片、电源和红外发射电路组成。红
7、外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。红外发射器设计由于指令数据时间周期较长,信号频率很低,直接发射传送效率和距离受限,抗干扰性差,因此,必须采用二次调制方式,将指令数据通过载波信号进行调制,形成较高频率的复合信号,在通过红外发射二极管产生红外线发射出去。键盘 编码调制红外发射38KHz载波发生器 图2-2 红外遥控发射原理框图红外编码有很多种方式,本课题采用脉冲宽度调制方案,这种遥控码具有以下特征: 以脉宽为、间隔、周期为的组合表示二进制的“0”;以脉宽为、间隔、周期为的组合表示二进制的“1”。 波形如下列图。位“0” 位“1”图2-3 位“0”和位“1”波形图 在此
8、介绍较普遍使用的NEG标准。其数据格式包括引导码、用户码、数据码和数据反码,编码共占32位。数据反码是数据码反相后的编码,编码用于对数据的纠错。 9ms 4.5ms C0-C7 C0-C7 D0-D7 D0-D7 起始引导码 用户码 用户码 数据码 数据码 8bit 8bit 8bit 8bit 13.5ms 18-36ms 27ms 图2-4 数据格式 接收端主要包括红外接收模块和解调单片机。其中,红外线接收模块包括光电转换放大器和解调电路。当红外线发射信号进入模块后,在其输出端得到原先的数字控制编码,再经过单片机解码程序进行解码,便知按下那个键,实现相应输出。P0.0连接蜂鸣器系统,每成功
9、接收到信号,蜂鸣器发出一声响声。P1口连接8盏彩灯,接收数据不同彩灯的花色不同,P2口、P3.0和P3.1连接一片二位数管,数码管显示从01到16的数值,分别对应发射部分的16个按键。红外接收端数码管显示 AT89C51蜂鸣器系统8盏LED彩灯+5V电源 图2-5 接收部分原理框图 3硬件结构设计与介绍 AT89C51系列单片机功能特点3.1.1 主要特性与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 可编程串行通道 低功耗的闲置
10、和掉电模式片内振荡器和时钟电路 3.1.2 管脚说明 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P1口的管脚写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入“1”后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
11、在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收输出4个TTL门电流,当P2口被写“1”时,其管脚电位被内部上拉电阻拉高,且作为输入。作为输入时,P2口的管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O
12、口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下所示:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 (外部中断0)P3.3 (外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 (外部数据存储器写选通)P3.7 (外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
13、:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 :外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期两次有效。但在访问外部数据存储器时,这两次有效的
14、信号将不出现。:当保持低电平时,访问外部ROM;注意加密方式1时,将内部锁定为RESET;当端保持高电平时,访问内部ROM。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出在XTAL1和XTAL2之间接一只石英振荡晶体构成了单片机的时钟电。AT89C51复位引脚RST/VP通过片内一个施密特触发器(抑制噪声作用)与片内复位电路相连,施密特触发器的输出在每一个机器周期由复位电路采样一次。当振荡电路工作,并且在RST引脚上加一个至少保持2个机器周期的高电平时,就能使AT89C51完成一次复位
15、。复位不影响RAM的内容。复位后,PC指向0000H单元,使单片机从起始地址0000H单元开始重新执行程序。所以,当单片机运行出错或进入死循环时,可按复位键重新启动。MCS-51单片机通常采用上电自动复位和按钮复位两种复位方式。上电复位利用电容器充电来实现。按钮复位又分为按钮电平复位和按钮脉冲复位。前者将复位端通过电阻与Vcc相接;后者利用RC微分电路产生正脉冲来到达复位目的。复位电路参数的选择应能保证复位高电平持续时间大于2个机器周期。 图3-1 AT89C51基本电路3.2 红外发射电路本遥控发射器采用脉冲宽度调制红外遥控方式,脉冲宽度调制红外遥控就是指令信号产生电路以不同的脉冲编码代表不
16、同的控制指令。在确定选择AT89C51作为本设计发射电路核心芯片和点触式开关作为控制键后,加上一个简单红外发射电路和12M晶体震荡器便可实现红外发射。发射部分的主要元件为红外发光二极管。它实际上是一只特殊的发光二极管,由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它发出的便是红外线而不是可见光。目前大量使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通5发光二极管相同,只是颜色不同6。遥控发射通过键盘,每按下一个键,即产生具有不同的编码数字脉冲,这种代码指令信号调制在38KHz的载波上,激励红外光二极管产生不同的脉冲,通过空间的传送到受控机的遥控接收器。P1口作
17、为按键部分,P3.6口作为发射部分。独立式键盘可工作在查询方式下,通过I/O口读入键状态,当有键被按下时I/O口变为低电平,而未被按下的键对应为高电平,这样通过读电平状态可判断是否有键按下和哪个键被按下。 图3-2 红外发射端电路 3.3.1 红外接收模块HS003B是一种常见的红外接收模块。红外接收模块内部含有高频的滤波电路,专门用来滤除红外合成信号的载波信号38KHz,并送出接收到的信号。模块有3个引脚;引脚1GND为接地端;引脚2VCC为为电源正极;引脚3OUT为数字信号输出端。 1 2 3 图3-3 HS003B红外接收模块 表3-1 七段LED字形码显示字符共阳极字符码共阴极字符码0
18、3FHC0H106HF9H25BHA4H34FHB0H466H99H56DH92H67DH82H707HF8H87FH80H96FH90H 图3-4 二位数码管显示器设计中用到型号为7SEG-MAX2-CA-BLUE的二位共阳极数码管显示器。它的左下侧的ABCDEFG DP是LED数码管显示器的I/O口,是段选信号,右下侧的12是它的位选信号,就是从左到右分别是第一位到第二位,段选信号与位选信号分别接到单片机的不同输出口,例如段选信号可以接到P2口,位选信号可以接到P3.0口和P3.1口,共阳极的字形显示代码为:unsigned char=0xc0, 0xf9,0xa4,0xb0,0x99,0
19、x92,0x82,0xf8,0x80,0x90,P3.0输出为0,P3.1输出为1时,选中第二位,段选信号就执行从0到9的显示,P3.0输出为1,P3.1输出为0时,选中第一位,段选信号就执行从0到9的显示。3.3.3 彩灯系统P1口连接8盏彩灯,P1.0和P1.4连接的是LED-RED,P1.1和P1.5连接的是LED-YELLOW,P1.2和P1.6连接的是LED-GREEN,P1.3和P1.7连接的是LED-BLUE。根据接收到的信号显示不同的花型。 图3-5 彩灯系统连接图 P0.0连接蜂鸣器系统,每成功接收到信号,蜂鸣器发出一声响声。 图3-6 蜂鸣器系统连接图 图3-7 红外接收端
20、电路图 4 软件设计4.1 定时/计数器功能简介AT89C51单片机内部设有两个16位可编程的定时/计数器,简称定时器0和定时器1,分别用T0和T1表示。其功能同一般定时计数器,主要作用是:第一,作为一段特定时间长短的定时;第二,可以计算由T1或T0引脚输入的脉冲数,前者在应用上可以产生正确的时间延迟及定时去执行中断服务程序,而后者则是计数器或者计频器的设计。这两个定时器本身有四种工作模式可供使用,如表2所示。表4-1 四种工作模式M1 MO工作方式功能说明0 0模式013位计数器 0 1模式116位计数器1 0模式28位自动重装计数器1 1模式3定时器0:分成两个8位计数器定时器1:停止计数
21、4.2 遥控码的发射当某个操作按键按下时,单片机先读出键值,然后根据键值设定遥控码的脉冲个数,再调制成38kHz方波由红外线发光管发射出去13。通常,红外遥控是将遥控信号二进制脉冲码调制在38KHz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去的。为了提高抗干扰性能和降低电源消耗,将上述的遥控编码脉冲对频率为38KHz周期为26us的载波信号进行脉幅调制PAM,再经缓冲放大后送到红外发光管,将遥控信号发射出去。红外信号发射过程:首先发射9ms高电平和4.5ms低电平的引导码,再发送16位地址码的前8位,16位地址码的后8位,8位按键数据和8位按键数据反码。在实践中,采用红外线
22、遥控方式时,由于受遥控距离,角度等影响,使用效果不是很好,如采用调频或调幅发射接收码,可提高遥控距离,并且没有角度影响。 发射控制程序由主程序和键扫描程序、编码发送程序组成,在主程序中,采用键扫描子程序完成各个按键的功能,遥控发射主程序的流程图开始系统初始化发送标志清零按键信息置位检测并获取按键值发送按键发送9ms起始码发送16位地址的前8位发送16位地址的后8位发送8位按键数据发送8位按键数据反码(a)红外发射主程序流程图 b红外数据发送子程序流程图 图4-1红外发射端程序流程图 4.3 红外接收 红外遥控解码程序主要工作为等待红外线信号出现,并跳过引导信号,搜集连续32位的编码数据,并存入
23、内存的连续空间。其位信号判别的原则是:以判断各个位的波宽信号来决定高低信号0或1。位解码原理如下:1) 解码为0:高电平宽度0.56ms+低电平宽度0.56ms。2) 解码为1:高电平宽度0.56ms+低电平宽度1.68ms。编码数据读取后,经过单片机将编码数据与键盘代码进行比对,即可解调出具体的按键值,便可知按下哪个键,而做出相应的控制处理,完成红外遥控的动作。 初始化开中断,显示初始化开始接收到按键信息实现相应控制输出中断开始接收到引导码开始接收数据数据码和数据反码是否相反成功接收,保存数据中断返回YYNNY(a) 红外接收主程序流程图 b红外接收中断子程序流程图 图4-2 红外接收端程序
24、流程图 这次课程设计耗用了2个星期的心血,从一开始确实定课题,到后来的资料查找、理论学习,再有就是调试和测试过程,这一切都使我的理论知识和动手能力进一步提高。通过本次红外系统的设计,我大有收获。从得到题目到查找资料,从proteus仿真的调试到失败后再一次全部重新开始在这一个充满挑战伴随挫折,充满热情伴随打击的过程中,我感触颇深,它已不仅是一个对我三学习知识情况和我的应用动手能力的检验,而且还是对我的钻研精神,面对困难的心态,做事的毅力和耐心的考验。我在这个过程中深刻的感受到了做课程设计的意义所在。这个课题的根本技术就是单片机控制技术,加部分外围电路来实现一些复杂的功能。可以根据要求改变软件来
25、实现功能的更新和扩展。本课题的重点、难点是:1 考虑电路实现原理以及与单片机的接口;2 红外发送与接收技术; 通过完成本课题,我了解并掌握了红外遥控技术的基本理论知识,更深入的掌握单片机在实际电路中的开发和应用。为以后从事单片机软硬件产品的设计开发打下了一定的基础,培养了从事产品研发的信心。 参考文献1单片机原理与应用及C51程序设计,夏维成 杨加国 编著,清华大学出版社。2 C语言程序设计第三版,谭浩强 编著,清华大学出版社。3 单片机系统设计与仿真基于Proteus,肖婧 编著, 北京航空航天大学出版社。4 DIY玩转51单片机, 王守中 编著,电子工业出版社。 5 单片机侧控技术应用实例
26、解析, 许江淳 陈显宁 陈焰 付丽霞 编著,中国电力出版社。6 单片机接口模块应用与开发实例详解, 薛小玲 刘志群 贾俊荣 编著, 北 京航空航天大学出版社。附录附录1 Proteus仿真图附录2 发射程序 #include #include #define uchar unsigned char #define uint unsigned int #define SBM 0x80 #define m9 (65536-9000) #define m4_5 (65536-4500) #define m1_6 (65536-1630) #define m_65 (65536-580) #defin
27、e m_56 (65536-560) #define m40 (65536-40000) #define m56 (65536-56000) #define m2_25 (65536-2250) sbit IR = P36; sbit LED = P37; uchar KEY(void);void SanZhuan(void);void ZZ(uchar x);void Z0(uchar temp);void TT0(bit BT,uint x);void YS(uchar time);void main(void) TMOD = 0x01; IR=1; while(1) SanZhuan()
28、;uchar KEY(void)uchar H,L; H=0; L=0; P1 = 0xf0; if(P1!= 0xf0) YS(10); if(P1!=0xf0) H = P1&0xf0; P1 = 0x0f; L = P1&0x0f; return (H+L); return 0;void SanZhuan(void) uchar v; v = KEY(); switch(v) case 0x77:ZZ(0x01);v=0;break; case 0xb7:ZZ(0x02);v=0;break; case 0xd7:ZZ(0x03);v=0;break; case 0xe7:ZZ(0x04
29、);v=0;break; case 0x7b:ZZ(0x05);v=0;break; case 0xbb:ZZ(0x06);v=0;break; case 0xdb:ZZ(0x07);v=0;break; case 0xeb:ZZ(0x08);v=0;break; case 0x7d:ZZ(0x09);v=0;break; case 0xbd:ZZ(0x10);v=0;break; case 0xdd:ZZ(0x11);v=0;break; case 0xed:ZZ(0x12);v=0;break; case 0x7e:ZZ(0x13);v=0;break; case 0xbe:ZZ(0x14
30、);v=0;break; case 0xde:ZZ(0x15);v=0;break; case 0xee:ZZ(0x16);v=0;break; default:v=0; void ZZ(uchar x) TT0(1,m9); TT0(0,m4_5); Z0(SBM); Z0(SBM); Z0(x); Z0(x); TT0(1,m_65); TT0(0,m40); while(KEY() TT0(1,m9); TT0(0,m2_25); TT0( 1,m_56); TT0(0,m40); TT0(0,m56); LED = !LED; LED = 1; void Z0(uchar temp)
31、uchar v; for (v=0;v= 1; void TT0(bit BT,uint x) TH0 = x8; TL0 = x; TF0=0; TR0=1; if(BT = 0) while(!TF0); else while(1) IR = 0; if(TF0)break; if(TF0)break; IR = 1; if(TF0)break; if(TF0)break; if(TF0)break; if(TF0)break; if(TF0)break; if(TF0)break; if(TF0)break; if(TF0)break; if(TF0)break; if(TF0)brea
32、k; TR0=0; TF0=0; IR =1; void YS(uchar time) uchar i,j; for(i=0; itime; i+) for(j=0; j247; j+)_nop_();附录3 接收程序#includesbit IRIN=P32;sbit SPK=P00;sbit RELAY=P27;sbit P3_0=P30;sbit P3_1=P31;unsigned char IRDATA7;unsigned char tab= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90;unsigned char X1,X2;v
33、oid IRZ();void XSQ();void main() EA=1; EX0=1; IT0=1; P1=0xff; P2=0xc0; P3_0=0; P3_1=0; SPK=1; IRIN=1; IRZ();XSQ();void delay(unsigned char x) unsigned char i; while(x-)for(i=0;i10;i+)void fs_d()unsigned char i; for(i=0;i100;i+) delay(4); SPK=SPK; SPK=1;void IR_IN() interrupt 0 using 0 unsigned char
34、j,k,n=0; EX0=0; delay(20); if(IRIN=1) EX0=1; return;while(!IRIN)delay(1); for(j=0;j4;j+) for(k=0;k=30) EX0=1; return;IRDATAj=IRDATAj1;if(n=8)IRDATAj=IRDATAj|0x80; n=0;if(IRDATA2!=IRDATA3)EX0=1; return;else fs_d();EX0=1;void XSQ() while(1) X1 = IRDATA2/16; X2 = IRDATA2%16; P3_0=1;P3_1=1;P2=tabX1;P3_0
35、=1;delay(200); P3_0=1;P3_1=0;P2=tabX2;delay(200);void IRZ() while(1) switch(IRDATA2) case 0x01:P1=0xee;break; case 0x02:P1=0xdd;break; case 0x03:P1=0xbb;break; case 0x04:P1=0X77;break; case 0x05:P1=0xf0;break; case 0x06:P1=0x0f;break; case 0x07:P1=0xaa;break; case 0x08:P1=0x55;break; case 0x09:P1=0xe7;break; case 0x10:P1=0xdb;break; case 0x11:P1=0xbd;break; case 0x12:P1=0x7e;break; case 0x13:P1=0xc3;break; case 0x14:P1=0x3c;break; case 0x15:P1=0x00;break; case 0x16:P1=0xff;break; X1 = IRDATA2/16; X2 = IRDATA2%16; P2=tabX2;P3_1=1;delay(10);P3_1=0; P2=tabX1;P3_0=1;delay(10);P3_0=0;学习文档 仅供参考