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