当前位置:文档之家› 红外遥控解码单片机课程设计报告

红外遥控解码单片机课程设计报告

单片机课程设计报告——————————红外遥控解码学校:东莞理工学院院系:电子工程学院作者:官炎钦同组人员:陈帅、林志鹏、洪楚明目录:一、前言 ------------------------------------------- 1二、设计原理 --------------------------------------- 11、红外通信原理 -------------------------------------------------- 12、红外编码原理 -------------------------------------------------- 3三、硬件电路设计 ----------------------------------- 51、总体电路图 ----------------------------------------------- 52、数码管与LED显示电路图 ---------------------------------------6四、软件设计 --------------------------------------- 71、程序框图 ----------------------------------------------------- 82、程序清单 ----------------------------------------------------- 83、总结与心得 --------------------------------- 14一、前言随着科学技术的发展,单片机因其该可靠性和高性价比,在智能化家用电器仪表仪器等恒多领域得到极为广泛的应用。

在很多实际单片机系统中,常常使用非电信号,如光信号,超声波信号等,来传播信息,以实现遥控和遥测的功能,其中红外遥控是目前最广泛的一种通信和控制手段。

由于红外遥控使用方便、功耗低、成本低廉、功能强、抗干扰强等特点,因而,继彩电、录像机之后,在录音机、音响备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。

本设计以STC89C52单片机作为控制中心,综合应用了单片机内部结构及中断系统等知识,应用红外光的优点,实现对红外遥控器的解码和通信。

二、设计原理1、红外通信原理红外通信,即以红外线作为通信载体,通过红外光在空中的传播来传输数据的通信方式,它有发射红外线的电路和接收端来完成。

在发射端,发送的数字信号经过适当的调制编码后,送入电光变换电路,经红外发射管转变为红外光脉冲发射到空中;在接收端,红外接收器对接收到的红外光脉冲进行光电变换,解调,再经单片机处理,便可以恢复出原数据信号。

红外通信原理图2、红外编码原理常用的红外线信号传输协议有ITT 协议、NEC 协议、Nokia NRC 协议、Sharp 协议、Philips RC-5 协议、Philips RC-6协议,Philips RECS-80协议,以及Sony SIRC 协议等。

1)协议组成:一般由引导码,用户码,数据码,重复码或数据码的反码和结束码构成。

2)载波:常用的有33K,36K,36.6K,38K,40K,56K,无载波3)占空比:常用的有1/3,1/2,不常用1/44)调制方式:脉宽调制,相位调制,脉冲位置调制本次设计红外发射端选用的是NEC协议编码的,由38K载波调制的红外编码的红外遥控器。

(1)0和1的编码遥控器发射的信号由一串0和1的二进制代码组成。

不同芯片对0和1的编码有所不同。

通常有曼彻斯特编码和脉冲宽度编码。

TC9012的0和1采用PWM方法编码,即脉冲宽度调制。

以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,如下图所示:(2)按键的编码遥控发射器专用芯片很多,根据编码格式可以分成两大类,即32位编码类和42 位编码类。

UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。

该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。

UPD6121G最多额128种不同组合的编码。

本设计中用到的遥控器具体键值如下:(3)接收器及接收码的格式1)接收器SM0038 是塑封一体化红外线接收器,它是一种集红外线接收、放大、整形于一体的集成电路,不需要任何外接元件,就能完成从红外线接收到输出与TTL 电平信号兼容的所有工作,没有红外遥控信号时为高电平,收到红外信号时为低电平,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。

2)代码格式接收代码格式如图所示,注意接收代码与发射代码高低电平相反。

0和1的波形三、硬件电路设计本设计以STC89C52为核心,外接红外接收电路,LED显示电路,数码管显示电路及蜂鸣器电路,其总体硬件方框图如下:总体硬件电路图:(2)LED显示电路改电路由八个LED灯组成,发光二极管负极端接8个限流电阻。

但单片机某个I/O口为低电平时,其所对应的发光二极管亮。

(4)数码管电路由于单片机实验箱的限制,本设计的数码管显示电路采用试验箱原有的由并口芯片8255和74LS240锁存器及数码管组成的数码管电路。

原理图如下:位码由8255 的PA 口输出,字形由经8255 的PB 口输出。

LED 八段管为共阴连接。

8255 芯片的I/O 地址分配如下:8255 的控制口地址为0FF23H;8255 的PA 口(字位控制口)地址为0FF20H;8255 的PB 口(字形控制口)0FF21H。

