紅外線遙控是目前使用最廣泛的一種通信和遙控手段。由于紅外線遙控裝置具有體積小、功耗低、功能強(qiáng)、成本低等特點(diǎn),因而,繼彩電、錄像機(jī)之后,在錄音機(jī)、音響設(shè)備、空凋機(jī)以及玩具等其它小型電器裝置上也紛紛采用紅外線遙控。工業(yè)設(shè)備中,在高壓、輻射、有毒氣體、粉塵等環(huán)境下,采用紅外線遙控不僅完全可靠而且能有效地隔離電氣干擾。
1 紅外遙控系統(tǒng)
通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成,應(yīng)用編/解碼專用集成電路芯片來(lái)進(jìn)行控制操作,如圖1所示。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、LED紅外發(fā)送器;接收部分包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路。

2 遙控發(fā)射器及其編碼
遙控發(fā)射器專用芯片很多,根據(jù)編碼格式可以分成脈沖寬度調(diào)制和脈沖相位調(diào)制兩大類,這里我們以運(yùn)用比較廣泛,解碼比較容易的脈沖寬度調(diào)制來(lái)加以說(shuō)明,現(xiàn)以LC7461組成發(fā)射電路為例說(shuō)明編碼原理。當(dāng)發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:
采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1”
上述“0”和“1”組成的42位二進(jìn)制碼經(jīng)38kHz的載頻進(jìn)行二次調(diào)制以提高發(fā)射效率,達(dá)到降低電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射,
7461產(chǎn)生的遙控編碼是連續(xù)的42位二進(jìn)制碼組,其中前26位為用戶識(shí)別碼,能區(qū)別不同的紅外遙控設(shè)備,防止不同機(jī)種遙控碼互相干擾。后16位為8位的操作碼和8位的操作反碼用于核對(duì)數(shù)據(jù)是否接收準(zhǔn)確。
當(dāng)遙控器上任意一個(gè)按鍵按下超過36ms時(shí),LC7461芯片的振蕩器使芯片激活,將發(fā)射一個(gè)特定的同步碼頭,對(duì)于接收端而言就是一個(gè)9ms的低電平,和一個(gè)4.5ms的高電平,這個(gè)同步碼頭可以使程序知道從這個(gè)同步碼頭以后可以開始接收數(shù)據(jù)。
解碼的關(guān)鍵是如何識(shí)別“0”和“1”,從位的定義我們可以發(fā)現(xiàn)“0”、“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56ms,“1”為1.68ms,所以必須根據(jù)高電平的寬度區(qū)別“0”和“1”。如果從0.56ms低電平過后,開始延時(shí),0.56ms以后,若讀到的電平為低,說(shuō)明該位為“0”,反之則為“1”,為了可靠起見,延時(shí)必須比0.56ms長(zhǎng)些,但又不能超過1.12ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此取(1.12ms+0.56ms)/2=0.84ms最為可靠,一般取0.84ms左右即可。
根據(jù)紅外編碼的格式,程序應(yīng)該等待9ms的起始碼和4.5ms的結(jié)果碼完成后才能讀碼。

