1、内 容 提 要无线遥控是指利用无线电波、红外线、超声波等作为载体,不用导线,而在空间传输,实现对以家用电器为代表的中小型电器的遥控方法,主要有无线电遥控和红外线遥控。红外光波的波长远小于无线电波的波长,因此红外线遥控信号不会影响其它家用电器和邻近的无线电设备;另外,红外线遥控不具有无线电遥控那样穿透障碍物去控制被控对象的能力,在设计家用电器的红外线遥控器时,不必要像无线电遥控那样,每套发射器和接收器要有不同的遥控频率或编码,否则,就会隔墙控制或干扰邻居的家用电器,所有同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况,这对于大批量生产以及在家用电器上普及红外线
2、遥控提供了极大的方便。本设计由通用红外遥控编码芯片SC9012构建红外发射系统, 由89C51单片机和一体化红外接收头构建红外接收系统。关 键 词红外线遥控;红外线发射;红外线接收;单片机主 要 内 容一、课程设计的目的目前,单片机已广泛应用到国民经济建设和日常生活的许多领域,成为测控技术现代化必不可少的重要工具。1、进一步熟悉和掌握单片机的结构及工作原理。2、掌握单片机的接口技术及相关外围芯片的外特性,控制方法。3、通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。4、通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。5、通过完成一个包括电路设
3、计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应的工作打下基础。二、设计过程2.1 红外线遥控系统结构 红外线遥控系统是由发射端和接收端两部分组成,如图C.1和C.2所示。红外线遥控系统是由发射端和接收端两部分组成,红外线发射端就是红外遥控器,主要包括键盘、编码调制芯片、红外线发射LED。当按下某一按键后,遥控器上的编码调制芯片便进行编码,并结合载波电路的载波信号而成为合成信号,再经红外线发射二极管,将红外线信号发射出去。红外线接收端主要包括红外线接收模块、解码单片机。其中红外线接收模块里包括光、电转换放大器、解调电路。当红外线发射信号进入接收模块后,在其输出端便
4、可以得到原先的数字控制编码,再经过单片机解码程序进行解码,便可以得知按下了哪一按键,从而完成红外线遥控的动作。功能说明:选用一种电视机遥控器,再利用接收模块结合单片机解码,控制P1端口所接的8个LED亮或灭。因此,8个LED的亮或灭的状态,即是显示红外遥控器的按键值。8个LED视为8位二进制数,其中LED亮视为0,LED灭视为1。2.2 单片机的选用 红外线发射端采用通用的一种红外遥控器(芯片SC9012)。接收端采用89C51单片机和一体化红外接收头,红外接收头只有3个引脚:引脚1 为数字信号输出端(OUT),引脚2 为接地端(GND),引脚3 为电源输入(VCC)。红外接收头与单片机连接非
5、常简单,只需将信号输出端(OUT)与单片机一个I/O 引脚连接(P3.2),然后接上电源即可。单片机主要用于解码,P1端口所接的8个LED用来显示解码后红外遥控器的按键值。单片机的P2.4引脚通过限流电阻R 与三极管基极相接,三极管的集电极接有蜂鸣器。2.4 红外遥控的解码问题SC9012一帧完整的发射码是由引导码、用户编码和键数据码3部分组成。编码的格式如图C.3所示。引导码由一个4.5ms 的高电平脉冲及4.5ms的低电平脉冲组成。八位的用户编码被连续发送两次,八位的键数据码也被发送两次,第一次发送的是键数据码的原码,第二次发送的是键数据码的反码,所以,整个数据编码占用32 位。数据编码方
6、式是通过脉宽调制来实现的,以脉宽为0.56ms,间隔为0.56ms,周期为1.125ms 的组合表示二进制的“0”;以脉宽为0.56ms,间隔为1.69ms,周期为2.25ms 的组合表示二进制的“1”,其接收端波形如图单片机解码的关键是如何识别“0”和“1”,从上面遥控码“0”和“1”的波形图中可以发现“0”、“1”均以0.56ms 的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,即“1”的高电平宽度是“0”的高电平宽度的3 倍。如果延时0.56ms,则读到的电平为低,说明该位为“0”,反之则为“1”。或者设计一精确的延时时间,例如以0.093ms 延时时
7、间当作基础时间,以调用基础延时时间的次数来计数实际的波形宽度,若读值为6 表示波形宽度为0.56ms,若读值为18 则表示波形宽度为1.68ms,因此,可以直接通过判断高电平的宽度的计数值是6 或是18,来判断接收的原编码为0 或1。三、设计原理图和流程图根据上面的设计过程,绘制的原理图如下:红外线发送电路四、编程如下:主要标号说明 MAIN:主程序。 IR_IN:解码子程序。 IR_ZX:遥控执行子程序。 FS_SPK:发声子程序。 DE:短暂延时子程序。 DELAY05_R5:延时子程序,总延时时间为0.5ms R5。 DEL:用于解码延时子程序,延时时间为0.093ms。程序清单汇编语言
8、编写的LED 显示红外线遥控器按键值源程序IR01.ASM 代码如下:01 ;程序名:IR01.ASM02 ;程序功能:显示红外遥控器按键值03 ;- 程序初始化04 SPK EQU P2.4 ; 压电喇叭信号输入位05 IRIN EQU P3.2 ; 红外线IR 信号输入位06 IRDZ EQU 20H ; 解码数据放置起始地址07 DZ3 EQU 22H ; 比较第3字节08 ;- 主程序09 MAIN:10 ACALL FS_SPK ; 调用发声子程序(79),响一声11 SETB IRIN ; IR 输入位设置为高电平12 LOOP:13 MOV R0, # IRDZ ; 设置IR解码
9、起始地址14 ACALL IR_IN ; 调用解码子程序(25),解码15 ACALL IR_ZX ; 调用遥控执行子程序(71),执行动作16 JMP LOOP ; 继续循环执行17 ;- 解码子程序18 IR_IN: ; 解码子程序19 ; 确认IR信号出现,避开9毫秒引导脉冲20 L1: JNB IRIN, L2 ; 等待IR信号出现21 JMP L122 L2: MOV R5,#17 ; 避开9毫秒引导脉冲23 ACALL DELAY05_R524 JB IRIN, L1 ; 确认IR信号出现25 L3: JB IRIN, L4 ; 等IR变为高电平26 ACALL DEL ; 调用0
10、.093ms延时程序27 JMP L328 L4: MOV R3,#0 ; 8位计数清为029 ;-30 ; 避开低电平,待直接判断高电平31 L5: JNB IRIN, L6 ; 等IR变为低电平32 ACALL DEL ; 调用0.093ms延时程序33 JMP L534 L6: JB IRIN, L7 ; 等IR变为高电平35 ACALL DEL ; 调用0.093ms延时程序36 JMP L637 ;-38 ; 通过调用0.093ms延时次数的计数值来判断高电平的宽度,解码0或139 L7: MOV R2,#0 ; 0.093ms计数清为040 L8: ACALL DEL ; 调用0.
11、093ms 延时子程序41 JB IRIN, L9 ; 等IR变为高电平42 ;-43 MOV A,#8 ; 将A寄存器设置为844 CLR C ; 清除借位标志C45 SUBB A,R2 ; 以减法指令SUBB 来判断高低位46 MOV A,R0 ; R0值为解码内存地址,即取出内存数据给A47 RRC A ; 将借位标志C右移进入A48 MOV R0, A ; 将数据写入内存49 INC R3 ; R3值加1,处理完一位50 CJNE R3,#8,L5 ; 需处理完8位51 ;-52 MOV R3,#0 ; 计数清053 INC R0 ; R0值加154 CJNE R0, #23H, L5
12、 ; 收集到4字节55 JMP L1056 L9: INC R2 ; R2值加157 CJNE R2, #30, L8 ; 计数过长离开58 L10:59 RET ; 子程序返回60;- 遥控执行子程序61 IR_ZX: ; 遥控执行子程序62 MOV A, DZ3 ; 将第3字节数据赋予A63 MOV P1, A ; 显示二进制按键值64 ACALL FS_SPK ; 调用发声子程序,响一声65 RET66 ;- 发声子程序67 FS_SPK: ; 发声子程序68 MOV R6, #069 B1: ACALL DE70 CPL SPK71 DJNZ R6, B172 MOV R5, #100
13、73 ACALL DELAY05_R574 RET75 ;- 短暂延时子程序76 DE: ; 短暂延时子程序77 MOV R7, #18078 DE1: NOP79 DJNZ R7, DE180 RET81 ;- 延时子程序82 DELAY05_R5: ;延时子程序,总延时时间为0.5ms*R583 MOV R6, #584 D1: MOV R7, #1085 DJNZ R7, $86 DJNZ R6, D187 DJNZ R5, DELAY05_R588 RET89 ;- 解 码 延时子程序90 DEL: ; 用于解码延时子程序,延时为0.093ms91 MOV R7, #2292 E1:
14、NOP93 NOP94 DJNZ R7, E195 RET96 ;-97 END ; 程序结束C.1.4 代码详解0407:为程序初始化部分。04:P2.4 为压电喇叭信号输入位,并设定P2.4以SPK 表示。05:P3.2 为红外线IR 信号输入位,并设定P3.2 以IRIN 表示。06:20H 为解码数据放置起始地址,并设定起始地址20H 以IRDZ 表示。解码数据一共需要占用4 字节,即20H、21H、22H、23H。其中20H和21H 单元放置用户编码,22H 单元放置按键数据编码,23H 单元放置按键数据码的反码。07:22H单元放置的是按键数据编码,并设定22H 单元以DZ3 表示
15、。1421:为主程序部分。10:调用FS_SPK 发声子程序,响一声,表示红外线接收开始工作。11:将红外线信号输入位设置为高电平。12:循环开始。13:将20H 赋给寄存器R0, 设置红外线解码起始地址。14:调用IR_IN 解码子程序,将接收到的红外线遥控器信号进行解码。15:调用IR_ZX 遥控执行子程序,将解码后的按键值由LED 显示出来。16:无限循环执行。1859:红外线接收解码子程序部分。18:解码子程序开始。2028:确认IR信号出现,避开9ms引导脉冲。接收端接收到的引导码是由一个4.5ms的低电平脉冲及4.5ms 的高电平脉冲组成9ms引导脉冲,当IR信号出现后,通过调用D
16、ELAY05_R5延时子程序避开9ms引导脉冲。3136:避开低电平,直接判断高电平。数据“0”和“1”的波形均以0.56ms的低电平开始,只是高电平的宽度不同,因此,可以避开低电平,直接通过判断高电平的宽度来确定数据“0”或“1”。39:R2 为计数高低电平宽度的计数器,使计数初始值为0,即从0 开始计数调用0.093ms解码延时的次数。40:调用0.093ms延时解码子程序。41:如果仍为高电平,则跳转到标号L9 处执行,使R2 值加1。43:将A寄存器设置为8。44:清除借位标志C。45:指令“SUBB A, R2”中R2 为计数值,若出现高电平的宽度为0.56ms,即数字“0”的特征,
17、则调用6 次0.093ms 延时便会出现低电平,此时存入R2 中的计数值为6。若出现高电平的宽度为1.68ms,即数字“1”的特征,则需要调用18 次0.093ms 延时才能出现低电平,此时存入R2 中的计数值为18。所以,R2中计数值是6还是18,就决定编码“0”或是“1”。A 寄存器设置为8,当R2 值为6 时,“8-R2”无产生借位,借位标志C = 0,表示编码为0。当R2 值为18 时,“8-R2”产生借位,借位标志C = 1,表示编码为1。46:R0 以间接寻址方式取出内存数据给A。47:右移指令,将借位标志C右移进入A寄存器中。48:将数据写入内存内。49:R3 值加1,处理完一位
18、。50:一字节需收集完8 位数据。5255:需要收集到4 字节。56:R2 值加1。57:计数过长自动离开。59:解码子程序返回。6165:遥控执行子程序。62:将第3 字节的内容,即解码后的红外按键编码数据送入寄存器A中。63:将寄存器A 中的内容送入P1 端口输出,由8 个LED 显示二进制按键值。64:调用发声子程序,响一声。65:遥控执行子程序返回。6774:发声子程序。7680:短暂延时子程序。8288:延时子程序,总延时时间为0.5ms R5。9095:用于解码延时子程序,延时为0.093ms。97:程序结束。小结基于89C51单片机以及红外编码芯片SC9012设计的红外线遥控系统
19、,结构简单、价格低廉,系统稳定性好,电路及控制程序略加改变即可运用于各种不同的家用电器的红外线遥控系统中。通过本课程设计,进一步熟悉和掌握单片机的结构及工作原理。掌握单片机的接口技术及相关外围芯片的外特性,控制方法。通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应的工作打下基础。参考文献1、8051单片机课程设计实训教材,陈明荧,清华大学出版社2、数字电子技术,阎石,高等教育出版社3、模拟电子技术,童诗白,高等教育出版社4、单片机课程设计指导,谭浩强,清华大学出版社5、 MCS-51单片机应用设计,张毅刚,哈工大出版社6、 单片机原理实验教程,薛庆军、张秀娟,北京航空航天大学出版社 .