用单片机制作红外线多路遥控器,Infra-red remote controller
关键字:单片机制作红外线多路遥控器
红外线发射/接收控制电路均采用AT89C2051单片机来实现,电路简单,输出控制方式可选择,实用性强。 工作原理:图1为红外线发射电路原理图,K0至K7为遥控按钮,单片机P3.4端口控制红外线的发射。T1作为发射时间控制器,T0作为红外线发射频率控制器。当有按键按下时,控制软件启动定时器T0、T1, T0定时溢出,中断程序使P3.4端口状态反转一次,写入定时器的初值不同,在输出端口就可得到不同的发射频率。T1定时溢出,中断程序关闭T0定时器,停止红外线发射。程序见清单(一)。软件设计参数为:T1定时时间为100ms,K0至K7按钮所对应的红外线发射频率分别为300、600、900、1200、1500、1800、2100、2400 Hz。 图2为红外线接收及控制电路原理图,SW为控制方式选择开关:SW闭合时,单片机输出为“互锁”控制方式;非闭合时,输出控制为单路控制方式。T0为红外线脉冲计数器,T1作为计数时间控制器。接收电路中Q1接收到第一个红外线脉冲时,中断INT1被触发,启动计数器T0和定时器T1。定时溢出,中断程序关闭计数器T0,读入计数值并进行判断,确定操作对象(P1.0至P1.7),对其进行反转操作,控制电路对所控制的负载进行开或关;若SW为闭合,则同时关闭其它所有输出端口,实现了“互锁”功能。程序见清单(二)。 本文中的程序在仿真器中运行通过。利用此原理,可对控制路数进行扩展。控制路数比较多时,为缩小发射器体积,可利用组合键方法来实现,具体方法在此就不详细说明了。
一、 k0 BIT P1.0 k1 BIT P1.1 k2 BIT P1.2 k3 BIT P1.3 k4 BIT P1.4 k5 BIT P1.5 k6 BIT P1.6 k7 BIT P1.7 bz bit 00h k0h equ #0f1h k0l equ #0c8h ;k0键输出频率300Hz833 k1h equ #0f8h k1l equ #0ech ;k1键输出频率600Hz417 k2h equ #0feh k2l equ #0eah ;k2键输出频率900Hz278 k3h equ #0ffh k3l equ #030h ;k3键输出频率1200Hz208 k4h equ #0ffh k4l equ #059h ;k4键输出频率1500Hz167 k5h equ #0ffh k5l equ #075h ;k5键输出频率1800Hz139 k6h equ #0ffh k6l equ #089h ;k6键输出频率2100Hz119 k7h equ #0ffh k7l equ #098h ;k7键输出频率2400Hz104 ORG 0000H aJMP START ORG 000BH ;定时器T0入口 aJMP intt0 ORG 001bH ;定时器T1入口 aJMP intt1 org 0030h intt0: cpl p3.4 mov a,r1 mov th0,a mov a,r2 mov tl0,r2 reti intt1: clr tr0 clr et0 clr tr1 clr et1 setb bz setb p3.4 reti start: MOV P1,#0FFH mov p3,#0ffh MOV TMOD,#11H ;计数器T0、T1工作在方式1 setb ea ;开所有中断 xh: jb k0,d01 acall ys Jb k0,d01 ;k0 jnb k0,$ acall sett1 mov r1,k0h mov r2,k0l acall sett0 jnb bz,$ d01: jb k0,d02 acall ys Jb k0,d02 ;k1 jnb k0,$ acall sett1 mov r1,k1h mov r2,k1l acall sett0 jnb bz,$ D02: jb k0,d03 acall ys Jb k0,d03 ;k2 jnb k0,$ acall sett1 mov r1,k2h mov r2,k2l acall sett0 jnb bz,$ D03: jb k0,d04 acall ys Jb k0,d04 ;k3 jnb k0,$ acall sett1 mov r1,k3h mov r2,k3l acall sett0 jnb bz,$ D04: jb k0,d05 acall ys Jb k0,d05 ;k4 jnb k0,$ acall sett1 mov r1,k4h mov r2,k4l acall sett0 jnb bz,$ D05: jb k0,d06 acall ys Jb k0,d06 ;k5 jnb k0,$ acall sett1 mov r1,k5h mov r2,k5l acall sett0 jnb bz,$ D06: jb k0,d07 acall ys Jb k0,d07 ;k6 jnb k0,$ acall sett1 mov r1,k6h mov r2,k6l acall sett0 jnb bz,$ D07: jb k0,d08 acall ys Jb k0,d08 ;k7 jnb k0,$ acall sett1 mov r1,k7h mov r2,k7l acall sett0 jnb bz,$ d08: ajmp xh ys: mov r5,#80h ys1: djnz r5,ys1 ret sett1: MOV TH1,#3ch ;定时时间约为100ms MOV TL1,#0b0h setb tr1 ;启动T1计时 setb et1 ;允许T1中断 clr bz ret sett0: MOV TH0,r1 MOV TL0,r2 setb tr0 setb et0 ret end
接收部分-----见下一页面
|