红外线遥控接收器设计
- 格式:doc
- 大小:492.00 KB
- 文档页数:19
.. 目录红外遥控接收器的设计 (1)一、研究背景 (1)二、设计目的 (1)三、设计要求 (1)3.1整个控制系统的设计要求 (1)四、设计方案 (2)五、硬件设计 (3)5.1单片机及其硬件电路设计 (3)5.1.1 单片机的介绍 (3)5.1.2 时钟电路及RC复位电路 (4)5.2红外发射电路 (5)5.3 单片机红外接收器的电路设计 (6)5.3.1 红外接收电路 (6)5.3.2 电源电路的设计 (8)5.3.3 八路LED开关电路 (8)5.3.4电磁式继电器 (8)5.3.5 LCD1602液晶显示电路 (9)5.4小结 (10)六、程序设计 (10)6.1红外接收模块 (10)6.1.1红外接收电路主程序流程图 (10)6.1.2红外接收电路子程序流程图 (11)6.2小结 (12)七、系统测试 (12)7.1系统功能测试 (12)八、参考文献 (14)九、致 (14)附录1 (15)附录2 (19)红外遥控接收器的设计一、研究背景近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
传统的遥控器大多数采用了无线电遥控技术,但是随着科技的进步,红外线遥控技术的成熟,红外也成为了一种被广泛应用的通信和遥控手段。
继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
由于红外线抗干扰能力强,且不会对周围的无线电设备产生干扰电波,同时红外发射接收围窄,安全性较高。
红外遥控虽然被广泛应用,但各产商的遥控器不能相互兼容。
当今市场上的红外线遥控装置一般采用专用的遥控编码及解码集成电路,由于其灵活性较低,应用围有限。
所以采用单片机进行遥控系统的应用设计,遥控装置将同时具有编程灵活、控制围广、体积小、功耗低、功能强、成本低、可靠性高等特点,因此采用单片机的红外遥控技术具有广阔的发展前景。
一种简易的红外遥控开关原理与设计
红外遥控开关原理及设计
一、红外遥控开关原理
1、红外线的基本原理:红外线是一种由发射源发出的电磁波,波长超
出了可见光的范围,其实就是由一个简单的电子元件把相对较高的电
压调整成电磁波,然后被接收端的接收器接收,从而实现遥控的功能。
2、红外遥控开关原理:红外遥控开关是靠红外线来传输信号,就是发
射端由一个发射器发射红外信号,接收端的接收器能够接收这种信号,然后触发、控制或启动对应的终端电路,从而实现遥控的功能。
二、红外遥控开关设计
1、结构设计:主要由发射模块和接收模块组成,发射模块主要由发射
电路和发射灯组成,接收模块主要由接收灯、接收电路、逻辑电路及
功率电路组成。
2、电路设计:发射模块的电路设计,采用称为双稳晶体管简易发射电路,它基于的的发射原理比较常见和简单,接收模块的电路设计,采
用两种常见的接收原理:第一种是用集成晶体芯片实现的高速度脉冲
解码器,第二种是用普通的射频管实现的简易接收电路。
3、传输距离:发射端能够将红外信号发射出去,接收端便能够收到这
种信号,但信号发送的距离有限,因为红外线的能量随距离的增大而
逐渐减小,因此接收端需要进行距离衰减调整。
总结:红外遥控开关原理是通过发射端发射红外信号,接收端的接收
器能够接收到信号,从而实现遥控的功能;结构设计上,发射模块和
接收模块由发射电路和发射灯,接收灯、接收电路、逻辑电路及功率
电路组成;电路设计主要采用双稳晶体管简易发射电路和用集成晶体
芯片实现的高速度脉冲解码器、用普通的射频管实现的简易接收电路;传输距离受到红外线的能量衰减影响,因此接收端需要进行距离衰减
调整。
数字系统课程设计报告第一部分设计题目及要求本次课程设计的题目及要求如下:一、设计题目红外线遥控接收器二、设计步骤1、EDA实验板组装调试参照提供的EDA实验板电路原理图、PCB图以及元器件清单进行电路板的组装。
电路板组装完成后,编写三个小程序进行电路板测试。
2、红外遥控系统的设计(1)发射编码部分使用指定的元器件在万用板上完成红外遥控器的制作。
(2)接收解码部分接收解码用VHDL语言编写程序,在EDA实验板上实现解码。
二、功能要求1、将一体化红外接收解调器的输出信号解码(12个单击键、6个连续键,单击键编号为7-18,连续键编码为1-6),在EDA实验板上用七段数码管显示出来。
2、当按下遥控器1—6号连续键时,在EDA实验板上用发光二极管点亮作为连续键按下的指示,要求遥控器上连续键接下时指示灯点亮,直到松开按键时才熄灭,用于区别单击键。
3、EDA实验板上设置四个按键,其功能等同于遥控器上的1—4号按键,当按下此四个按键时七段数码管分别对应显示“1”、“2”、“3”、“4”。
4、每当接收到有效按键时,蜂鸣器会发出提示音。
第二部分设计分析本次课程设计包括两大部分,一是电路设计及电路焊接,二是程序的设计及编写。
电路部分,根据题目要求,要做到红外发送,显然整个电路系统要分为红外发射和红外接收两个电路,分别做到红外的编码发射和译码接受,再在接收板上显示接受到的红外信号。
另外还包括一个从电脑下载程序到芯片上的下载线电路。
一、红外发射电路本次课程设计的红外遥控器由红外遥控专用芯片PT2248作为编码及发送部分,PT2248最大可用作18路红外遥控系统的编码,其内部己集成了38kHz的红外载波振荡及相应的数字脉码调制电路,只需外接3×6的矩阵式按键、红外发光二极管及其驱动电路等少量元器件便可完成编码发送的功能。
由PT2248和少量外围元件组成的红外遥控发射电路如下图所示芯片的发送指令由12位码组成,其中C1~C3是用户码,可用来确定不同的模式。
红外遥控原理和制作方法一、引言红外遥控技术是一种常见的无线通信技术,广泛应用于家电、电子设备等领域。
本文将介绍红外遥控的原理和制作方法。
二、红外遥控原理红外遥控原理基于红外线的发射和接收。
遥控器发射器中的红外发射二极管会产生红外光信号,信号经过编码后发送给接收器。
接收器中的红外接收二极管会接收到红外光信号,并进行解码。
解码后的信号通过微处理器进行处理,最终转化为对应的控制信号,控制设备的操作。
三、红外遥控制作方法1. 硬件设计制作红外遥控器的第一步是设计硬件。
需要准备的材料有红外发射二极管、红外接收二极管、编码解码芯片、微处理器等。
在电路设计中,需要根据具体的遥控器功能,选择合适的编码解码芯片和微处理器,并按照电路原理图进行连接。
2. 程序编写制作红外遥控器的第二步是编写程序。
根据遥控器功能需求,编写相应的程序代码。
程序代码可以使用C、C++、Python等编程语言进行编写,通过对按键的扫描和编码解码的处理,将控制信号转化为红外光信号。
3. 硬件连接将硬件电路和程序进行连接。
将编写好的程序通过编程器下载到微处理器中,将红外发射二极管和红外接收二极管连接到电路中的相应位置。
确保电路连接正确无误。
4. 测试与调试完成硬件连接后,进行测试与调试。
使用万用表等工具检查电路连接是否正常,确保红外发射和接收二极管工作正常。
通过按下遥控器按键,检查接收器是否可以正确解码,并将信号转化为对应的控制信号。
四、红外遥控的应用红外遥控技术广泛应用于各种家电和电子设备中,例如电视、空调、DVD播放器等。
通过红外遥控器,用户可以方便地控制设备的开关、音量、频道等功能。
五、红外遥控技术的发展趋势随着科技的不断进步,红外遥控技术也在不断发展。
目前,一些新型的红外遥控技术已经出现,例如基于无线网络的红外遥控技术,可以通过手机等设备进行远程控制。
此外,一些智能家居系统也开始使用红外遥控技术,实现对家中各种设备的集中管理。
六、结论红外遥控技术是一种常见且实用的无线通信技术,通过红外线的发射和接收,可以实现对各种设备的远程控制。
红外线接收控制器的制作在生活中,我们常用到红外线控制各类电器,如彩电、空调、电风扇等,为我们带来较多的方便,但有时我们仍感到不方便。
如看完电视后,用遥控器只能关掉电视主电源,电视仍处于待机状态,使用者还得走到电视跟前,按下电视电源开关方能放心。
若想看电视,还得动身开电视,显得很麻烦,尤其是冬天躺在床上看电视,上上下下,深感不便。
本文以利用红外遥控器来遥控风扇的制作方法为例(可任选一只红外线遥控器,能调速,软件稍作改变,可增加定时功能等),来介绍红外线接收控制器的制作方法,如果制作电视交流电源的开、关控制器,可与电视共用一只遥控器,制作也较简单些。
制作思路红外遥控发射器是利用红外线作载体传送信息的,发射周期不等的经过调制后串行码,该串行码一般由引导码、用户识别码、操作码组成。
经红外接收头解码后得到一串周期不等的矩形波,如示意图1。
不同型号的遥控发射器的波形宽度不同,即周期T1、T2……不同,在不知手头遥控发射器的波形周期的情况下,首先要制作一个检测红外线周期的工具。
根据测得的周期规律来制作红外线接收控制器。
制作方法检测红外周期的器件制作,见图2。
当红外接收头没有接收到发射器发送来的红外线,其输出端输出高电平(约+5V)。
当接收到红外线,输出端电平变低,送到单片机AT89C2051的外部中断1口即INT1,使其发生中断而进入中断服务:启动定时器1并开始计数,相当于在图1的A点,1个周期后即C点,单片机第二次中断,关定时器1,记下周期T1(实际上只记下TH1的数值,TL1的值可以丢弃),然后清TH1、TL1,再启动定时器1重新计数,第二个周期完后,同样会引起单片机发生中断,再记下周期T2……,如此记下40-50个周期(一般红外编码为4字节,即32BIT,之前还有引导码,又因接收到的红外数据不一定是从引导码开始,要分析一次完整的串行码,应尽可能多记下红外矩形波周期数),接收完后,通过按轻触开关将各记下的各周期的TH1在数码管显示出来以作分析(每按一次轻触开关,显示下一个周期数)。
基于单片机的红外通信系统设计1 简介红外通信是指利用红外线进行信息传输的一种无线通讯方式。
其传输距离在10米以内,速度较快,常用于遥控器、智能家居、安防监控等领域。
本文将介绍基于单片机的红外通信系统设计。
2 系统原理红外通信系统需包含红外发射器、红外接收器和处理器三个部分。
通信原理是将信息编码成红外信号,通过红外发射器发出,再由红外接收器接收,经过解码后传输到处理器中处理。
3 系统设计步骤3.1 红外接收器电路设计红外接收器采用红外管接收器,其特点是灵敏度高,在不同角度能接收到较远的红外信号。
红外管接收器与电路板焊接,电路板再选用较长的电线接到处理器的端口上。
3.2 红外发射器电路设计红外发射器采用红外二极管,其工作电压一般为1.2-1.4V。
通过接通1kHz以上的方波信号控制二极管的导通,使其发出红外光。
为保证其稳定性和较远的有效距离,需在电路中添加反向电流保护二极管。
3.3 处理器设计处理器选用常用的单片机,如AT89C51等。
单片机内置了红外通信模块,可用来发送和接收红外信号。
同时,还需通过编程实现对红外信号的解码和编码,实现信息传输与处理。
4 系统测试测试时,可用遥控器模拟发送红外信号,系统接收并解码后显示在液晶屏幕上。
测试距离一般在10米以内,且需保持天空无其它遮挡物。
5 总结基于单片机的红外通信系统设计,具有灵敏度高、速度快、传输距离短等特点。
其应用广泛,在智能家居、安防监控、车载通信等领域均有应用。
但需注意遮挡物的影响,以及信号干扰等问题。
自己动手,其乐无穷--自己做红外遥控接收装置红外遥控接收装置的硬件电路有很多种,它们各有特色。
如果你是一个狂热的电子爱好 者,那么你肯定热衷于自己动手来制作这样一个装置,其中的乐趣是别人所无法理解的。
如 果你仅仅是一个电脑爱好者,而对电子技术并不熟悉,那你可以购买这样一个装置,同样能 享受到坐在沙发上遥控电脑的乐趣。
1.完全采用数字电路的版本元件列表:U1 - 74HC14U2 - 74HC132U3 - IS1U60L or GP1U52XU4 - 74HC393U5 - 74HC165U6 - DS14C232 or MAX232电阻 R1,2 - 1K 微调电阻 R3 - 22K电容 C1,2 - 1 nF / C3 - 4.7 nF / C4-7 - 1 uF该电路在远距离使用时,工作效果较好。
你可以试着去掉外接电源,从串口获得电源, 从而简化电路(未测试)。
简单说明电路检测数字信号的每个周期并发送到计算机串口。
时钟电路由U1-c、R3、C3组成。
当 U1a的反相输出端产生一个从低电平到高电平的跃变时,U2a的与非门与C1-R1组成的电路将产生一个窄的低电平脉冲。
这个脉冲将影响移位寄存器从而载入记数器数据,并自动送入串 口。
同时,这个脉冲经U1b反转,这个高电平到低电平的跃变通过U2b、C2、R2后产生一个窄的高电平脉冲,此脉冲使记数器复位。
时序图如下所示,并非真实比例(实际上,红外信号 的周期远大于脉冲周期)这是两个不同的数据:这是两个相同的数据:2由图可见,给出允许的误差范围,程序就可以识别相同的数据。
疑难解析“我的接收装置无法区分同一遥控器的任意两个按键?”首先需要确认时钟电路的频率是否为19200Hz左右。
如果你无法获得信号,请试一下另外的软件,如SerialWatcher,并且改变时钟电路中微调电阻的阻值。
我的电路最后确定的阻值是15500欧,由于电子元器件的离散性,这个阻值会有所不同。
数字系统课程设计报告第一部分设计题目及要求本次课程设计的题目及要求如下:一、设计题目红外线遥控接收器二、设计步骤1、EDA实验板组装调试参照提供的EDA实验板电路原理图、PCB图以及元器件清单进行电路板的组装。
电路板组装完成后,编写三个小程序进行电路板测试。
2、红外遥控系统的设计(1)发射编码部分使用指定的元器件在万用板上完成红外遥控器的制作。
(2)接收解码部分接收解码用VHDL语言编写程序,在EDA实验板上实现解码。
二、功能要求1、将一体化红外接收解调器的输出信号解码(12个单击键、6个连续键,单击键编号为7-18,连续键编码为1-6),在EDA实验板上用七段数码管显示出来。
2、当按下遥控器1—6号连续键时,在EDA实验板上用发光二极管点亮作为连续键按下的指示,要求遥控器上连续键接下时指示灯点亮,直到松开按键时才熄灭,用于区别单击键。
3、EDA实验板上设置四个按键,其功能等同于遥控器上的1—4号按键,当按下此四个按键时七段数码管分别对应显示“1”、“2”、“3”、“4”。
4、每当接收到有效按键时,蜂鸣器会发出提示音。
第二部分设计分析本次课程设计包括两大部分,一是电路设计及电路焊接,二是程序的设计及编写。
电路部分,根据题目要求,要做到红外发送,显然整个电路系统要分为红外发射和红外接收两个电路,分别做到红外的编码发射和译码接受,再在接收板上显示接受到的红外信号。
另外还包括一个从电脑下载程序到芯片上的下载线电路。
一、红外发射电路本次课程设计的红外遥控器由红外遥控专用芯片PT2248作为编码及发送部分,PT2248最大可用作18路红外遥控系统的编码,其内部己集成了38kHz的红外载波振荡及相应的数字脉码调制电路,只需外接3×6的矩阵式按键、红外发光二极管及其驱动电路等少量元器件便可完成编码发送的功能。
由PT2248和少量外围元件组成的红外遥控发射电路如下图所示芯片的发送指令由12位码组成,其中C1~C3是用户码,可用来确定不同的模式。
基于51单片机的红外遥控器设计近年来,随着智能家居的兴起,红外遥控器在我们的生活中扮演着越来越重要的角色。
本文将基于51单片机,设计一个简单的红外遥控器。
首先,我们需要了解红外遥控器的工作原理。
红外遥控器使用红外线来传输指令。
当用户按下遥控器上的按键时,红外发射器发射一个特定的红外信号。
接收器接收到这个信号后,将其转换成电信号,并将其发送到电子设备中,实现对设备的控制。
接下来,我们需要选择合适的红外发射器和接收器。
常见的红外发射器有红外LED,常见的红外接收器有红外接收头。
在选择红外发射器和接收器时,要根据其工作频率、传输距离、灵敏度等因素进行选择。
在本设计中,我们选择了工作频率为38kHz的红外发射器和接收器。
接下来,我们需要设计电路,并进行程序开发。
首先,我们需要连接红外发射器和接收器到51单片机上。
红外发射器的一个引脚连接到51单片机的I/O口,另一个引脚连接到正极电源,第三个引脚连接到电源的接地端。
红外接收器的输出引脚连接到51单片机的I/O口,电源和接地端分别连接到正负电源。
接下来,我们需要编写程序。
首先,我们需要设置51单片机的I/O 口为输入或输出。
然后,我们需要编写程序来发送红外信号。
我们可以使用PWM技术来模拟红外信号的脉冲。
当用户按下遥控器上的按键时,我们可以发送一个特定的脉冲序列,来控制电子设备。
同时,我们还需要编写程序来接收红外信号。
当红外接收器接收到红外信号时,会输出一个特定的电平信号。
我们可以使用外部中断来检测这个信号,并进行相应的处理。
在程序开发过程中,我们需要注意红外信号的协议。
常见的红外信号协议有NEC、SONY等。
我们需要根据所使用的红外接收器的协议来编写相应的程序。
最后,我们需要测试代码的功能和稳定性。
可以通过连接电子设备,按下遥控器上的按键,来测试红外信号的发送和接收功能。
如果一切正常,我们的红外遥控器设计就完成了。
总结起来,基于51单片机的红外遥控器设计是一个简单而有趣的项目。
电子电路综合设计总结报告题目:红外遥控器信号接收和显示的设计(设计选题十四)姓名:班级:学号:成绩:摘要:随着电子技术的发展,红外遥控器越来越多的应用到电器设备中,但各种型号遥控器的大量使用带来的遥控器大批量多品种的生产,使得检测成为难题,因此智能的红外遥控器检测装置成为一种迫切的需要。
在该红外遥控器信号的接收和显示电路以单片机和一体化红外接收器为核心技术,具体由单片机最小系统、单片机与PC机间的通信模块、红外接收模块、数码管显示模块和流水灯模块组成。
在本系统的设计中,利用红外接收器接收遥控器发出的控制信号,并通过软件编程将接收信号存储、处理、比较,并将数据处理送至数码管显示模块。
总之,通过对电路的设计和实际调试,可以实现红外遥控器信号的接收与显示功能。
根据比较接收信号的不同,在数码管显示电路及流水灯电路上显示相应的按键数字或闪烁变化功能,并可实现单片机及PC机之间的通信功能,使得控制信号能在PC机上显示。
关键词:单片机红外接收器HS0038 解码串口调试设计任务结合单片机最小电路和红外线接收接口电路共同设计一个基于单片机的红外遥控信号接收与转发系统,用普通电视机遥控器控制该系统,使用数码管显示信号的接收结果。
1、实现单片机最小系统的设计。
2、当遥控器按下数字键时,在数码管上显示其键值。
如按下数字键1,则在数码管上显示号码01。
3、当遥控器按下音量△及音量▽时,用两位数码的周围段实现顺时针或者逆时针旋转的流水灯功能。
(为使得音量的增减清晰显示,试验中在单片机的P1口外接一排流水灯,具体功能的实现见方案的可行性论证)* 运用串口调试助手,在遥控器有按键按下时,将其键值显示在PC机上。
* 当遥控器按下频道△及频道▽时,在数码管上显示加1或减1后的数值。
一、系统方案比较与论证1、方案比较与选择为了实现系统整体功能,红外解码部分是核心,红外解码是指将遥控发射器所产生的红外遥控编码脉冲所对应的键值翻译出来的过程。
规格承认书红外线接收器实图客户名称业务联系人联系电话外型尺寸及引脚排列图1.特性●小型设计;●内置专用IC;●宽角度及长距离接收;●抗干扰能力强;●能抵于环境光线影响;●低电压工作;2.应用:■视听器材(音响,电视,录影机,碟机、机顶盒、DVB)■家庭电器(冷气机,电风扇,电灯)■其他无线遥控器产品;3.应用电路图:4.原理图:5.光电参数(T=25℃ Vcc=5v f0=38KHZ)参数符号测试条件Min Typ Mnx 单位工作电压Vcc 2.7 5.5 V 接收距离L L5IR=300MA光照度<300LUX(测试信号)10 15 M载波频率f038 KHZ 接收角度01/2 距离衰减1/2 +/-35 Deg BMP宽度F BW-3Db Band width 3.5 6.0 8.5 kHz静态电流Icc Iin=0μA,V cc=3V - 0.9 1.5 mA Iin=0μA,Vcc=5V - 1.0 1.5 mA低电平输出V OL Vin=0V Isink=2.0mA 0.2 0.4 V高电平输出V OH V CC=3V 2.7 3.0 - V Vcc=5V 4.7 5.0 - V输出脉冲宽度T PWL Vin=500μVp-p※500 600 700 μs T PWH Vin=50mVp-p※500 600 700 μs※光轴上测试,以宽度为500/700μs为发射脉冲,在5CM之接收范围内,取50次接收脉冲之平均值6.测试波型:7.极限参数:项目符号规格单位供应电压Vcc 5.5 V工作温度Topr -25-85 ℃储存温度Tstg -40-125 ℃焊接温度Tsol 280 ℃9.推荐使用条件项目符号Min Typ Mnx 单位工作电压Vcc 2.7 ----- 5.5 V 输入频率FM 38 kHz 工作温度Topr -20 25 80 ℃10.使用注意1)在无任何外加压力及影响品质的环境下储存及使用;2)在无污染性气体或海风(含盐分)的环境下储存及使用;3)在低湿度环境下储存及使用;4)在规定的条件下焊接引线管脚,焊接后,请勿施加外力;5)请勿清洗本产品。
一、题目要求数字系统课程设计包括EDA实验板组装调试及红外遥控系统设计制作两个部分,各部分要求如下:红外遥控系统由发射编码和接收解码两个部分组成,本课程设计要求制作发射编码电路板(遥控器)以及编写程序在EDA实验板上实现接收解码,具体说明如下:1、发射编码部分发射编码部分要求使用指定的元器件在万用板上完成红外遥控器的制作,该部分电路原理图参照《PT2248数据手册》,制作前请详细阅读《红外遥控器制作说明》,制作时要求元器件在万用板上排列整齐,布局合理,焊接良好,各按键功能正常,均能发送编码。
2、接收解码部分接收解码用VHDL语言编写程序,在EDA实验板上实现解码,要求具有以下功能:(1)基本要求:(a)将一体化红外接收解调器的输出信号解码(12个单击键、6个连续键,单击键编号为7-18,连续键编码为1-6),在EDA实验板上用七段数码管显示出来;(b)当按下遥控器1—6号连续键时,在EDA实验板上用发光二极管点亮作为连续键按下的指示,要求遥控器上连续键接下时指示灯点亮,直到松开按键时才熄灭,用于区别单击键。
(c)EDA实验板上设置四个按键,其功能等同于遥控器上的1—4号按键,当按下此四个按键时七段数码管分别对应显示“1”、“2”、“3”、“4”。
(d)每当接收到有效按键时,蜂鸣器会发出提示音。
(2)扩展功能:(能完成的加分)通过遥控器跳线改变用户码,EDA实验板上用三个发光二极管正确显示发送端的用户码。
二、解题分析根据题目意思,此设计关键在于如何将接收器接收到的信号解码并显示。
这是本设计的难点所在。
其中解码的信号来源有两种,分别是:一、从键盘上直接按键输入。
二、从遥控器上按键以后将信号发射出去,然后键盘上的接收器将其接收。
这当中有一个优先权的问题,在本次设计中我将其设置为遥控器接收优先,即,当在按下键盘后,若此时遥控也按下则显示数码管优先显示遥控器按下的信号。
接收解码红外编码信号并成功解码以后,需要将解码出来的相应信息(用户码,连续键等)进行显示!经分析实际的电路原理图,发现在控制数码管显示只有一个4511去控制,这说明一次只能显示一个数码,因此如何显示两位数码是数码管控制的难点所在!这时应该编写一个专门的模块来解决这个问题。
三、设计方案为了实现题目中的要求,程序采用单进程并将系统划分为下列两个模块:一、接收编码信号及翻译模块二、输出显示模块各模块功能描述:接收编码信号及翻译模块:该模块的主要功能是接收从键盘或者从遥控器发出的信号,将其翻译成可以让CD4511用来控制数码管显示的编码。
输出显示模块:输出显示模块主要是对两个数码显像管的输出进行控制,该模块根据翻译出的BCD码,将此编码输入到CD4511驱动显像管循环显示。
系统结构框图:说明:1、CLK是的系统时钟信号。
2、DATAIN是38kHz一体化红外接收解调器输入到CPLD中的串行信号。
3、RESET是系统复位信号,高电平有效。
4、KEYIN4是小键盘输入的信号。
5、BIT指示选中的数码管6、NUM是数码管个位或十位的BCD码7、BEEP是控制蜂鸣器信号,根据电路原理图,其低电平有效8、USER是三位的用户码9、LED是LED灯控制信号,用来显示用户码和连续键注:两个模块间相连的CODE信号是翻译出来后的五位的BCD码。
详细设计思路:一、接收编码信号及翻译模块:(1)分析解码原理:(一)键盘输入解码:该模块中接收编码信号分为从键盘接收信号和从遥控器接收信号,本程序设置为从遥控器发射优先。
从键盘接收到的信号直接翻译对应的二进制编码然后再输出到显示模块。
(二)遥控器发射信号解码:如何解码是本次设计的关键。
发射端编码方式已经在“附录一”中给出,要接收发射端发射的编码最关键的地方是解决发射段频率和接收段频率不一致的问题。
发射端频率为38KHz,程序中设计的接收端频率为2.048MHz的2的8次方分频,分出来以后即为8KHz。
发射端每四个周期(4a)代表一个二进制编码,时间为1/38KHz*16*4=1.684ms,四个周期的时间换算成接收端周期数为 1.684ms/(1/8KHz)=13.47个。
一个a所占的周期数为13.47/4=3.37个,三个a共占的周期数为13.47/4*3=10.1个。
由于编码中一个周期的低电平代表“1”,三个周期的低电平代表“0”。
如下形式的1位的编码时分别表示“0”和“1”:1个a的低电平,3个a的高电平表示编码“0”3个a的低电平,1个a的高电平表示编码“1”再考虑到同步的问题,取(10.1+3.37)/2=6.7 7作为判断“0”、“1”的分界线,即当检测到连续收到等于或超过7个接收端周期的低电平后即可认为接收到的是“1”,否则为“0”。
以上就是解码的基本原理。
翻译出编码信号后根据编码的规则,分析用户码和所应显示的数字即可。
(2)解码的具体流程:从“附录一”中的说明可知,按下一个按键将会发送出去一串编码,而无论是连续信号还是单发信号,接收的波形中有用部分仅其中的十二位码,且其中的H、S1、S3位已经能名区分单发与连续信号,为节约资源,只需对接收信息中的十二位码进行编码即可。
而从接收到的波形图可看出,仅当接收有编码时才有低电平,其余时间均为高电平。
这样就可从低电平开始,对BIT‘0’和BIT‘1’进行编码。
而BIT‘0’和BIT‘1’的区别在于其占空比不同,可以考虑用这样一个计数器cnt1:在低电平时被启动开始计数,当计数器的输入变为高电平时停止计数,这时可以比较计数值的大小。
根据以上“分析解码原理”中分析可知:当计数值大于或等于7时编码为“1”,否则编码为“0”。
这样便完成一位编码的接收,照此方法继续接收其他编码。
当接收到的编码位数满足12位时,表明按下一个键发射的编码已被解码完毕,此时即可输出一串完整的翻译后的编码。
这就需要一个计数值上限为12的计数器cnt2来指示接收到的编码位数,以此来控制编码的输出。
当接收到一个有效按键后在显示的同时还需要用响铃来提示,可以考虑预设一个上限值为常量的计数器cnt3来控制响铃时间。
本程序用状态机来完成这些功能,其ASM图如下,图中各个状态的说明如下:S0:复位等待状态,键盘输入状态,低电平检测计数器cnt1、编码位数计数器cnt2和响铃时间计数器cnt3清零,12位移位寄存器清零,响铃标志位输出为低电平。
因为设置为遥控器接收优先,所以此时若接收到遥控器发射的信号则转入遥控器发射信号解码状态,否则就进行键盘输入解码。
S1:接收信号有低电平,转入S2状态低电平检测计数器开始计数,否则继续检测是否有低电平。
S2:低电平检测计数器cnt1开始计数,检测低电平时间长度,当检测到输入信号为高电平时,计数器停止工作并转入下一状态。
S3:编码位数计数器cnt2加‘1’,计算已收到多少位编码。
并且以7为分界线,检测到输入信号为BIT‘1’,则12位移位寄存器向前移一位,最低位并入一个‘1’;检测到输入信号为BIT‘0’,则12位移位寄存器向前移一位,最低位并入一个‘0’。
当编码计数器达到计数上限12,表明已经接收到一个完整的12位编码,跳入下一状态开始译码。
S4:译码部分,对解码之后的信号进行相应的译码输出。
ACTION:响应状态,接收并翻译完一个按键信号后,指示器开始作出响应:单击/连续指示器信号输出,用户码输出,响铃计数器cnt3开始计数直到预设值才停止。
然后复位。
(3)ASM图:(4)模块源程序:--ANAL YZE.VHDlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity analyze isport (clk : in std_logic; --时钟信号datain : in std_logic; --串行输入信号reset : in std_logic; --复位信号keyin4 : in std_logic_vector(3 downto 0); --键盘输入信号code : out std_logic_vector(4 downto 0); --解码后的编码,可输入CD4511显像led : out std_logic; --彩灯控制信号,用于区分单击/连续键user : out std_logic_vector (2 downto 0); --用户端信号beep : out std_logic ); --蜂鸣信号end analyze;architecture behav of analyze istype statetype is (s0, s1, s2, s3, s4,action);signal state : statetype ;constant beeptime : integer := 80 ;beginst: process (clk,datain)variable cnt1,cnt2,cnt3 : integer range 0 to 30; --定义三个计数器:cnt1是收到0的个数variable reg : std_logic_vector(11 downto 0); --cnt2是收到1的个数cnt3控制响铃时间variable temp : std_logic_vector (4 downto 0);variable templed : std_logic;begin---------------------------------------------------------------------------------------------------------------------- -- 检测键盘输入和开始远程端接收部分,设置为遥控发射器优先if reset= '1' then --复位,进入s0状态state <= s0; code <= "00000"; led <= '1'; user <="111";elsif rising_edge (clk) thencase state iswhen s0 =>if datain = '0' thenreg:="000000000000"; templed:= '1'; temp:="00000"; --若接收到遥控器发出的低--电平即开始启动计数器cnt1:=0; cnt2:=0; cnt3 := 0; --计数器、寄存器和数据暂存器清零state <= s1;elsif keyin4 = "0111" then --当键盘输入为"1"时code <= "00001"; beep<='1'; led <= '1'; user <="111";elsif keyin4 = "1011" then --当键盘输入为"2"时code <= "00010"; beep<='1'; led <= '1'; user <="111";elsif keyin4 = "1101" then --当键盘输入为"3"时code <= "00011"; beep<='1'; led <= '1'; user <="111";elsif keyin4 = "1110" then --当键盘输入为"4"时code <= "00100"; beep<='1'; led <= '1'; user <="111";elsestate <= s0;beep<='0';led <= '1';end if;---------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- --译码部分,检测发射端的发射信号when s1 => --扫描发射器是否有输出低电平if datain = '0' then --如果收到低电平那么转到s2状态并启动计数器cnt1 state <= s2;elsestate <= s1; --否则继续检测end if;---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------when s2 =>if datain = '0' then --收到一个低电平就计数一次cnt1:=cnt1 + 1;state <= s2;elsif datain='1' then --如果收到一个高电平表明收到一位数此时停止计数器cnt1 state <= s3; --并进入状态2启动计数器cnt2,开始计已收到多少位数end if;---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------when s3 =>cnt2:=cnt2 + 1; --cnt2计算已收到多少位数--以7为分界线,区分出收到的数是0还是1 if cnt1 < 7 then --如果收到的低电平数少于7个则表明收到的是0reg:=reg(10 downto 0) & '0'; --此时将0存入12位的移位寄存器中else --若收到的低电平数大于或等于7,则收到的是1reg:=reg(10 downto 0) & '1'; --此时将1存入12位的一位寄存器中end if;if cnt2 = 12 then state <= s4; --如果计数器cnt2的计数值为12,--表明已经接收完一个发射码else cnt1:= 0 ; --否则将cnt1清零以后继续检测收到的数state <= s1;end if;---------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- --译码部分,对译码之后的信号进行相应的译码输出when s4 =>beep <= '1' ;case reg(8 downto 0) iswhen "100100000" =>temp := "00001";-- 1when "100010000" =>temp := "00010";-- 2when "100001000" =>temp := "00011";-- 3when "100000100" =>temp := "00100";-- 4when "100000010" =>temp := "00101";-- 5when "100000001" =>temp := "00110";-- 6when "010100000" =>temp := "00111";-- 7when "010010000" =>temp := "01000";-- 8when "010001000" =>temp := "01001";-- 9when "010000100" =>temp := "10000";--10when "010000010" =>temp := "10001";--11when "010000001" =>temp := "10010";--12when "001100000" =>temp := "10011";--13when "001010000" =>temp := "10100";--14when "001001000" =>temp := "10101";--15when "001000100" =>temp := "10110";--16when "001000010" =>temp := "10111";--17when "001000001" =>temp := "11000";--18when others =>temp := "00000";end case;user <= reg(11 downto 9); --移位寄存器的前三位是用户码templed := not reg(8); --可以用12位接收码的第4位(H)作为连续键的标志state <= action ; --位来区分其他单击键,将其取反后作为连续键指示灯的输入---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------when action => --响应状态led <= templed; --led信号输出给连续键指示灯控制其亮灭code <= temp;cnt3 := cnt3+1; --每翻译出一个码,响铃计数器cnt3就计数一次if cnt3 = beeptime then --计数到设定的时间后,铃声不再响跳到初始状态beep <= '0'; --检测下帧数据(一帧数据是12位码)state <= s0 ;elsestate <= action ;end if;when others =>state <= s0;end case;end if;end process st;end behav;(5)仿真图:a)键盘直接输入(遥控器不按下时)的仿真图:由上图可知,当顺序循环按下键盘上的1~4号按键时,可以看到经解码模块解码后得到的对应输出编码分别为“00001”,“00010”,“00011”,“00100”;响铃信号为高电平,铃响;单击/连续指示信号为低电平,灯不亮。