如果郵購(gòu)我們開發(fā)的51單片機(jī)試驗(yàn)板和擴(kuò)展元件的網(wǎng)友,可以獲得如上圖所示的紅外遙控手柄,這種遙控器的編碼格式符合上面的描述規(guī)律,而且價(jià)格低廉,有32個(gè)按鍵,按鍵外形比較統(tǒng)一,如果用于批量開發(fā),可以把遙控器上貼膜換成你需要的字符,這為開發(fā)產(chǎn)品提供了便利。
接收器及解碼
LT0038是塑封一體化紅外線接收器,它是一種集紅外線接收、放大、整形于一體的集成電路,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號(hào)兼容的所有工作,沒有紅外遙控信號(hào)時(shí)為高電平,收到紅外信號(hào)時(shí)為低電平,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸。
下面是一個(gè)對(duì)51實(shí)驗(yàn)板配套的紅外線遙控器的解碼程序,它可以把上圖32鍵的紅外遙控器每一個(gè)按鍵的鍵值讀出來(lái),并且通過實(shí)驗(yàn)板上P1口的8個(gè)LED顯示出來(lái),在解碼成功的同時(shí)并且能發(fā)出“嘀嘀嘀”的提示音。
ORG 0000H
AJMP MAIN;轉(zhuǎn)入主程序
ORG 0003H ;外部中斷P3.2腳INT0入口地址
AJMP INT ;轉(zhuǎn)入外部中斷服務(wù)子程序(解碼程序)
;以下為主程序進(jìn)行CPU中斷方式設(shè)置
MAIN: SETB EA ;打開CPU總中斷請(qǐng)求
SETB IT0 ;設(shè)定INT0的觸發(fā)方式為脈沖負(fù)邊沿觸發(fā)
SETB EX0 ;打開INT0中斷請(qǐng)求
;以下對(duì)單片機(jī)的所有引腳進(jìn)行初始化,全部設(shè)置成高電平
MOV P2,#11100111B
AJMP $
INT: CLR EA;暫時(shí)關(guān)閉CPU的所有中斷請(qǐng)求
MOV R6,#10
SB: ACALL YS1;調(diào)用882微秒延時(shí)子程序
JB P3.2,EXIT;延時(shí)882微秒后判斷P3.2腳是否出現(xiàn)高電平如果有就退出解碼程序
DJNZ R6, SB;重復(fù)10次,目的是檢測(cè)在8820微秒內(nèi)如果出現(xiàn)高電平就退出解碼程序
;以上完成對(duì)遙控信號(hào)的9000微秒的初始低電平信號(hào)的識(shí)別。
JNB P3.2, $;等待高電平避開9毫秒低電平引導(dǎo)脈沖
ACALL YS2;延時(shí)4.74毫秒避開4.5毫秒的結(jié)果碼
MOV R7,#26;忽略前26位系統(tǒng)識(shí)別碼
JJJJA: JNB P3.2,$;等待地址碼第一位的高電平信號(hào)
LCALL YS1;高電平開始后用882微秒的時(shí)間尺去判斷信號(hào)此時(shí)的高低電平狀態(tài)
MOV C,P3.2;將P3.2引腳此時(shí)的電平狀態(tài)0或1存入C中
JNC UUUA;如果為0就跳轉(zhuǎn)到UUUA
LCALL YS3;檢測(cè)到高電平1的話延時(shí)1毫秒等待脈沖高電平結(jié)束
UUUA: DJNZ R7,JJJJA
MOV R1,#1AH ;設(shè)定1AH為起始RAM區(qū)
MOV R2,#2;接收從1AH到1BH的2個(gè)內(nèi)存,用于存放操作碼和操作反碼
PP: MOV R3,#8;每組數(shù)據(jù)為8位
JJJJ: JNB P3.2,$;等待地址碼第一位的高電平信號(hào)
LCALL YS1;高電平開始后用882微秒的時(shí)間尺去判斷信號(hào)此時(shí)的高低電平狀態(tài)
MOV C,P3.2;將P3.2引腳此時(shí)的電平狀態(tài)0或1存入C中
JNC UUU;如果為0就跳轉(zhuǎn)到UUU
LCALL YS3;檢測(cè)到高電平1的話延時(shí)1毫秒等待脈沖高電平結(jié)束
UUU: MOV A,@R1;將R1中地址的給A
RRC A;將C中的值0或1移入A中的最低位
MOV @R1,A;將A中的數(shù)暫時(shí)存放在R1數(shù)值的內(nèi)存中
DJNZ R3,JJJJ;接收滿8位換一個(gè)內(nèi)存
INC R1;對(duì)R1中的值加1,換下一個(gè)RAM
DJNZ R2,PP ;接收完8位數(shù)據(jù)碼和8位數(shù)據(jù)反碼,存放在1AH/1BH中
MOV A,1AH
CPL A;對(duì)1AH取反后和1BH比較
CJNE A,1BH,EXIT;如果不等表示接收數(shù)據(jù)發(fā)生錯(cuò)誤,放棄
MOV P1,1AH;將按鍵的鍵值通過P1口的8個(gè)LED顯示出來(lái)!
MOV A,1AH;將紅外遙控器具體按鍵的鍵值發(fā)送到串口去
MOV SBUF,A;通過串口在電腦屏幕上顯示出來(lái)
CLR P2.5;蜂鳴器鳴響嘀嘀嘀的聲音,表示解碼成功
LCALL YS2
LCALL YS2
LCALL YS2
SETB P2.5;蜂鳴器停止
EXIT: SETB EA ;允許中斷
RETI ;退出解碼子程序
YS1: MOV R4,#20 ;(占用R4/R5)延時(shí)子程序1,精確延時(shí)882微秒
D1: ;MOV R5,#20 ;晶振為11.0592M時(shí),請(qǐng)用 ; 注釋掉此行
MOV R5,#19 ;晶振為12M時(shí),請(qǐng)用 ; 注釋掉此行
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;(占用R4/R5)延時(shí)子程序2,精確延時(shí)4740微秒
D2: ;MOV R5,#235 ;晶振為11.0592M時(shí),請(qǐng)用 ; 注釋掉此行
MOV R5,#216 ;晶振為12M時(shí),請(qǐng)用 ; 注釋掉此行
DJNZ R5,$
DJNZ R4,D2
RET
YS3: MOV R4,#2;(占用R4/R5)延時(shí)程序3,精確延時(shí)1000微秒
D3: ;MOV R5,#248 ;晶振為11.0592M時(shí),請(qǐng)用 ; 注釋掉此行
MOV R5,#228 ;晶振為12M時(shí),請(qǐng)用 ; 注釋掉此行
DJNZ R5,$
DJNZ R4,D3
RET
DELAY: MOV R1,#08H;(占用R1/R2/R3)延時(shí)子程序,12M晶振延時(shí)約250毫秒
L3: MOV R2 ,#0FAH
L1: MOV R3 ,#0FAH
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R1 ,L3
RET
END
keil工程文件: hongwai.rar
0A 01
11 12 13 14
15 16 17 18
19 10 1A 1B
0E 02 03 1C
06 04 05 0C
0D 08 09 1D
00 1F 1E 0B
07 0F
這是按照紅外遙控器按鍵的實(shí)際位置給出的32個(gè)按鍵的鍵值(16進(jìn)制)
1 紅外遙控系統(tǒng)
通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成,應(yīng)用編/解碼專用集成電路芯片來(lái)進(jìn)行控制操作,如圖1所示。發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、LED紅外發(fā)送器;接收部分包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路。

