引言
人们的生活已经全面迈入了信息化的时代,使用红外遥控的家电种类开始增多,在日常生活中利用红外遥控来控制红外控制的家电种类非常的多,普通的家电就有:电视、DVD机、空调等,这些都是需要红外遥控进行控制的,但一个家电只能由厂家的配置的遥控器进行控制,而且只有对应的红外遥控发出的红外编码才能控制相关的红外家电。
为了探究红外遥控的内在原理并延伸红外遥控技术,本文利用平时所学的单片机原理及应用、传感器技术与应用、模拟电子技术和数字电子技术基础等相关电子专业知识,设计了一款基于STC89C52RC单片机的红外遥控系统。该红外遥控系统能够学习并记忆市场上的家电红外遥控器红外编码信号,可以融合多种红外遥控于一体,从而满足对多种红外遥控设备的集中控制。整个红外遥控系统功耗低,操作简单方便,性价比高,能较好的满足生活中人们对红外遥控器的需要。
- 课题背景
随着红外遥控技术快速发展让人们的生活变得越来越方便与快捷的同时,在平时的家居生活中使用的智能化家电也越来越多,同样,我们使用的红外遥控型号也越来越多样化,但是,一个红外遥控只能控制相对应的红外受控家电,家电多的家庭平时还因为遥控器多以及找不到相对应遥控器而烦恼,这时候,设计一款基于单片机红外遥控器设计系统,此系统要兼顾红外遥控的简单实用、操作方便和性价比高等特点,以满足人们生活中对遥控器的需要。
2 系统方案与功能指标
2.1 系统方案
图 0‑1系统硬件总体设计框图
基于单片机红外遥控器设计系统的整个硬件设计系统以STC89C52RC芯片作为系统的主控芯片,以4×4矩阵键盘作为基于单片机红外遥控器设计系统的控制输入模块,LCD1602液晶显示屏作为系统的输出显示模块,再利用STC89C52RC芯片通过UART协议以波特率9600波特与IR01红外收发模块进行通讯,控制IR01红外收发模块对红外遥控器的红外编码进行学习和发射。基于单片机红外遥控器设计系统的硬件设计图如上图2-1所示。
2.2 功能指标
- 利用单片机和红外学习模块进行设计;
- 选取合适的液晶显示屏显示;
- 红外遥控范围能在4到6米;
- 能对相应电器的遥控器进行学习,从而实现操控相应电器。
- 系统器件选型
- 主控芯片
基于单片机红外遥控器设计系统的主控芯片采用的是STC89C52RC芯片。STC89C52RC芯片是STC公司研发的新一代小型单片机,其在软件和硬件方面与MCS-51完全兼容,这个类型的单片机抗干扰能力强,数据传输速率快,具备高性能的同时,其功耗也低,为很多嵌入式控制系统提供了一个性价比较高的方案。
STC89C52RC芯片拥有以下特点:①STC89C52RC芯片可以工作在2.7V~6V电压范围,以及可以工作在-40°C~85°C的温度环境;②STC89C52RC芯片与MCS-51系列的单片机在指令系统和引脚上的分布完全兼容,意味着MCS-51系列的单片机在指令系统能在STC89C52RC芯片直接适用;③STC89C52RC芯片具有4K字节可反复编程快速擦写程序的内部RAM;④STC89C52RC芯片可以工作在频率范围为0Hz~24Hz之间全静态工作模式。
STC89C52RC芯片同时也具备丰富的芯片资源:①STC89C52RC芯片内部拥有128×8位的RAM;②STC89C52RC芯片拥有32位可以双向输入输出的功能引脚;③STC89C52RC芯片拥有两个16位的定时器和两个16位的计数器;④STC89C52RC芯片拥有5个中断源,5个中断源又分两级中断优先级;⑤STC89C52RC芯片拥有一个支持全双工的异步通讯串行口。
综合STC89C52RC芯片具有这些功能与特点,所 以STC89C52RC芯片是本基于单片机红外遥控器设计系统的主控芯片的不二之选。STC89C52RC直插芯片引脚资源分布图如下图3-1所示:
图 3‑1 STC89C52RC直插芯片引脚资源分布图
-
- 显示模块
根据自己目前所掌握的知识,初步认为以下两种的显示方案适合基于单片机红外遥控器设计系统:
方案1:
使用MAX7219 数码管显示模块作为基于单片机红外遥控器设计系统输出显示模块,MAX7219 数码管显示模块是一种共阴极显示驱动器,它连接微控制器与8位数字显示的7段数字LED显示。该显示模块的支持四线串行接口,可以并联多个MAX7219 型号的数码管,达到多个数码管同时使用,还不占用芯片资源的好处。
MAX7219 数码管显示模块支持10MHz连续串行口;该显示模块拥有独立的LED段选控制接口;该显示模块可以选择非译码与数字的译码等方式;该显示模块支持150uA的低功耗关闭模式;该显示模块是共阴极LED显示驱动;该显示模块可以限制回转电流的段驱动来减少EMI;该模块支持QSPI、MICROWIRE和SPI等多种串行接口;MAX7219 数码管显示模块可以工作在0°C~70°C的温度范围。MAX7219 数码管显示模块实物图如下图3-2所示:
图 3-2 MAX7219 数码管显示模块实物图
方案2:
使用LCD1602液晶显示模块作为基于单片机红外遥控器设计系统输出显示模块,LCD1602液晶显示模块作为电子爱好者平时电子制作中常用到的电子显示元器件,其是一种经常用来显示数字、字母和符号等的LCD显示模块,LCD1602液晶显示模块的1602表示该显示模块能显示的最多内容是16×2,简而言之就是说LCD1602液晶显示模块只能显示两行字符,每一行字符最多可以显示16个字符;LCD1602液晶显示模块工作在电压4.5V~5.5V之间;LCD1602液晶显示模块的额定工作电流为2.0mA(即也就是说额定电压5V,5V是LCD1602液晶显示模块的最佳工作电压);LCD1602液晶显示模块的字符尺寸为2.95×4.35(W×H)mm;模块分辨率为16×2×35,35为单个字符占用的点大小。LCD1602液晶显示模块实物如下图3-3所示:
图 3‑3 LCD1602液晶显示模块实物图
最后,通过两个显示模块的对比,MAX7219 数码管显示模块只能显示数字、一些常用的字母以及个别字符,而LCD1602液晶显示模块可以显示大多数的数字、字母和符号等,能更好的满足电子制作者的需求,所以基于单片机红外遥控器设计系统选用LCD1602液晶显示模块作为输出显示模块。
-
- 红外收发模块
对于基于单片机红外遥控器设计系统的红外接收方案,通过查资料和相关文献了解到的红外收发方案如下所示:
方案1:
利用普通的红外对管作为基于单片机红外遥控器设计系统的红外收发。红外对管分为红外发射头和红外接收头,我们知道红外线的光谱位于红色光之外,人的肉眼无法察觉,波长是0.76μm~1.5μm,比红光的波长还长。红外对管通过发射端的晶振产生与被控红外接收设备的相同的调制载波频率,进而控制被控红外接收设备。红外对管支持NEC解码,通过解码红外对管可以控制红外码段较简单和红外频段较低的红外设备。红外对管实物图如下图3-4所示:
图 3‑4 红外对管实物图
方案2:
使用IR01 红外遥控学习模块作为基于单片机红外遥控器设计系统的红外收发模块。IR01 红外遥控学习模块是一款可以学习的万能型红外遥控学习模块,它可以支持普通的NEC编码的红外遥控学习,也支持空调的长码编码的学习,它可以先学习红外遥控的编码,之后再利用以学习的键码发送出去,就能实现遥控器的复制或者集成到更智能的设备中。IR01 红外遥控学习模块可以通过简码串口控制,并配合上位机软件,就能轻松实现产品的开发,可以很大程度上降低新产品的开发难度。
IR01 红外遥控学习模块支持DC5V,100mA的供电方式,其中静态电流<1mA,发射电流为80mA;IR01 红外遥控学习模块可以控制半径10m内的红外设备;IR01 红外遥控学习模块采用标准的串口通信,即5V/3.3V的TTL电平,8位数据,1个停止位,0个奇偶校验位;IR01 红外遥控学习模块支持波特率为2400、4800、9600、19200和115200等波特率;IR01 红外遥控学习模块支持NEC、RC-5、PWM、PPM和空调码等绝大部分的红外遥控器;IR01 红外遥控学习模块支持的载波频率高达38KHz。IR01 红外遥控学习模块的应用范围也十分广泛,可以应用在智能家居产品,如:多功能遥控器魔方、万能遥控器等;也可以应用在工业控制产品,如空调控制器,温湿度机控制器,恒温恒湿控制器等。
IR01 红外遥控学习模块带有记忆存储芯片,具有掉电保护功能,不会因为单片机复位或者电源突然掉电/上电导致要重新解码;IR01 红外遥控学习模块可以反复的进行红外学习模块,可以通过上位机学习把已学习的红外编码导入或者导出,IR01 红外遥控学习模块是一个可以实现高效率研发、生产产品的红外学习模块。IR01 红外遥控学习模块实物图如下图3-5所示:
图 3‑5 IR01 红外遥控学习模块实物图
综上两个方案所述以及进行测试对比,普通的红外对管只能控制普通的红外遥控,稍微频段高一点的以及编码长一点的红外编码,就无法对红外设备进行解码控制;而IR01 红外遥控学习模块支持NEC、RC-5、PWM、PPM和空调码等绝大部分的红外遥控器。在当前来说,市场上的红外接收家电的红外编码都不一样,频段也不一样,普通的红外接收管难以满足本设计的需求,IR01 红外遥控学习模块更适合本基于单片机红外遥控器设计系统的需要,并且IR01 红外遥控学习模块自带记忆存储芯片,具有掉电保护功能,不会因为单片机复位或者电源突然掉电/上电导致要重新解码,IR01 红外遥控学习模块开发效率也高,对于研发人员来说也非常友好,所以IR01 红外遥控学习模块非常适合本设计的需要。
- 系统硬件电路设计
4.1 主控系统电路
图 4‑1 主控系统电路图
主控电路由STC89C52RC直插芯片、电源指示灯模块、复位电路、起振电路以及上拉排阻组成一个最小系统。复位电路采用了一个10K直插电阻和一个10uF的铝电解电容,由此可以计算出系统的复位时间为T=RC=10000(10K)×0.00001F(10uF)=100ms;起振电路采用的是11.0592MHz的晶振芯片和两个22pF的独石电容组成,选择晶振11.0592MHz是因为它能够准确的划分时钟频率,与串口通信的波特率有很大的关系,其参数对于较高的波特率计算比较准确,例如波特率为19600,波特率为19800等都可以准确的计算出来,11.0592MHz晶振对于STC89C52RC直插芯片的定时器来说也有很大的影响,因为用其计算的的定时器初值都是整数的,如果使用12MHz的晶振,对于波特率的计算和定时器的初值计算都存在一定的变差;STC89C52RC芯片P0端口加一个103阻值的上拉排阻,因为STC89C52RC芯片内部P0端口没有上拉电阻,加上拉电阻可以提高P0端口的引脚驱动能力和提高总线的抗干扰能力;同时电源指示灯是用来提示整个主控系统有没有正常工作,以及独立的程序烧写接口,方便在编程过程中对系统程序进行烧写和擦除。主控系统电路如上图4-1所示。
-
- 红外解码电路
红外解码模块使用的是IR01 红外遥控学习模块,其采用串口通讯方式(波特率为9600波特,1个停止位,8个数据位,0个奇偶校验位)和STC89C52RC芯片进行通讯,STC89C52RC芯片的TX端口连接IR01 红外遥控学习模块的RX端口,STC89C52RC芯片的RX端口连接IR01 红外遥控学习模块的TX端口,两个模块的GND要相连,最后给两个模块有效的工作电压两个模块就能进行工作和通讯。STC89C52RC芯片通过4×4矩阵键盘扫描输入,STC89C52RC芯片再给IR01 红外遥控学习模块有效串口信息,IR01 红外遥控学习模块通过STC89C52RC芯片发送过来的讯息判断是要学习红外码还是发射红外码。并且IR01红外遥控学习模块使用了CH554T芯片,此芯片是一款兼容MCS51指令集,其79%的指令是单字节单周期指令,平均指令速度比标准MCS51快8~15倍,可支持24MHz系统主频,内置16K程序存储器ROM和256字节内部iRAM,此芯片还内置了ADC数模转换、触摸按键电容检测、双异步串口,支持4种复位信号源,内置上电复位,支持软件复位和看门狗溢出复位,可选引脚外部输入复位;还使用了FT24C128A存储器,是一种电可擦除PROM,电压可允许低至1.8V,待机电流和工作电流分别为1μA和1mA,具有页写能力。IR01 红外遥控学习模块连接电路如下图4-2所示:
图 4‑2 IR01 红外遥控学习模块连接电路图
-
- 矩阵键盘电路
矩阵键盘电路采用的是4×4矩阵键盘,通过并行与STC89C52RC芯片的P1端口进行连接,STC89C52RC芯片内部一直使用I/O电平扫描,先进行行扫描,再进行扫描,就能读取那个按键按下。使用4×4矩阵键盘是因为可以使用多个按键学习,方便可以管控多个红外设备。4×4矩阵键盘连接电路如下图4-3所示:
图 4‑3 4×4矩阵键盘连接电路图
-
- LCD1602显示电路
LCD1602液晶显示模块采用总线并行与STC89C52RC芯片进行通信,通过分析LCD1602液晶显示模块的读写操作时序图,写指令时,单片机给LCD1602液晶显示模块的RS引脚使能为高电平、RW和EN引脚使能为低电平,就可以把指令数据送到D0~D7;写数据时,CD1602液晶显示模块的RS引脚、RW和EN引脚都要使能为低电平,就可以把数据送到D0~D7用以显示出来。LCD1602液晶显示模块的VL引脚接了一个10K的可调电阻,用于调节LCD1602液晶显示模块的背光亮度。LCD1602显示连接电路如下图4-4所示:
图4-4 LCD1602显示连接电路图
-
- DC-5V电源电路
基于单片机红外遥控器设计系统使用一个DC-5V电源接口,再接一个开关作为系统的电源开关,用以控制整个系统的电源输入,方便使用前后的断电和上电。DC-5V电源电路设计电路如下图4-5所示:
图 4‑5 DC-5V电源电路设计电路图
- 系统软件设计
- 主程序设计
图 5‑1 主程序流程图
系统主程序流程图主要分为:模块初始化、初始化显示信息、学习/发射控制模式判断、矩阵键盘扫描、LCD1602液晶显示模块显示和红外模块学习/发射控制。矩阵按键有15个按键可以用于控制红外模块的学习和发射控制,当不同的按键按下,LCD1602液晶显示模块会显示不同的按键信息;有一个按键用于红外模块的学习/发射控制模式切换键,当模式切换键按下,LCD1602液晶显示模块就会显示当前是学习模式还是发射模式。不同的按键按下,IR01 的红外遥控学习模块接收到相应的讯号,就会进行红外信号学习或者发送。程序流程图如上图5-1所示。
-
- 测试分析
在设计硬件电路的时候,要注意器件之间的安全距离,不能挨得太近,挨得太近容易产生干扰,导致一些模块不能正常工作,特别是在线路得布局上,如果两个电路线挨得太近,不保持一定得安全距离,就会很容易影响器件得工作,特别在通信方面容易产生干扰,导致接收和发送的讯号不正确,严重的会导致电路短接,造成整个系统烧毁。
在制作STC89C52RC单片机最小系统时,要注意复位电路的电容和电阻的选择,因为STC89C52RC芯片时高电平复位有效,所以要选用带正负极的铝电解电容,不能选用没有正负极的独石电容和瓷片电容,独石电容和瓷片电容只有低电平复位有效才会使用,不同的芯片的需要的复位电平时间不一样,因此需要选用符合芯片最短的复位时间的电容和电阻;系统的电源指示灯需要的限流电阻也需要选合适的规格,电阻过大,指示灯无法点亮;起振电路的电容要选择,常用的有22pF和33pF,使用的两个电容大小要一致,不一致会导致芯片起振不正常,导致最小系统无法正常工作。当使用内部存储器时,STC89C52RC单片机的EA引脚需要给高电平,这样系统运行后才能访问内部RAM,如果使用的时外部存储器,则EA不用使能高电平;设计STC89C52RC单片机最小系统时,需要预留单片机的程序下载口,方便后续程序修改和调试。
在使用单片机系统的外设模块时,在使用前需要仔细阅读其参数,比如工作电压、工作电流、需要的有效电平信号等,模块上电前需要检查是否接错线路,防止接错,导致模块损坏,造成损失。
在使用LCD1602液晶显示模块时,LCD1602液晶显示器模块的VL脚需要加一个10K左右的可调电阻,方便后续调节LCD1602液晶显示屏的背光度,以保证显示内容的清晰度;以及在使用Keil uVision5对LCD1602液晶显示模块进行编程显示时,要显示下一条信息内容时,一定要对上一次显示的信息内容进行消隐,防止影响信息的下一次显示。
在系统时钟电路的晶振选型上要特别注意,因为本系统的STC89C52RC芯片与IR01 的红外遥控学习模块之间通信是串口通信,因此对于芯片内部的指令周期、机器周期要求十分精确,一开始由于疏忽选用了12MHz的晶振,导致软件延时、波特率、定时器初值的设定和计算不准确,使整个程序存在很大的误差,尤其是串口的发送接收,因为波特率的不准确,导致发送和接收到的信息不一致和存在误差,导致IR01 的红外遥控学习模块没有办法正常工作,后面经过百度查阅相关资料,以及询问一些比较懂硬件的同学,在知道要使用11.0592MHz的晶振,该型号的晶振能较精确的计算出波特率、定时器初值的设定。
在软件得编写过程,变量的定义的位置和类型选择特别重要,因为不同的变量会占用不同的字节,如果变量占据的字节过大,就会导致芯片无法正常运行,因为每一个芯片的内存都是有限的;变量定义在不同的位置,变量的属性也会不一样;程序的编写要规范整齐并写相应的注释解析,防止后续出现问题,因为程序太混乱找不到以及时间久了忘记该段程序实现的意义;在编译遇到错误时,要及时去查找并排除错误的原因,找到并及时修改,避免因为错误导致整个系统崩溃无法正常运行;程序的编写最好简洁明了,方便以后检查。
-
- 测试结果
基于单片机红外遥控器设计系统上电后,系统所有模块初始化完成后,LCD1602液晶显示模块会显示“Production Time”和“1852200221 - PMZ!”,显示停留片刻后,系统就会进入默认的红外模块的发射控制模式,LCD1602液晶显示模块会显示“Control Model”提示进入红外发射控制模式,在该模式下,按键序号1~15不同的按键按下,红外模块都会发射不同的红外信号,当不同的按键按下,LCD1602液晶显示模块会显示“Press key is Key_ID”,系统有一个红外模块的红外发射模式和红外学习模式的切换键,按下切换键,系统就会在红外发射模式和红外学习模式之间进行切换,在红外学习模式下,系统按下1~15的任意按键,红外模块就会进入学习模式,此时红外模块的红灯会长亮20s,当拿要学习的红外遥控,对准红外模块的红外接收头按下要学习的按键,当红外模块的红灯熄灭,就说明红外模块以学习该按键的红外编码和波长,把模式切换到发射控制模式,使用刚刚学习的按键就能控制红外家电相应的功能。基于单片机红外遥控器设计系统的红外模块可以反复学习红外编码和波长信号,同时具有掉电功能,系统断电后再重新上电不会抹除掉电前已学习的红外编码和波长信号。
通过系统硬件测试没有问题后,通过实际环境应用测试,该系统确实能学习红外遥控的红外编码,能使用已学习的红外编码信号控制家电设备,经测试,系统的15个发射学习按键都能正常使用。
基于单片机红外遥控器设计系统,整个系统可以正常运行所有任务功能。正常运行期间,可以通过LCD1602液晶模块显示相应的信息,可以通过4×4矩阵键盘进行扫描输入,可以利用红外模块进行红外信号的学习和发射控制。通过软硬件测试,本作品已基本满足课设的任务要求,接下来就是慢慢的去完善整个基于单片机红外遥控器设计系统,让它变得更加稳定,完美。
- 结论
随着人类的生活已经全面迈入了信息化的时代,使用红外遥控的家电种类开始增多,人们日常生活中利用红外遥控来控制红外控制的家电种类非常的多,但一个红外控制的家电的遥控只有一个,而且只有对应的红外遥控发出的红外编码才能控制相关的红外家电。基于单片机红外遥控器设计系统能够学习并记忆市场上的家电红外遥控器红外编码信号,可以融合多种红外遥控于一体,从而满足对多种红外遥控设备的集中控制。整个红外遥控系统功耗低,操作简单方便,性能价格比高,能较好的满足生活中人们对红外遥控器的需要。
附录三:部分源程序
#include<reg52.h>
#include"delay.h"
#include "lcd.h"
#include "key4x4.h"
void display_time(void);
void display_author(void);
void SendStr(unsigned char *s);
void set_data(unsigned char Byte[]);
unsigned char code time1[]="Production Time ";
unsigned char code time2[]="2022-05-15 22:55";
unsigned char code author1[]="1852200221 – PMZ";
unsigned char code author2[]=" Hand Made!!! ";
unsigned char Disp1[]=" Learning Model ";
unsigned char Disp2[]=" Control Model ";
void InitUART (void)
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD;
TR1 = 1;
EA = 1;
}
void main (void)
{
unsigned char i;
InitUART();
LcdInit();
display_time();
display_author();
while (1)
{
if(flag==1)
{
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(Disp1[i]);
}
}
else
{
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(Disp2[i]);
}
}
scankey();
delay_ms(240);
delay_ms(240);
}
}
void set_data(unsigned char Byte[])
{
unsigned char i;
for(i=0;i<5;i++)
{
SBUF=Byte[i];
while(!TI);
TI = 0;
}
}
void display_time(void)
{
for(i=0;i<16;i++)
{
LcdWriteData(time1[i]);
}
LcdWriteCom(0xc0);
for(i=0;i<16;i++)
{
LcdWriteData(time2[i]);
}
delay_ms(5000);
LcdWriteCom(0x01);
}
void display_author(void)
{
LcdWriteCom(0x80);
for(i=0;i<16;i++)
{
LcdWriteData(author1[i]);
}
LcdWriteCom(0xc0);
for(i=0;i<16;i++)
{
LcdWriteData(author2[i]);
}
delay_ms(5000);
LcdWriteCom(0x01);
}
需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。
纷传点击用微信打开即可,过程有点繁琐请见谅。