UPD6121G產(chan) 生的遙控編碼是連續的32位二進製碼組,其中前16位為(wei) 用戶識別碼,能區別不同的電器設備,防止不同機種遙控碼互相幹擾。該芯片的用戶識別碼固定為(wei) 十六進製01H;後16位為(wei) 8位操作碼(功能碼)及其反碼。UPD6121G最多額128種不同組合的編碼。
當遙控器在按鍵按下後,周期性地發出同一種32位二進製碼,周期約為(wei) 108ms。一組碼本身的持續時間隨它包含的二進製“0”和“1”的個(ge) 數不同而不同,大約在45~63ms之間,圖4為(wei) 發射波形圖。
當一個(ge) 鍵按下超過36ms,振蕩器使芯片激活,將發射一組108ms的編碼脈衝(chong) ,這108ms發射代碼由一個(ge) 起始碼(9ms),一個(ge) 結果碼(4.5ms),低8位地址碼(9ms~18ms),高8位地址碼(9ms~18ms),8位數據碼(9ms~18ms)和這8位數據的反碼(9ms~18ms)組成。如果鍵按下超過108ms仍未鬆開,接下來發射的代碼(連發代碼)將僅(jin) 由起始碼(9ms)和結束碼(2.5ms)組成。
代碼格式(以接收代碼為(wei) 準,接收代碼與(yu) 發射代碼反向)
① 位定義(yi)
② 單發代碼格式
③ 連發代碼格式
注:代碼寬度算法:
16位地址碼的最短寬度:1.12×16=18ms 16位地址碼的最長寬度:2.24ms×16=36ms
已知8位數據代碼及其8位反代碼的寬度和不變:(1.12ms+2.24ms)×8=27ms
∴ 32位代碼的寬度為(wei) (18ms+27ms)~(36ms+27ms)
1. 解碼的關(guan) 鍵是如何識別“0”和“1”,從(cong) 位的定義(yi) 我們(men) 可以發現“0”、“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”為(wei) 0.56ms,“1”為(wei) 1.68ms,所以必須根據高電平的寬度區別“0”和“1”。如果從(cong) 0.56ms低電平過後,開始延時,0.56ms以後,若讀到的電平為(wei) 低,說明該位為(wei) “0”,反之則為(wei) “1”,為(wei) 了可*起見,延時必須比0.56ms長些,但又不能超過1.12ms,否則如果該位為(wei) “0”,讀到的已是下一位的高電平,因此取(1.12ms+0.56ms)/2=0.84ms最為(wei) 可*,一般取0.84ms左右均可。
2. 根據碼的格式,應該等待9ms的起始碼和4.5ms的結果碼完成後才能讀碼。
【紅外遙控解碼實驗硬件】
一體(ti) 化紅外線接收器是一種集紅外線接收和放大整形於(yu) 一體(ti) ,不需要任何外接元件,就能完成從(cong) 紅外線接收到輸出與(yu) TTL電平信號兼容的所有工作,而體(ti) 積又很小巧,它適合於(yu) 各種紅外線遙控和紅外線數據傳(chuan) 輸,廣泛用於(yu) 電視機、衛星接收機、VCD、DVD、音響、空調等家用電器中接收紅外信號,圖5是一體(ti) 化接收頭的引腳排列圖,圖6是本站產(chan) 品配套的采用屏蔽線焊接的一體(ti) 化紅外接收頭,采用屏蔽線焊接,抗幹擾能力強,接收更可*。沒有購買(mai) 實驗板配套的一體(ti) 化紅外接收頭的網友可以根據圖2所示接收頭引腳排列圖自己焊接一個(ge) 。
![]() |
![]() | |
圖5:一體化紅外接收頭 (引腳排列圖) |
圖6:本站產品配套一體化紅外接收頭(已經用屏蔽線焊接好,抗幹擾能力強,插入實驗板即可使用) |
下麵就是我們(men) 將要進行紅外遙控解碼實驗所要用到的硬件設備:S51增強型實驗板、ISP編程器、AT89S51實驗芯片、豪華型多功能紅外線遙控器。
![]() |
![]() | |
圖7:S51增強型單片機實驗板及防插反紅外遙控接口 |
![]() |
圖8:豪華型多功能紅外遙控器 + 高靈敏度一體化紅外接收頭(23元) |
![]() |
圖9:32鍵豪華型紅外遙控器原理圖 |
![]() |
圖10:ISP編程器燒寫實驗單片機芯片AT89S51 |
【紅外遙控解碼實驗】
我們(men) 經過對前麵的遙控編解碼知識的學習(xi) ,對紅外遙控有了基本的了解,下麵我們(men) 馬上進行解碼實驗。本紅外遙控解碼實驗的的功能是:程序對遙控器發射的遙控碼進行解碼,解碼成功時蜂鳴器發出"嘀嘀"的解碼成功提示音,如果按壓的是數字鍵"0~9"就將按鍵值在實驗板上的5位數碼管上顯示出按鍵值,同時將按鍵的十六進製值用P1口的8位發光二極管指示出來;如果按壓的不是數字鍵"0~9",就直接從(cong) P1口輸出鍵值;下麵是遙控解碼匯編源程序。
實驗時將先連接好硬件設備,將配套的一體(ti) 化紅外遙控接收頭插入實驗板上的"紅外遙控"接口內(nei) ,在Keil單片機集成開發環境中新建工程,通過Keil將源程序編譯得到HEX格式目標文件yk.hex,最後使用ISP編程器將目標文件燒寫(xie) 到AT89S51單片機中,插到S51增強型實驗板上運行,拿出配套的紅外遙控器進行解碼測試,看看實驗結果是否和程序相同。。。
>>> 點此下載HEX格式目標文件 yk.hex >>>
>>> 點此下載遙控解碼源程序和Keil工程文件 >>>
ORG 0000H
MAIN: MOV SP,#60H
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
JNB P3.2,$ ;等待遙控信號出現
MOV R6,#10
SB: ACALL YS1 ;調用882微秒延時子程序
JB P3.2,MAIN ;延時882微秒後判斷P3.2腳是否出現高電平如果有就退出解碼程序
DJNZ R6, SB ;重複10次,目的是檢測在8820微秒內(nei) 如果出現高電平就退出解碼程序
;以上完成對遙控信號的9000微秒的初始低電平信號的識別。
JNB P3.2, $ ;等待高電平避開9毫秒低電平引導脈衝(chong)
ACALL YS2 ;延時4.74毫秒避開4.5毫秒的結果碼
MOV R1,#1AH ;設定1AH為(wei) 起始RAM區
MOV R2,#4
PP: MOV R3,#8
JJJJ: JNB P3.2,$ ;等待地址碼第一位的高電平信號
LCALL YS1 ;高電平開始後用882微秒的時間尺去判斷信號此時的高低電平狀態
MOV C,P3.2 ;將P3.2引腳此時的電平狀態0或1存入C中
JNC UUU ;如果為(wei) 0就跳轉到UUU
JB P3.2,$ ;如果為(wei) 1就等待高電平信號結束
UUU: MOV A,@R1 ;將R1中地址的給A
RRC A ;將C中的值0或1移入A中的最低位
MOV @R1,A ;將A中的數暫時存放在R1中
DJNZ R3,JJJJ ;接收地址碼的高8位
INC R1 ;對R1中的值加1,換成下一個(ge) RAM
DJNZ R2,PP ;接收完16位地址碼和8位數據碼和8位數據反碼,存放在1AH/1BH/1CH/1DH的RAM中
;以下對代碼是否正確和定義(yi) 進行識別
MOV A,1AH ;比較高8位地址碼
XRL A,#00000000B ;判斷1AH的值是否等於(yu) 00000000,相等的話A為(wei) 0
JNZ MAIN ;如果不相等說明解碼失敗退出解碼程序
MOV A,1BH ;比較低8位地址
XRL A,#11111111B ;再判斷高8位地址是否正確
JNZ MAIN ;如果不相等說明解碼失敗退出解碼程序
MOV A,1CH ;比較數據碼和數據反碼是否正確?
CPL A
XRL A,1DH ;將1CH的值取反後和1DH比較 不同則無效丟(diu) 棄,核對數據是否準確
JNZ MAIN ;如果不相等說明解碼失敗退出解碼程序
LCALL SOUND ;解碼成功,聲音提示
MOV A,1AH
CPL A
MOV P1,A ;遙控碼十六進製值通過P1口LED顯示出來
;-------- 下麵為(wei) 0~9鍵碼判斷並在實驗板的5位數碼管中顯示鍵值 --------
JZPD: MOV A,1AH
IRD0: CJNE A,#00H,IRD1 ;按鍵"0"判斷顯示
MOV P0,#0C0H
MOV P2,#11100000B
AJMP MAIN
IRD1: CJNE A,#01H,IRD2 ;按鍵"1"判斷顯示
MOV P0,#0F9H
MOV P2,#11100000B
AJMP MAIN
IRD2: CJNE A,#02H,IRD3 ;按鍵"2"判斷顯示
MOV P0,#0A4H
MOV P2,#11100000B
AJMP MAIN
IRD3: CJNE A,#03H,IRD4 ;按鍵"3"判斷顯示
MOV P0,#0B0H
MOV P2,#11100000B
AJMP MAIN
IRD4: CJNE A,#04H,IRD5 ;按鍵"4"判斷顯示
MOV P0,#99H
MOV P2,#11100000B
AJMP MAIN
IRD5: CJNE A,#05H,IRD6 ;按鍵"5"判斷顯示
MOV P0,#92H
MOV P2,#11100000B
AJMP MAIN
IRD6: CJNE A,#06H,IRD7 ;按鍵"6"判斷顯示
MOV P0,#82H
MOV P2,#11100000B
AJMP MAIN
IRD7: CJNE A,#07H,IRD8 ;按鍵"7"判斷顯示
MOV P0,#0F8H
MOV P2,#11100000B
AJMP MAIN
IRD8: CJNE A,#08H,IRD9 ;按鍵"8"判斷顯示
MOV P0,#80H
MOV P2,#11100000B
AJMP MAIN
IRD9: CJNE A,#09H,IRDOR ;按鍵"9"判斷顯示
MOV P0,#90H
MOV P2,#11100000B
AJMP MAIN
IRDOR: MOV P2,#0FFH ;關(guan) 閉數碼管使能。"0~9"以外的非數字功能按鍵鍵值不采用數碼管顯示,直接從(cong) P1口輸出鍵值
AJMP MAIN
YS1: MOV R4,#19 ;延時子程序1
D1: MOV R5,#18
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;延時子程序2
D2: MOV R5,#216
DJNZ R5,$
DJNZ R4,D2
RET
SOUND: MOV R7,#228 ;音效延時子程序
SDL1: CPL P3.7
MOV R6,#0FFH
SDL0: DJNZ R6,SDL0
DJNZ R7,SDL1
RET
把上麵程序寫(xie) 入at89S51單片機中,一個(ge) 簡單的單片機紅外遙控器設計就完成了哈哈,是不是很有興(xing) 趣了,通電後,按壓遙控器上的0~9按鍵,則實驗板上的數碼管上就顯示出對應的按鍵值,同時解碼成功後發出聲音指示。。。