程序流程圖如圖3所示,在時序上,整個程序基本上所有的時間都是在調用鍵盤掃描子程序,因此能檢測到任何時候的按鍵。只有在掃描到有按鍵時才會調用發(fā)射紅外編碼程序,發(fā)射一次紅外編碼程序耗時為58.5ms至76.5ms,該時間很短,對于按鍵時序不會產生任何影響。
發(fā)射紅外編碼采用定時器中斷的方式來實現,設定時值為38k,也就是每隔26 μs中斷一次。這樣,要發(fā)送9ms的引導碼,只需要將P3.4置為1,并控制定時器中斷次數為346次即可。同樣,要發(fā)送4.5ms的起始碼,只需要將P3.4清0,并控制定時器中斷次數為173次即可。其它部分類似。得到的紅外編碼數據發(fā)送子程序如下:
在紅外編碼數據發(fā)送子程序中,“IR_data[]”數組里存放的是一幀數據的4個編碼,每個編碼8位,共32位;“endcount”用于控制定時時間,例如“endcount=346;”指令將控制發(fā)送9ms的起始碼。
4 仿真及實物驗證
4. 1 仿真結果
紅外遙控發(fā)射數據時的仿真波形圖如圖4所示:第一個波形為由單片機U1的P3.4口發(fā)送出來的數據,第二個波形為38k載波,第三個波形為調制后的紅外發(fā)射信號,第四個波形為紅外接收濾波后的數據還原??梢钥闯鲞€原后的數據波形與發(fā)射出的數據波形相位剛好反向。這種紅外遙控碼波形與前述遙控器廠家提供的如圖1所示的數據完全吻合。
4.2 實物驗證結果
圖5所示為用實物驗證模擬紅外發(fā)射接收。其中(b)部分為接收紅外遙控信號,解調并用兩位數碼管來顯示接收到的紅外編碼。(b)部分的解調和顯示程序是事先經海信電視CN-22601遙控器、開博爾電視盒遙控器、志高空調ZH/JT-06遙控器等三款紅外遙控器測試通過的,可以確保解調和顯示程序是正確的。(a)部分為模擬紅外遙控發(fā)射數據。(a)和(b)兩部分通過兩根線相連,白色的一根是地線,使兩塊電路板共地;紅色的一根連接(a)部分的P3.4口和(b)部分的外部中斷INT0。圖5中顯示的是當(a)部分按下按鍵“K14”時,(b)部分顯示“14”。
實驗結果證明,仿真結果在實物電路板上同樣是正確的,說明此發(fā)射模塊就等于同于一個實際的遙控器。
5 結論
紅外遙控發(fā)生器Proleus仿真模塊具有結構簡單、可靠性高、可移植行強等優(yōu)點。本模塊填補了Proleus仿真軟件對于紅外遙控發(fā)射器件的空白。借助本模塊,紅外遙控系統開發(fā)者能大幅度地縮短產品的開發(fā)時間,大大提高工作效率。