2 遙控發(fā)射器及其編碼
遙控發(fā)射器專用芯片很多,根據(jù)編碼格式可以分成脈沖寬度調(diào)制和脈沖相位調(diào)制兩大類,這里我們以運(yùn)用比較廣泛,解碼比較容易的脈沖寬度調(diào)制來(lái)加以說(shuō)明,現(xiàn)以LC7461組成發(fā)射電路為例說(shuō)明編碼原理。當(dāng)發(fā)射器按鍵按下后,即有遙控碼發(fā)出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:
采用脈寬調(diào)制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進(jìn)制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進(jìn)制的“1”
上述“0”和“1”組成的42位二進(jìn)制碼經(jīng)38kHz的載頻進(jìn)行二次調(diào)制以提高發(fā)射效率,達(dá)到降低電源功耗的目的。然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射,
7461產(chǎn)生的遙控編碼是連續(xù)的42位二進(jìn)制碼組,其中前26位為用戶識(shí)別碼,能區(qū)別不同的紅外遙控設(shè)備,防止不同機(jī)種遙控碼互相干擾。后16位為8位的操作碼和8位的操作反碼用于核對(duì)數(shù)據(jù)是否接收準(zhǔn)確。
當(dāng)遙控器上任意一個(gè)按鍵按下超過36ms時(shí),LC7461芯片的振蕩器使芯片激活,將發(fā)射一個(gè)特定的同步碼頭,對(duì)于接收端而言就是一個(gè)9ms的低電平,和一個(gè)4.5ms的高電平,這個(gè)同步碼頭可以使程序知道從這個(gè)同步碼頭以后可以開始接收數(shù)據(jù)。
解碼的關(guān)鍵是如何識(shí)別“0”和“1”,從位的定義我們可以發(fā)現(xiàn)“0”、“1”均以0.56ms的低電平開始,不同的是高電平的寬度不同,“0”為0.56ms,“1”為1.68ms,所以必須根據(jù)高電平的寬度區(qū)別“0”和“1”。如果從0.56ms低電平過后,開始延時(shí),0.56ms以后,若讀到的電平為低,說(shuō)明該位為“0”,反之則為“1”,為了可靠起見,延時(shí)必須比0.56ms長(zhǎng)些,但又不能超過1.12ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此取(1.12ms+0.56ms)/2=0.84ms最為可靠,一般取0.84ms左右即可。
根據(jù)紅外編碼的格式,程序應(yīng)該等待9ms的起始碼和4.5ms的結(jié)果碼完成后才能讀碼。

