<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

      用單片機解碼紅外遙控器

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2011-3-19
      用單片機解碼紅外遙控器


      用單片機解碼紅外遙控器
        遙控器使用方便,功能多.目前已廣泛應用在電視機、VCD、DVD、空調等各種家用電器中,且價格便宜,市場上非常容易買到。如果能將遙控器上許多的按鍵解碼出來.用作單片機系統的輸入.則解決了常規矩陣鍵盤線路板過大、布線復雜、占用I/O口過多的弊病。而且通過使用遙控器,操作時可實現人與設備的分離,從而更加方便使用。下面以TC9012編碼芯片的遙控器為例。談談如何用常用的51系統單片機進行遙控的解碼。
        一、編碼格式
        1、0和1的編碼
        遙控器發射的信號由一串O和1的二進制代碼組成.不同的芯片對0和1的編碼有所不同。通常有曼徹斯特編碼和脈沖寬度編碼。TC9012的O和1采用PWM方法編碼,即脈沖寬度調制,其O碼和1碼如圖1所示(以遙控接收輸出的波形為例)。O碼由O.56ms低電平和0.56ms高電平組合而成.脈沖寬度為1.12ms.1碼由0.56ms低電平和1.69ms高電平組合而成.脈沖寬度為2.25ms。在編寫解碼程序時.通過判斷脈沖的寬度,即可得到0或1。
        2、按鍵的編碼
        當我們按下遙控器的按鍵時,遙控器將發出如圖2的一串二進制代碼,我們稱它為一幀數據。根據各部分的功能。可將它們分為5部分,分別為引導碼、地址碼、地址碼、數據碼、數據反碼。遙控器發射代碼時.均是低位在前。高位在后。由圖2分析可以得到.引導碼高電平為4.5ms,低電平為4.5ms。當
      接收到此碼時.表示一幀數據的開始。單片機可以準備接收下面的數據。地址碼由8位二進制組成,共256種.圖中地址碼重發了一次。主要是加強遙控器的可靠性.如果兩次地址碼不相同.則說明本幀數據有錯.應丟棄。不同的設備可以擁有不同的地址碼.因此。同種編碼的遙控器只要設置地址碼不同,也不會相互干擾。圖中的地址碼為十六進制的0EH(注意低位在前)。在同一個遙控器中.所有按鍵發出的地址碼都是相同的。數據碼為8位,可編碼256種狀態,代表實際所按下的鍵。數據反碼是數據碼的各位求反,通過比較數據碼與數據反碼.可判斷接收到的數據是否正確。如果數據碼與數據反碼之間的關系不滿足相反的關系.則本次遙控接收有誤.數據應丟棄。在同一個遙控器上.所有按鍵的數據碼均不相同。在圖2中,數據碼為十六進制的0CH,數據反碼為十六進制的0F3H(注意低位在前).兩者之和應為0FFH。
          二、單片機遙控接收電路
          紅外遙控接收可采用較早的紅外接收二極管加專用的紅外處理電路的方法。如CXA20106,此種方法電路復雜,現在一般不采用。較好的接收方法是用一體化紅外接收頭,它將紅外接收二極管、放大、解調、整形等電路做在一起,只有三個引腳.分別是+5V電源、地、信號輸出。常用的一體化接收頭的外形及引腳見圖3和圖4。紅外接收頭的信號輸
      出接單片機的INTO或INTl腳.典型電路如圖5所示.圖中增加了一只PNP型三極管對輸出信號進行放大。
        三、遙控信號的解碼算法及程序編制
          平時。遙控器無鍵按下。紅外發射二極管不發出信號,遙控接收頭輸出信號1。有鍵按下時.O和1編碼的高電平經遙控頭倒相后會輸出信號O.由于與單片機的中斷腳相連,將會引起單片機中斷(單片機預先設定為下降沿產生中斷)。單片機在中斷時使用定時器0或定時器1開始計時.到下一個脈沖到來時,即再次產生中斷時,先將計時值取出。清零計時值后再開始計時.通過判斷每次中斷與上一次中斷之間的時間間隔。便可知接收到的是引導碼還是 O和1。如果計時值為9ms。接收到的是引導碼,如果計時值等于1.12ms,接收到的是編碼O。如果計時值等于2 25ms.接收到的是編碼1。在判斷時間時,應考慮一定的誤差值。因為不同的遙控器由于晶振參數等原因,發射及接收到的時間也會有很小的誤差。
          以接收TC9012遙控器編碼為例,解碼方法如下:
          (1)設外部中斷0(或者1)為下降沿中斷,定時器0(或者1)為16位計時器.初始值均為O。
          (2)第一次進入遙控中斷后,開始計時。
          (3)從第二次進入遙控中斷起,先停止計時。并將計時值保存后,再重新計時。如果計時值等于前導碼的時間,設立前導碼標志。準備接收下面的一幀遙控數據,如果計時值不等于前導碼的時間,但前面已接收到前導碼,則判斷是遙控數據的O還是1。
        (4)繼續接收下面的地址碼、數據碼、數據反碼。
        (5)當接收到32位數據時,說明一幀數據接收完畢。此時可停止定時器的計時,并判斷本次接收是否有效.如果兩次地址碼相同且等于本系統的地址,數據碼與數據反碼之和等于0FFH,則接收的本幀數據碼有效。否則丟棄本次接收到的數據。
        (6)接收完畢,初始化本次接收的數據,準備下一次遙控接收。
        示例程序如下: E1INT:
        PUSHACC
        PUSH PSW
        CLRTR1
        MOV RM—TLEN,TH1    、
        MOVTH1,#00H
        MOV TL1,#00H
        SETBTR1
        MOV A,RMJLEN
        JNZ LBL—RM—DAT—BIT
        MOV RM—ADDR.#00H
        MOV RM—RADDR,#00H
        MOV RM—DAT,#00H
        MOV RM—RDAT,#00H
        MOV RM—BIT_CNT,#00H
        CLR RM—OK
        CLR RM—GUIDE
        POPPSW
        POPACC
        RET1 I BI RM DAT BIT:
          MOV A,RM_TLEN
          CJNE A,#23H,LBL—RM_ADDR_DAT
          SETB RM—GUIDE
          SJMP LBLE1 INT-RET
       LBLRM_ADDR_DAT;
          JNB RM—GUIDE,LBL—RM—ERROR
          CJNE A,#04H,LBL_RM_ONE
          CLR C
          SJMP LBL_RM—SHIFT
       LBLRM—ONE:
          CJNE A。#08H。LBL—RM—ERROR
          SETB C
       LBL_RM_SHIFT:
          MOV A,RM—RDAT
          RRC A
          MOV RM—RDAT.A
          MOV A,RM—DAT
          RRC A
          MOV RM—DAT,A
          MOV A,RM—RADDR
          RRC A
          MOV RM RADDR.A
          MOV A。RM—-ADDR
          RRC A
          MOV RM—.ADDR.A
       LBL—RM—END:
          INC RM—BIT—CNT
          MOV A,RM_BIT_CNT
          CJNE A,#32,LBLE1 INT_RET
          CLRTR1
          MOV TH1,#00H
          MOVTL1,#00H
          MOV HOUR.RM—ADDR
          MOV MINUTE,RM—DAT
          MOV RM—_ADDR,#00H
          MOV RM—RADDR,#00H
          MOV RM—DAT,#00H
          MOV RM—RDAT,#00H
          MOV RM一8IT_CNT,#00H
          CLR RM—GUIDE
          SEITB RM—OK
          SJMP LBL—E1 INT—RET LBL—RM—ERROR:
          CLRTR1
          MOV TH1,#0OH
          MOVTL1,#00H 
          MOV RM—_ADDR,#00H
          MOV RM—RADDR,#00H
          MOV RM—DAT,#00H
          MOV RM—RDAT,#00H
          MOV RM—B1T—CNT,#00H
          CLR RM—GUIDE
       LBL—E1 INT—RET:
        POPPSW
        POPACC
        RETI
          四、遙控代碼與鍵盤碼的轉換
          在應用系統中,帶遙控器的儀器設備一般都帶按鍵。而且二者功能相同。將遙控鍵值轉換成標準的按鍵值后。遙控按鍵散轉表格可以與鍵盤散轉表格復用。轉換方法可用查表法。通過查表。使遙控的按鍵值轉換成本機鍵盤的值。這樣既可以使用按鍵操作,也可以使用遙控操作,而且相應的處理程序非常簡單。
          以上以Tc9012編碼格式為例,說明了解碼的原理與方法。只要注意一幀數據的格式及引導碼、O碼和1碼的時間長度.其它編碼芯片如 HT6121、M50560、LC7461等也非常容易解碼。   

      Tags:單片機,解碼,紅外遙控器  
      責任編輯:admin
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 亚洲第一综合天堂另类专| 五月天色婷婷综合| 国产综合一区二区| 亚洲六月丁香婷婷综合| 色综合久久久无码网中文| 天天综合亚洲色在线精品| 久久久综合九色合综国产精品 | 热综合一本伊人久久精品 | 国产精品天天影视久久综合网 | 久久久久久久综合| 亚洲欧美成人综合久久久| 色噜噜狠狠色综合中文字幕| 天堂久久天堂AV色综合| 小说区图片区综合久久88| 色欲人妻综合AAAAA网| 亚洲狠狠爱综合影院婷婷| 色综合67194| 五月丁香综合激情六月久久| 五月天婷五月天综合网在线| 天天综合网色中文字幕| 综合三区后入内射国产馆| 色综合天天综合高清网国产| 亚洲欧洲国产综合| 婷婷成人丁香五月综合激情| 狠狠综合久久综合88亚洲| 一本色道久久综合一区| 麻豆久久婷婷综合五月国产| 亚洲国产综合专区在线电影 | 丁香五月亚洲综合深深爱| 日韩亚洲国产综合久久久| 人人狠狠综合久久亚洲| 色九月亚洲综合网| 综合偷自拍亚洲乱中文字幕| 五月丁香六月综合av| 中文字幕亚洲综合久久菠萝蜜 | 婷婷久久综合九色综合九七| 亚洲国产成人久久综合区| 久久综合给合综合久久| 中文字幕乱码人妻综合二区三区| 久久久久久青草大香综合精品| 久久综合九色综合91|