四、软件设计(1)程序设计总体思路:平时,遥控器无键按下,红外发射二极管不发出信号,遥控接收头输出信号1.有键按下时,0和1编码的高电平经遥控头盗香后会输出信号0.此时可以通过检测是否为引导电平,从而决定是否进入解码程序,在解码程序内,可通过检测信号高电平的时长确定编码“0”还是“1”,进而把接收到的编码放入RAM中保存,以便下一次的校验,校验正确后,用蜂鸣器响一声表示解码正确,解码正确的数据会通过LED灯显示出来,特别的,如果被按下的剑为“0”~“9”,则再用数码管显示相应数字。

(2)重要语句的设计:根据高电平宽度来区别“0”和“1”。

首先判断接收端的输出引脚VOUT是否为低电平,当低电平出现时,接收端与单片机的P3.2口的引脚相连接,单片机进入外部中断0.在中断程序中从0.56ms低电平过后,开始延时,若0.56ms以后,若读到的电平为低,说明改位为“0”,如果读到的电平为高,说明该位为"1"。

为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果改为为“0”,读到的已是下一位的高电平。

因此读取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右即可。

根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码。

根据以上分析,在解码程序中特意编写了精确的延时的子程序:一个为延时882us的子程序,用于识别“0”和“1”,同时重复调用十次可避开9ms的起始码。

为了识别4.5ms结果码,可以调用一个4.7ms的延时程序避开这个结果码。

接下来是32位码,前16位为客户识别码,后16位才是我们需要的按键码值,故程序设计可以用一个us延时程序判断这32位代码码值的是“0”还是“1”,然后舍去前十六位,保留后面所需的16位数据码,对最后的8位码取反与前8位数据码比较,如果相等,则保留这一帧数据,如果不等,说明解码错误,舍去这一帧数据。

(3)程序框图:程序清单:ORG 0000HAJMP START ;转入主程序ORG 0003H ;外部中断P3.2 脚INT0 入口地址AJMP INT ;转入外部中断服务子程序(解码程序)ORG 100H;*********以下为主程序进行CPU 中断方式设置***** START:ACALL RESETMOV SP,#60HMOV P2,#0FFHMOV A,#81H ;***********************MOV DPTR,#0FF23H;设置8155 控制字MOVX @DPTR,A ;***********************SETB EA ;打开CPU 总中断请求SETB IT0 ;设定INT0 的触发方式为脉冲负边沿触发SETB EX0 ;打开INT0 中断请求LOOP: ACALL DPLAYAJMP LOOP;****************************************************** RESET:MOV 24H,#0 ;用来存放按键次数MOV 28H,#0 ;以下6个内存单元存放6位数码管的显示值MOV 29H,#21MOV 2AH,#21MOV 2BH,#21MOV 2CH,#21MOV 2DH,#21RET;****************************************************** DPLAY: SETB RS0 ;设置第第二组寄存器MOV DPTR,#TABMOV R0,#28H ;R0用来间接寻址得到数码管的段码值MOV R2,#0FEH;R2用来间接寻址得到数码管的位码值LD1: MOV R1,#20H;打开8255的PA口MOV A,R2MOVX @R1,A;送位码给8255PA口MOV R1,#21H ;打开8255PB口MOV A,@R0 ;MOVC A,@A+DPTR;寻址获得段码MOVX @R1,A ;段码送8255PB口LCALL YS3; DELAY 1 Ms;延时以提高数码管亮度;INC R0 ;取出下一个码;MOV A,R2;JNB ACC.5,LD2;判断6位数码管数据是否送完;RL A ;移位显示下个数码管;MOV R2,AMOV R1,#21H;该段程序用于消去数码管前一段数据的阴影MOV A,#0FFHMOVX @R1,ASJMP LD1LD2: CLR RS0RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH,08CH,0FFH;*********************************************************;**********************************************************;以下为进入P3.2 脚外部中断子程序,也就是解码程序INT:CLR EA ;暂时关闭CPU 的所有中断请求MOV R6,#10SB: ACALL YS1 ;调用882 微秒延时子程序JB P3.2,EXIT ;延时882 微秒后判断P3.2 脚是否出现高电平如果有就退出解码程序DJNZ R6, SB ;重复10 次,目的是检测在8820 微秒内如果出现高电平就退出解码程序;**********以上完成对遥控信号的9000 微秒的初始低电平信号的识别。

相关主题