如果郵購(gòu)我們開發(fā)的51單片機(jī)試驗(yàn)板和擴(kuò)展元件的網(wǎng)友,可以獲得如上圖所示的紅外遙控手柄,這種遙控器的編碼格式符合上面的描述規(guī)律,而且價(jià)格低廉,有32個(gè)按鍵,按鍵外形比較統(tǒng)一,如果用于批量開發(fā),可以把遙控器上貼膜換成你需要的字符,這為開發(fā)產(chǎn)品提供了便利。
接收器及解碼
LT0038是塑封一體化紅外線接收器,它是一種集紅外線接收、放大、整形于一體的集成電路,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號(hào)兼容的所有工作,沒有紅外遙控信號(hào)時(shí)為高電平,收到紅外信號(hào)時(shí)為低電平,而體積和普通的塑封三極管大小一樣,它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸。
下面是一個(gè)對(duì)51實(shí)驗(yàn)板配套的紅外線遙控器的解碼程序,它可以把上圖32鍵的紅外遙控器每一個(gè)按鍵的鍵值讀出來(lái),并且通過實(shí)驗(yàn)板上P1口的8個(gè)LED顯示出來(lái),在解碼成功的同時(shí)并且能發(fā)出“嘀嘀嘀”的提示音。
ORG 0000H
AJMP MAIN;轉(zhuǎn)入主程序
ORG 0003H ;外部中斷P3.2腳INT0入口地址
AJMP INT ;轉(zhuǎn)入外部中斷服務(wù)子程序(解碼程序)
;以下為主程序進(jìn)行CPU中斷方式設(shè)置
MAIN: SETB EA ;打開CPU總中斷請(qǐng)求
SETB IT0 ;設(shè)定INT0的觸發(fā)方式為脈沖負(fù)邊沿觸發(fā)
SETB EX0 ;打開INT0中斷請(qǐng)求
;以下對(duì)單片機(jī)的所有引腳進(jìn)行初始化,全部設(shè)置成高電平
MOV P2,#11100111B
AJMP $
INT: CLR EA;暫時(shí)關(guān)閉CPU的所有中斷請(qǐng)求
MOV R6,#10
SB: ACALL YS1;調(diào)用882微秒延時(shí)子程序
JB P3.2,EXIT;延時(shí)882微秒后判斷P3.2腳是否出現(xiàn)高電平如果有就退出解碼程序
DJNZ R6, SB;重復(fù)10次,目的是檢測(cè)在8820微秒內(nèi)如果出現(xiàn)高電平就退出解碼程序
;以上完成對(duì)遙控信號(hào)的9000微秒的初始低電平信號(hào)的識(shí)別。
JNB P3.2, $;等待高電平避開9毫秒低電平引導(dǎo)脈沖
ACALL YS2;延時(shí)4.74毫秒避開4.5毫秒的結(jié)果碼
MOV R7,#26;忽略前26位系統(tǒng)識(shí)別碼
JJJJA: JNB P3.2,$;等待地址碼第一位的高電平信號(hào)
LCALL YS1;高電平開始后用882微秒的時(shí)間尺去判斷信號(hào)此時(shí)的高低電平狀態(tài)
MOV C,P3.2;將P3.2引腳此時(shí)的電平狀態(tài)0或1存入C中
JNC UUUA;如果為0就跳轉(zhuǎn)到UUUA
LCALL YS3;檢測(cè)到高電平1的話延時(shí)1毫秒等待脈沖高電平結(jié)束
UUUA: DJNZ R7,JJJJA
MOV R1,#1AH ;設(shè)定1AH為起始RAM區(qū)
MOV R2,#2;接收從1AH到1BH的2個(gè)內(nèi)存,用于存放操作碼和操作反碼
PP: MOV R3,#8;每組數(shù)據(jù)為8位
JJJJ: JNB P3.2,$;等待地址碼第一位的高電平信號(hào)
LCALL YS1;高電平開始后用882微秒的時(shí)間尺去判斷信號(hào)此時(shí)的高低電平狀態(tài)
MOV C,P3.2;將P3.2引腳此時(shí)的電平狀態(tài)0或1存入C中
JNC UUU;如果為0就跳轉(zhuǎn)到UUU
LCALL YS3;檢測(cè)到高電平1的話延時(shí)1毫秒等待脈沖高電平結(jié)束
UUU: MOV A,@R1;將R1中地址的給A
RRC A;將C中的值0或1移入A中的最低位
MOV @R1,A;將A中的數(shù)暫時(shí)存放在R1數(shù)值的內(nèi)存中
DJNZ R3,JJJJ;接收滿8位換一個(gè)內(nèi)存
INC R1;對(duì)R1中的值加1,換下一個(gè)RAM
DJNZ R2,PP ;接收完8位數(shù)據(jù)碼和8位數(shù)據(jù)反碼,存放在1AH/1BH中
MOV A,1AH
CPL A;對(duì)1AH取反后和1BH比較
CJNE A,1BH,EXIT;如果不等表示接收數(shù)據(jù)發(fā)生錯(cuò)誤,放棄
MOV P1,1AH;將按鍵的鍵值通過P1口的8個(gè)LED顯示出來(lái)!
MOV A,1AH;將紅外遙控器具體按鍵的鍵值發(fā)送到串口去
MOV SBUF,A;通過串口在電腦屏幕上顯示出來(lái)
CLR P2.5;蜂鳴器鳴響嘀嘀嘀的聲音,表示解碼成功
LCALL YS2
LCALL YS2
LCALL YS2
SETB P2.5;蜂鳴器停止
EXIT: SETB EA ;允許中斷
RETI ;退出解碼子程序
YS1: MOV R4,#20 ;(占用R4/R5)延時(shí)子程序1,精確延時(shí)882微秒
D1: ;MOV R5,#20 ;晶振為11.0592M時(shí),請(qǐng)用 ; 注釋掉此行
MOV R5,#19 ;晶振為12M時(shí),請(qǐng)用 ; 注釋掉此行
DJNZ R5,$
DJNZ R4,D1
RET
YS2: MOV R4,#10 ;(占用R4/R5)延時(shí)子程序2,精確延時(shí)4740微秒
D2: ;MOV R5,#235 ;晶振為11.0592M時(shí),請(qǐng)用 ; 注釋掉此行
MOV R5,#216 ;晶振為12M時(shí),請(qǐng)用 ; 注釋掉此行
DJNZ R5,$
DJNZ R4,D2
RET
YS3: MOV R4,#2;(占用R4/R5)延時(shí)程序3,精確延時(shí)1000微秒
D3: ;MOV R5,#248 ;晶振為11.0592M時(shí),請(qǐng)用 ; 注釋掉此行
MOV R5,#228 ;晶振為12M時(shí),請(qǐng)用 ; 注釋掉此行
DJNZ R5,$
DJNZ R4,D3
RET
DELAY: MOV R1,#08H;(占用R1/R2/R3)延時(shí)子程序,12M晶振延時(shí)約250毫秒
L3: MOV R2 ,#0FAH
L1: MOV R3 ,#0FAH
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R1 ,L3
RET
END
keil工程文件: hongwai.rar
0A 01
11 12 13 14
15 16 17 18
19 10 1A 1B
0E 02 03 1C
06 04 05 0C
0D 08 09 1D
00 1F 1E 0B
07 0F
這是按照紅外遙控器按鍵的實(shí)際位置給出的32個(gè)按鍵的鍵值(16進(jìn)制)