单片机模拟遥控器
扫描二维码
随时随地手机看文章
了解了遥控发射的原理,就可以来自己动手做一个遥控器了,可是没有专门的芯片怎么办?用单片机,然后配合程序完成遥控码的发射。
1、硬件电路
其中, 单片机 选用AT89C2051, 使用两节电池供电就可以工作,用P1口构成3×3的模拟键盘,用一个IO口作为遥控波形输出端,然后接三极管驱动红外发射管,发出需要的遥控波形。
2、程序编写
由于要把波形“发射”出去,需要对遥控码进行调制,调制即把遥控码的高电平和载波进行“与”,结果是连续发射一定数量的载波,而低电平则只需进行简单的延时即可。以SAA3010T编码为例,为双相位编码方式,“0”用844US高电平加844US低电平表示,“1”用844US低电平加844US高电平表示,根据上述原理,844US高电平和载波进行“与”,载波的频率为38KHz,周期为1/38k, 所以,结果是
32个完整载波+12us,另外,844US低电平只需用一个延时函数即可。由于程序不长且时间精度要求很高,所以用汇编来编程,程序如下:
发射“0”的子函数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAA3010T;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SEND0: MOVR0,#20H
NEXT0: SETBREMOTE;844us=32个完整载波+12us
MOVR1,#03H ;发送正电平9us
DJNZR1,$
NOP
CLRREMOTE ;发送负电平17us
MOVR1,#06H
DJNZR1,$
NOP
DJNZR0,NEXT0; 32个完整载波发送完毕
SETBREMOTE ;发送高电平9us
MOVR1,#03H
DJNZR1,$
NOP
CLRREMOTE ;3us低电平
NOP
NOP
NOP
ACALL DELAY844US
RET
发射“1”的子函数
SEND1: MOVR0,#20H
CLRREMOTE ; 发送低电平844US
ACALL DELAY844US
NEXT1: SETBREMOTE ;844us=32个完整载波+2US
MOVR1,#03H ; 发送正电平9us
DJNZR1,$
NOP
CLRREMOTE ; 发送负电平17us
MOVR1,#06H
DJNZR1,$
NOP
DJNZR0,NEXT1; 32个完整载波发送完毕
SETBREMOTE; 发送高电平9us
MOVR1,#03H
DJNZR1,$
NOP
CLRREMOTE; 3us低电平
RET
完整的程序还需加上键盘扫描程序,以及连续调用SEND1和SEND0发射一段完整的码。