了解了遙控發(fā)射的原理,就可以來自己動手做一個遙控器了,可是沒有專門的芯片怎么辦?用單片機,然后配合程序完成遙控碼的發(fā)射。 1、硬件電路
其中,單片機選用AT89C2051, 使用兩節(jié)電池供電就可以工作,用P1口構(gòu)成3×3的模擬鍵盤,用一個IO口作為遙控波形輸出端,然后接三極管驅(qū)動紅外發(fā)射管,發(fā)出需要的遙控波形。 2、程序編寫 由于要把波形“發(fā)射”出去,需要對遙控碼進行調(diào)制,調(diào)制即把遙控碼的高電平和載波進行“與”,結(jié)果是連續(xù)發(fā)射一定數(shù)量的載波,而低電平則只需進行簡單的延時即可。以SAA3010T編碼為例,為雙相位編碼方式,“0”用844US高電平加844US低電平表示,“1”用844US低電平加844US高電平表示,根據(jù)上述原理,844US高電平和載波進行“與”,載波的頻率為38KHZ,周期為1/38k, 所以,結(jié)果是 32個完整載波+12us,另外,844US低電平只需用一個延時函數(shù)即可。由于程序不長且時間精度要求很高,所以用匯編來編程,程序如下:
發(fā)射“0”的子函數(shù)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAA3010T;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEND0: MOV R0, #20H NEXT0: SETB REMOTE ; 844us=32個完整載波+12us MOV R1, #03H ;發(fā)送正電平9us DJNZ R1, $ NOP CLR REMOTE ;發(fā)送負電平17us MOV R1, #06H DJNZ R1, $ NOP DJNZ R0, NEXT0 ; 32個完整載波發(fā)送完畢 SETB REMOTE ;發(fā)送高電平9us MOV R1, #03H DJNZ R1, $ NOP CLR REMOTE ;3us低電平 NOP NOP NOP ACALL DELAY844US RET
發(fā)射“1”的子函數(shù) SEND1: MOV R0, #20H CLR REMOTE ; 發(fā)送低電平844US ACALL DELAY844US NEXT1: SETB REMOTE ; 844us=32個完整載波+2US MOV R1, #03H ; 發(fā)送正電平9us DJNZ R1, $ NOP CLR REMOTE ; 發(fā)送負電平17us MOV R1, #06H DJNZ R1, $ NOP DJNZ R0, NEXT1 ; 32個完整載波發(fā)送完畢 SETB REMOTE ; 發(fā)送高電平9us MOV R1, #03H DJNZ R1, $ NOP CLR REMOTE ; 3us低電平 RET 完整的程序還需加上鍵盤掃描程序,以及連續(xù)調(diào)用SEND1和SEND0發(fā)射一段完整的碼。 |