上世紀八十年代初,日本率先在電視產品中使用了紅外遙控技術,目前已經在電視機上得到了廣泛應用。電視遙控器使用的是專用集成發射芯片來實現遙控碼的發射,如東芝TC9012,飛利浦SAA3010T等。這些芯片價格較貴,且相互之間采用的遙控編碼格式互不兼容,所以各機型的遙控器通常只能針對各自的遙控對象而無法通用。本文在試驗驗證的基礎上,介紹了如何利用低成本的MCS-51系列單片機來實現遙控碼的模擬發射,并實現遙控器的通用化。 遙控發射技術的基本原理 通常彩電遙控信號的發射,就是將某個按鍵所對應的控制指令和系統碼(由0和1組成的序列),調制在32~56KHz范圍內的載波上,然后經放大、驅動紅外發射管將信號發射出去。 不同公司的遙控芯片,采用的遙控碼格式也不一樣。在此介紹較普遍的兩種,一種是NEC標準,一種是PHILIPS 標準。 圖1 NEC標準下的主碼表示 NEC標準:遙控載波的頻率為38KHz(占空比為1:3);當某個按鍵按下時,系統首先發射一個完整的全碼,然后經延時再發射一系列簡碼,直到按鍵松開即停止發射。簡碼重復延時108ms,每兩個引導脈沖上升沿之間的間隔都是108ms。一個完整的全碼如圖1所示。 其中,引導碼高電平4.5ms,低電平4.5ms;系統碼8位,數據碼8位,共32位;數據0用“高電平0.5625ms+低電平0.5625ms”表示,數據1用“高電平0.5625ms+低電平1.6875ms”表示,如圖2所示:一個簡碼=引導碼+系統碼位0的反碼+結束位(0.5625ms)高電平。 圖2 NEC標準下,數據0和1的表示 各部分碼的作用:引導碼用來通知接收器其后為遙控數據。系統碼用來區分是哪一機型的數據,接收端依此來判斷后續的數據是否為須執行的指令。數據碼用來區分是哪一個鍵被按下,接收端根據數據碼做出應該執行什么動作的判斷。簡碼是在持續按鍵時發送的碼。它告知接收端,某鍵是在被連續地按著。 遙控數據傳輸系統的關鍵是數據傳輸的可靠性。為了提高編碼的可靠性,NEC標準規定系統碼、數據碼后分別接著傳送一個同樣的碼或者反碼,供誤碼校驗用。 PHILIPS標準:載波頻率為38KHZ;沒有簡碼,點按鍵時,控制碼在1和0之間切換,若持續按鍵,則控制碼不變。一個全碼=起始碼‘11’+控制碼+系統碼+數據碼,如圖3所示。 圖3 PHILIPS標準下的全碼表示 數據0用“低電平1.778ms+高電平1.778ms”表示;數據1用“高電平1.778ms+低電平1.778ms”表示。 連續碼重復延時114ms。 硬件原理圖 圖4為硬件原理圖,電路主要由三大部分組成:AT89C52及其外圍電路部分;8×8鍵矩陣部分;及直流電源部分。 圖4 硬件原理圖 AT89C52單片機及其外圍電路組成的控制和遙控碼產生部分:主要有外中斷信號處理、12M時鐘、CPU復位、I/O口上拉電路、紅外遙控發射、按鍵指示等。由P0口和P2口搭成按鍵矩陣,當有鍵按下時,產生的外中斷請求信號(低電平有效)經八輸入與非門和非門后送至P32端,使CPU進入中斷處理,同時點亮按鍵指示燈。系統產生的遙控編碼信號通過P14端發出,經放大后驅動發射管發射出去。撥碼開關DIP的作用是進行不同機芯狀態的切換。比如當DIP設置為“1000”時,系統處于長虹CH-10機芯狀態;為“1001”時,則處于CN-12機芯狀態。R13、C11和按鍵KEY組成單片機復位電路。 8×8鍵矩陣部分:由64只鍵盤開關排列而成,可以根據需要,選擇合適的按鍵數。 8*8鍵是不增加擴展器件的情況下最多的按鍵數。 整個系統的工作電源為直流+5V。由電源模塊IC31 (PS0500DS)、整流橋HBA、HBK等組成。 程序實現 NEC編碼程序用MCS-51系列單片機匯編語言編寫而成,PHILIPS編碼可以此類推。 NEC、TOSHIBA、SAMSONG公司的編碼格式有其共通之處:遙控全碼都由“引導碼+系統碼+系統碼(或系統碼取反)+數據碼+數據碼取反”組成;數據“0”和“1”的定義相同;不同的只是引導碼高低電平的持續時間不同,系統碼位數有長有短,第一個簡碼和全碼最后一位之間的延時不同,簡碼的引導脈沖不同等;所以可以把相同的部分做成通用子程序,包括產生數據“0”和“1”的子程序“ONE”和“ZERO”,9ms、4.5ms、2.25ms、22ms、45ms等時間控制子程序。 8×8的鍵矩陣處理,采用外中斷的方式,有鍵按下時,就向CPU發出中斷請求,然后按照“先列后排”一個個掃描,從而找出被按下的鍵,當然這里面還包括了去抖動、多鍵同時按時只處理一鍵的處理部分。 機芯的不同狀態由單片機P3口的P3.5、P3.4、P3.1、P3.0四位的輸入數值來區分判斷,比如“0000”表示工作于東芝TC90××系列狀態,“0001”則表示要求工作于NEC公司的PD61××系列狀態。 判斷了是哪一只鍵按下以及處于機芯的哪種狀態以后,程序就嚴格按照相應的遙控編碼方式來進行遙控碼的發射,也就是說將一定時段、一定數值的電平脈沖調制在38KHz載波上,逐一發射出去。流程圖如圖5所示。 圖5 程序流程圖 部分程序段: 這里給出的是產生NEC遙控碼的主要部分,而像鍵掃描等較常見的程序段就不再提供. 主程序初始化部分: ORG 100H main: mov psw,#0 ; mov sp,#30h ;設置堆棧 mov tmod,#02h ;方式2定時 mov th0,#0f3h ;38KHZ方波時間數 mov p2,#0 ; mov p0,#0ffh setb ex0 ;允許外中斷0 SETB pt0 ;外中斷0(有鍵按下)優先 clr it0 ;電平觸發方式 clr mdl ;設有無按鍵的標志 setb p3.2 ; setb p3.4 setb p3.5 setb p3.1 setb p3.0 ;置P3.0~P3.5為輸入狀態 clr c ;清進位標志位 clr p1.4 ;清遙控輸出端 clr a ;清累加器A mov KEYHAO,#0H ; 清按鍵號存儲器 xrl a,#11000000b ;0000(p3.5 p3.4 p3.1 p3.0) jz TV1 mov a,r7 xrl a,#11000001b ;0001 jz TV2 mov a,r7 xrl a,#11000010b ;0010 jz VCD mov a,r7 …… SET ETO SET EA ;開中斷 pp:jnb mdl,pp ;循環等待按鍵 clr mdl ; CLR KEYHAO sjmp pp…… ‘0’子程序和‘1’子程序部分:ZERO: CLR A SETB TR0 ;啟動定時器0# CJNZ A,#39,$ ;0.5625ms高電平 CLR TR0 ;停定時器0# ACALL DE05625 ;沿時0.5625ms CLR A RET ONE: CLR A SETB TR0 ;啟動定時器0# CJNE A,#39,$ ;0.5625ms高電平 CLR TR0 ;停定時器0# ACALL DE16875 ;沿時1.6875ms RET 結語 本文介紹了AT89C52單片機代替專用遙控芯片設計通用型電視遙控器,該方案具有結構簡單、成本低等優點,用本文介紹的方法進行單片機遙控信號模擬,可以作出一款自己家的通用遙控器。 |