程序流程图如图3所示,在时序上,整个程序基本上所有的时间都是在调用键盘扫描子程序,因此能检测到任何时候的按键。只有在扫描到有按键时才会调用发射红外编码程序,发射一次红外编码程序耗时为58.5ms至76.5ms,该时间很短,对于按键时序不会产生任何影响。
发射红外编码采用定时器中断的方式来实现,设定时值为38k,也就是每隔26 μs中断一次。这样,要发送9ms的引导码,只需要将P3.4置为1,并控制定时器中断次数为346次即可。同样,要发送4.5ms的起始码,只需要将P3.4清0,并控制定时器中断次数为173次即可。其它部分类似。得到的红外编码数据发送子程序如下:
在红外编码数据发送子程序中,“IR_data[]”数组里存放的是一帧数据的4个编码,每个编码8位,共32位;“endcount”用于控制定时时间,例如“endcount=346;”指令将控制发送9ms的起始码。
4 仿真及实物验证
4. 1 仿真结果
红外遥控发射数据时的仿真波形图如图4所示:第一个波形为由单片机U1的P3.4口发送出来的数据,第二个波形为38k载波,第三个波形为调制后的红外发射信号,第四个波形为红外接收滤波后的数据还原。可以看出还原后的数据波形与发射出的数据波形相位刚好反向。这种红外遥控码波形与前述遥控器厂家提供的如图1所示的数据完全吻合。
4.2 实物验证结果
图5所示为用实物验证模拟红外发射接收。其中(b)部分为接收红外遥控信号,解调并用两位数码管来显示接收到的红外编码。(b)部分的解调和显示程序是事先经海信电视CN-22601遥控器、开博尔电视盒遥控器、志高空调ZH/JT-06遥控器等三款红外遥控器测试通过的,可以确保解调和显示程序是正确的。(a)部分为模拟红外遥控发射数据。(a)和(b)两部分通过两根线相连,白色的一根是地线,使两块电路板共地;红色的一根连接(a)部分的P3.4口和(b)部分的外部中断INT0。图5中显示的是当(a)部分按下按键“K14”时,(b)部分显示“14”。
实验结果证明,仿真结果在实物电路板上同样是正确的,说明此发射模块就等于同于一个实际的遥控器。
5 结论
红外遥控发生器Proleus仿真模块具有结构简单、可靠性高、可移植行强等优点。本模块填补了Proleus仿真软件对于红外遥控发射器件的空白。借助本模块,红外遥控系统开发者能大幅度地缩短产品的开发时间,大大提高工作效率。