基于51單片機解碼紅外遙控器原理,遙控器使用一種特殊的集成發射機芯片來傳輸遙控代碼,如東芝、飛利普等,通常彩電遙控信號的發射,就是將某個按鍵所對應的控制指令和系統碼(由0和1組成的序列),調制在38KHz的載波上,然后經放大、驅動紅外發射管將信號發射出去。不同公司的遙控芯片,采用的遙控碼格式也不一樣。較普遍的有兩種,一種是NEC標準,一種是PHILIPS 標準。
NEC標準:遙控載波的頻率為38KHz(占空比為1:3);當某個按鍵按下時,系統首先發射一個完整的全碼,如果鍵按下超過108ms仍未松開,接下來發射的代碼(連發代碼)將僅由起始碼(9ms)和結束碼(2.5ms)組成。 一個完整的全碼=引導碼+用戶碼+用戶碼+數據碼+數據反碼。 其中,引導碼高電平4.5ms,低電平4.5ms;系統碼8位,數據碼8位,共32位;其中前 16 位為用戶識別碼,能區別不同的紅外遙控設備,防止不同機種遙控碼互相干擾。后 16 位為 8 位的操作碼和 8位的操作反碼,用于核對數據是否接收準確。收端根據數據碼做出應該執行什么動作的判斷。連發代碼是在持續按鍵時發送的碼。它告知接收端,某鍵是在被連續地按著。
NEC標準下的發射碼表示
發射數據時0用“0.56ms高電平+0.565ms低電平=1.125ms”表示,數據1用“高電平0.56ms+低電平1.69ms=2.25ms”表示
即發射碼“0”表示發射38khz的紅外線0.56ms,停止發射0.565ms,發射碼“1”表示發射38khz的紅外線0.56ms,停止發射1.69ms
需要注意的是:當一體化接收頭收到38kHz 紅外信號時,輸出端輸出低電平,否則為高電平。所以一體化接收頭輸了的波形是與發射波形是反向的。
PHILIPS標準:載波頻率為38KHz;沒有簡碼,點按鍵時,控制碼在1和0之間切換,若持續按鍵,則控制碼不變。一個全碼=起始碼‘11’+控制碼+用戶碼+用戶碼。
數據0用“低電平1.778ms+高電平1.778ms”表示;數據1用“高電平1.778ms+低電平1.778ms”表示。 連續碼重復延時114ms。
NEC、TOSHIBA、SAMSONG公司的編碼格式有其共通之處:遙控全碼都由“引導碼+系統碼+系統碼(或系統碼取反)+數據碼+數據碼取反”組成;數據“0”和“1”的定義相同;不同的只是引導碼高低電平的持續時間不同,系統碼位數有長有短,第一個簡碼和全碼最后一位之間的延時不同,簡碼的引導脈沖不同等;所以可以把相同的部分做成通用子程序,包括產生數據“0”和“1”的子程序“ONE”和“ZERO”,9ms、4.5ms、2.25ms、22ms、45ms等時間控制子程序。
鍵值處理,可采用外中斷的方式,有鍵按下時,就向CPU發出中斷請求,當然這里面還包括了去抖動、多鍵同時按時只處理一鍵的處理部分。
機芯的不同狀態由單片機P3口的P3.5、P3.4、P3.1、P3.0四位的輸入數值來區分判斷,比如“0000”表示工作于東芝TC90××系列狀態,“0001”則表示要求工作于NEC公司的PD61××系列狀態。
判斷了是哪一只鍵按下以及處于機芯的哪種狀態以后,程序就嚴格按照相應的遙控編碼方式來進行遙控碼的發射,也就是說將一定時段、一定數值的電平脈沖調制在38KHz載波上,逐一發射出去。