实例C.docx
《实例C.docx》由会员分享,可在线阅读,更多相关《实例C.docx(26页珍藏版)》请在冰豆网上搜索。
实例C
实例C红外线遥控应用实例
红外线遥控成本低,安全可靠,不会产生电器干扰,因此,在家电设备及其他近距离的遥控中得到广泛应用。
本章将通过LED显示遥控器按键值实例、简易红外线遥控开关和红外线遥控七色小彩灯实例,介绍红外线遥控基本原理及其设计、应用方法。
C.1LED显示遥控器按键值
功能说明:
选用一种电视机遥控器,再利用接收模块结合单片机解码,控制P1端口所接的8个LED亮或灭。
因此,8个LED的亮或灭的状态,即是显示红外遥控器的按键值。
8个LED视为8位二进制数,其中LED亮视为0,LED灭视为1。
例如,按动红外遥控器按键1,8个LED中右边第一个灭,其他全亮,则表示二进制数为00000001B,转换成十六进制数为01H,即红外遥控器按键1的控制编码为01H;如果按动红外遥控器按键2,8个LED中右边第二个灭,其他全亮,表示二进制数为00000010B,转换成十六进制数为02H,即红外遥控器按键2的控制编码为02H。
再如,按动红外遥控器“POWER”键,8个LED中第2、5灭,其他全亮,表示二进制数为00010010B,转换成十六进制数为12H,即遥控器的POWER键控制编码为12H。
二进制数转换十六进制数的方法可以参考书后附录B的制式转换表。
C.1.1红外线遥控原理
1.红外线遥控系统结构
红外线遥控系统是由发射端和接收端两部分组成,如图C.1和C.2所示。
红外线发射端就是红外遥控器,主要包括键盘、编码调制芯片、红外线发射LED。
当按下某一按键后,遥控器上的编码调制芯片便进行编码,并结合载波电路的载波信号而成为合成信号,再经红外线发射二极管,将红外线信号发射出去。
图C.1红外线发射端工作方框图
图C.2红外线接收端工作方框图
红外线接收端主要包括红外线接收模块、解码单片机。
其中红外线接收模块里包括光、电转换放大器、解调电路。
当红外线发射信号进入接收模块后,在其输出端便可以得到原先的数字控制编码,再经过单片机解码程序进行解码,便可以得知按下了哪一按键,从而完成红外线遥控的动作。
2.编码方式与解码原理
红外线遥控器的编码与所使用的编码芯片有关,不同的芯片编码有所不同,但基本原理相似。
这里以SC9012芯片为例,说明遥控编码方式和解码原理。
SC9012一帧完整的发射码是由引导码、用户编码和键数据码3部分组成。
编码的格式如图C.3所示。
图C.3红外线发射码格式
引导码由一个4.5ms的高电平脉冲及4.5ms的低电平脉冲组成。
八位的用户编码被连续发送两次,八位的键数据码也被发送两次,第一次发送的是键数据码的原码,第二次发送的是键数据码的反码,所以,整个数据编码占用32位。
数据编码方式是通过脉宽调制来实现的,以脉宽为0.56ms,间隔为0.56ms,周期为1.125ms的组合表示二进制的“0”;以脉宽为0.56ms,间隔为1.69ms,周期为2.25ms的组合表示二进制的“1”,其接收端波形如图C.4和图C.5所示。
图C.4遥控码“0”波形图
图C.5遥控码“1”波形图
单片机解码的关键是如何识别“0”和“1”,从上面遥控码“0”和“1”的波形图中可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,即“1”的高电平宽度是“0”的高电平宽度的3倍。
如果延时0.56ms,若读到的电平为低,说明该位为“0”,反之则为“1”。
或者设计一精确的延时时间,例如以0.093ms延时时间当作基础时间,以调用基础延时时间的次数来计数实际的波形宽度,若读值为6表示波形宽度为0.56ms,若读值为18则表示波形宽度为1.68ms,因此,可以直接通过判断高电平的宽度的计数值是6或是18,来判断接收的原编码为0或1。
C.1.2硬件设计
红外线发射端采用市场上通用的一种红外遥控器(芯片为SC9012或TC9012系列等)。
接收端采用一体化红外接收头,红外接收头只有3个引脚:
引脚1为数字信号输出端(OUT),引脚2为接地端(GND),引脚3为电源输入(VCC)。
红外接收头与单片机连接非常简单,只需将信号输出端(OUT)与单片机一个I/O引脚连接(P3.2),然后接上电源即可。
单片机主要用于解码,P1端口所接的8个LED用来显示解码后红外遥控器的按键值。
单片机的P2.4引脚通过限流电阻R与三极管基极相接,三极管的集电极接有蜂鸣器,电路如图C.6所示。
图C.6红外线接收电路图
C.1.3程序设计
程序中,主程序通过调用解码子程序,将接收到的红外线遥控器信号进行解码,再调用遥控执行子程序,将解码后的按键值由LED显示出来。
所以,解码子程序是程序中的主要部分。
1.主要标号说明
MAIN:
主程序。
IR_IN:
解码子程序。
IR_ZX:
遥控执行子程序。
FS_SPK:
发声子程序。
DE:
短暂延时子程序。
DELAY05_R5:
延时子程序,总延时时间为0.5ms × R5。
DEL:
用于解码延时子程序,延时时间为0.093ms。
2.程序清单
汇编语言编写的LED显示红外线遥控器按键值源程序IR01.ASM代码如下:
01;---------------------------------------------------------------------
02;程序名:
IR01.ASM
03;程序功能:
显示红外遥控器按键值
04;---------------------------------------------------------------------
05;----------------------------程序初始化-------------------------------
06SPKEQUP2.4;压电喇叭信号输入位
07IRINEQUP3.2;红外线IR信号输入位
08;--------------------------
09IRDZEQU20H;解码数据放置起始地址
10DZ3EQU22H;比较第3字节
11
12;-------------------------------主程序-------------------------------
13
14MAIN:
15ACALLFS_SPK;调用发声子程序,响一声
16SETBIRIN;IR输入位设置为高电平
17LOOP:
18MOVR0,#IRDZ;设置IR解码起始地址
19ACALLIR_IN;调用解码子程序,解码
20ACALLIR_ZX;调用遥控执行子程序,执行动作
21JMPLOOP;继续循环执行
22
23;----------------------------解码子程序-------------------------------
24
25IR_IN:
;解码子程序
26;确认IR信号出现,避开9毫秒引导脉冲
27L1:
JNBIRIN,L2;等待IR信号出现
28JMPL1
29L2:
MOVR5,#17;避开9毫秒引导脉冲
30ACALLDELAY05_R5
31JBIRIN,L1;确认IR信号出现
32;-------------------------------
33L3:
JBIRIN,L4;等IR变为高电平
34ACALLDEL;调用0.093ms延时程序
35JMPL3
36L4:
MOVR3,#0;8位计数清为0
37;-------------------------------
38;避开低电平,待直接判断高电平
39L5:
JNBIRIN,L6;等IR变为低电平
40ACALLDEL;调用0.093ms延时程序
41JMPL5
42L6:
JBIRIN,L7;等IR变为高电平
43ACALLDEL;调用0.093ms延时程序
44JMPL6
45;-------------------------------
46;通过调用0.093ms延时次数的计数值来判断高电平的宽度,解码0或1
47L7:
MOVR2,#0;0.093ms计数清为0
48L8:
ACALLDEL;调用0.093ms延时子程序
49JBIRIN,L9;等IR变为高电平
50;-----------------------
51MOVA,#8;将A寄存器设置为8
52CLRC;清除借位标志C
53SUBBA,R2;以减法指令SUBB来判断高低位
54MOVA,@R0;R0值为解码内存地址,即取出内存数据给A
55RRCA;将借位标志C右移进入A
56MOV@R0,A;将数据写入内存
57INCR3;R3值加1,处理完一位
58CJNER3,#8,L5;需处理完8位
59;---------------------
60MOVR3,#0;计数清0
61INCR0;R0值加1
62CJNER0,#23H,L5;收集到4字节
63JMPL10
64L9:
INCR2;R2值加1
65CJNER2,#30,L8;计数过长离开
66L10:
67RET;子程序返回
68
69;---------------------------遥控执行子程序------------------------------
70
71IR_ZX:
;遥控执行子程序
72MOVA,DZ3;将第3字节数据赋予A
73MOVP1,A;显示二进制按键值
74ACALLFS_SPK;调用发声子程序,响一声
75RET
76
77;-------------------------------发声子程序----------------------------
78
79FS_SPK:
;发声子程序
80MOVR6,#0
81B1:
ACALLDE
82CPLSPK
83DJNZR6,B1
84MOVR5,#100
85ACALLDELAY05_R5
86RET
87
88;---------------------------短暂延时子程序----------------------------
89
90DE:
;短暂延时子程序
91MOVR7,#180
92DE1:
NOP
93DJNZR7,DE1
94RET
95
96;------------------------------延时子程序-----------------------------
97
98DELAY05_R5:
;延时子程序,总延时时间为0.5ms*R5
99MOVR6,#5
100D1:
MOVR7,#10
101DJNZR7,$
102DJNZR6,D1
103DJNZR5,DELAY05_R5
104RET
105
106;--------------------------解码延时子程序----------------------------
107
108DEL:
;用于解码延