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