紅外線 紅外遙控解碼器

2021-02-23 電氣自動化資料庫

                    

   

         你家裡是否有一個電視機遙控器或者空調機遙控器呢?你是否也想讓它遙控其他的電器甚至讓它遙控您的電腦呢?那好,跟我一起做這個「紅外遙控解碼器」。

     該小製作所需要的元件很少:單片機TA89C2051一隻,RS232接口電平與TTL電平轉換心片MAX232CPE 一隻,紅外接收管一隻,晶振11.0592MHz,電解電容10uF4隻,10uF一隻,電阻1K1個,300歐姆左右1個,瓷片電容30P2個。發光二極體8個。價錢不足20元。

電路原理介紹:

        主控制單元是單片機AT89C2051,中斷口INT0跟紅外接受管U1相連,接收紅外信號的脈衝,8個發光二極體作為顯示解碼輸出(也可以用來擴展接其他控制電路),U3是跟電腦串行口RS232相連時的電平轉換心片,9、10腳分別與單片機的1、2腳相連,(1腳為串行接收,2腳為串行發送),MAX232CPE的7、8腳分別接電腦串行口的2(接收)腳、3(發送腳)。晶振採用11.0592MHz,這樣才能使得通訊的波特率達到9600b/s,電腦一般默認值是9600b/s、8位數據位、1位停止位、無校驗位。電路就這麼簡單了,現在分析具體的編程過程吧。

如圖所示,panasonic遙控器的波形是這樣的(經過反覆測試的結果)。

         開始位是以3.6ms低電平然後是3.6ms高電平,然後數據表示形式是0.9ms低電平0.9ms高電平周期為1.8ms表示「0」, 0.9ms低電平 2.4ms高電平周期為3.3ms表示「1」,編寫程序時,以大於3.4ms小於3.8ms高電平為起始位,以大於2.2ms小於2.7ms高電平表示「1」,大於0.84ms小於1.11ms高電平表示「0」。因此,我們主要用單片機測量高電平的長短來確定是「1」還是「0」即可。定時器0的工作方式設置為方式1:mov tmod,#09h,這樣設置定時器0即是把GATE置1,16位計數器,最大計數值為2的16次方個機器周期,此方式由外中斷INT0控制,即INT0為高時才允許計數器計數。比如:

jnb p3.2,$

jb p3.2,$

clr tr0

這3條指令就可以測量一個高電平,接下來讀取計數值TH0,TL0就可以分辨是起始位還是「1」或「0」。在確定碼錶之前,您可以使用P0口的8個發光二極體來顯示編碼,16位編碼分兩次顯示:

mov p0,keydata

acall delay_1s ;//1ms延時子程序

mov p0,keydata+1

ljmp main

根據P0相繼的兩次顯示的編碼,記錄每個按鍵的編碼,形成編碼表,即遙控器編碼的解碼完畢。碼錶確定之後,以後接收到遙控器的編碼之後,就與碼錶比較,找到匹配的碼項,並把該碼項對應的順序號輸出到P0口,同時也把順序號向串行口輸出到電腦,電腦接收該數據後由串口軟體決定如何

處理。

          程序不長,下面是完整的程序和注釋:(先看流程圖)

keydata equ 30h ;//該地址和31H地址用來存放遙控器按鍵編碼。

org 00h

main:

      mov keydata,#0      ;// 清零

      mov tmod ,#09h      ;//設置定時0方式1,GATE=1

           mov  r7,#0            ;//計數器,用來計數是否滿8位

      mov  r6,#0                        ;//計數器,用來計數是否滿2位元組(解16位編碼)

      jb p3.2,$                        ;//是否為低電平

again:                                                ;//如果為低,繼續往下面執行

      mov tl0,#0                        ;//清零TL0

      mov th0,#0                  ;//清零TH0

      setb tr0                        ;//開啟定時器0

      jnb p3.2,$                        ;//等待高電平到來

      jb p3.2,$            ;//高電平到來,此時開始計數

      clr tr0      ;//高電平結束,停止計數

      mov a,th0            ;//讀取th0 值,TL0忽略不計           

      clr c                        ;//

      subb a,#12            ;//

      jc again            ;//th0<12< span="">則轉,即小於3.4ms,你可以算一下這個時間

      mov a,#14            ;//

      clr c                        ;//

      subb a,th0            ;//和14比較,如果TH0>14則大於3.8ms

        jc again               ;//大於3.8ms,從新再檢測

nextbit:                        ;//起始位找到了,然後下一位

      mov tl0,#0            ;//

      mov th0,#0            ;//

      setb tr0            ;//啟動定時器

      jnb p3.2,$            ;//等待高電平

      jb p3.2,$             ;//高電平到來,此時開始計數

      clr tr0            ;//高電平結束,停止計數

      mov a,th0            ;//讀取計數值,TL0忽略不計

      clr c                        ;//

      subb a,#8            ;//th0和8比較

      jc next  ;;;;//若 <2.2ms< span="">則轉,再判斷是否大於0.84ms

      mov a,#10            ;//再跟10比較

      clr c                        ;//

      subb a,th0            ;//

      jc again ;;;;;;;//若 >2.7ms,則放棄,從新檢測

      mov a,keydata            ;// 符合大於2.2ms 小於2.7ms,即為「1」

      setb c        ;//C = 1

      rrc a                        ;//把1移位進A

      mov keydata,a            ;//保存

      inc r7                        ;//計數器加1

      cjne r7,#8,nextbit            ;//是否滿8位

      inc r6                                    ;//計數加1

      cjne r6,#2,last8            ;//是否滿兩字節

      sjmp seach                        ;//不滿兩字節,再新採集

last8:                                                ;//滿1位元組,再接下來第二字節

      mov keydata+1,a            ;//把第一字節編碼數據保存到31h裡

      mov r7,#0                        ;//計數器R7清零

      sjmp nextbit                  ;//繼續採集數據

next:                                       ;//小於2.2ms時轉到這裡

      mov a,th0                        ;//讀取計數值TH0

      swap a                                    ;//高4位與低4位對換

      mov r1,a                        ;//保存到R1

      anl tl0,#0f0h                        ;//取TL0高4位,低4位忽略不計

      mov a,tl0                        ;//

      clr c                                    ;//

      rrc a                        ;//

      rrc a                        ;//

      rrc a                        ;//

      rrc a                        ;//

      add a,r1            ;//

      mov r1,a            ;//

      subb a,#30            ;//以上幾行是把TH0的低4位和TL0的高4位合併為1位元組作為計數值

      jc nextbit ; //判斷是否 <0.84ms< span="">,是則放棄,繼續採集

      mov a,r1            ;//否

      clr c                        ;//

      cjne a,#64,continue   ;//跟64比較

continue:                        ;//

      jnc nextbit ;  //a>64表示採樣值 >1.11ms  放棄

      mov a,keydata  ;//否則 ,符合位「0」

      clr c          ;//C  = 0

      rrc a                                    ;//把零右移進A

      mov keydata,a                        ;//保存

      inc r7                                    ;//計數器加1

      cjne r7,#8,nextbit            ;//是否滿8位

      inc r6                                    ;//計數器加1

      cjne r6,#2,last_8            ;//是第一字節已經滿

      sjmp seach                        ;//

last_8:                                     ;//如果為第二字節

      mov keydata+1,a            ;//則保存第一字節到31h

      mov r7,#0                        ;//清零R7

      sjmp nextbit                        ;//

seach:                                          ;//匹配按鍵編碼

      mov r0,#-2  ;//按鍵編碼字節個數計數器

      mov r1,#-1  ;//按鍵順序計數器

seach1:                                    ;//

        inc r0                        ;//

seach2:                              ;//

            inc r0                                    ;//

      inc r1                                    ;//

      cjne r1,#29,compare            ;//是否R1=29           

      sjmp exit0                        ;//

compare:                                    ;//開始匹配

       mov a,r0                        ;//

      mov dptr,#keycode            ;//地址指針指向碼錶首址

      movc a,@a+dptr            ;//取碼

      cjne a,keydata,seach1            ;//比較

      inc r0                                    ;//R0+1,再比較下一字節(每個按鍵編碼為2位元組)

      mov a,r0                        ;//

      ;mov dptr,#keycode            ;//

      movc a,@a+dptr            ;//比較

      cjne a,keydata+1,seach2            ;//是否匹配,不匹配則繼續跟下一字節比較

      mov p1,r1         ;//如果匹配,把按鍵順序號輸出到p1

send:                                          ;//

      mov tmod,#20h     ;   //設置timer 1,mode 2

      mov tl1,#0fdh                        ;//設置定時器初值

      mov th1,#0fdh                        ;//

      mov scon,#01010000b;//以上設置,即設置串口波特率係數為:9600,8,1,0

      setb tr1                        ;//啟動定時器1

loop_s:                        ;//

      mov sbuf,r1    ;//把R1(按鍵順序號)輸出到串口

      jnb ti,$                        ;//等待是否發送完畢

      clr ti                                    ;//發送完畢,清零TI

exit0:                                          ;//

ljmp main                                    ;//循環

keycode:                                    ;//每兩字節代表一個按鍵的編碼

db 11111000b,00000000b,    11111100b,00000000b,    11111001b,11000000b

db 11111100b,11000000b,    11111010b,00000000b,    11111010b,00100000b

db 11111010b,01000000b,    11111010b,01100000b,    11111010b,10000000b

db 11111010b,10100000b,    11111010b,11000000b,    11111010b,11100000b

db 11111011b,00000000b,    11111011b,00100000b,    11111011b,01000000b

db 11111011b,01100000b,    11111111b,01100000b,    11111111b,10100000b

db 10001100b,10001110b,    10001101b,11101110b,    10001100b,10101110b

db 10001101b,11001110b,    11111000b,11100000b,    11111100b,10000000b

db 11111100b,01000000b,    11111001b,10100000b,    11111100b,10100000b

db 11111100b,01100000b

end

-

相關焦點

  • 【實用】動手用單片機做紅外遙控解碼器
    你是否也想讓它遙控其他的電器甚至讓它遙控您的電腦呢?那好,跟我一起做這個「紅外遙控解碼器」。該小製作所需要的元件很少:單片機TA89C2051一隻,RS232接口電平與TTL電平轉換心片MAX232CPE一隻,紅外接收管一隻,晶振11.0592MHz,電解電容10uF4隻,10uF一隻,電阻1K1個,300歐姆左右1個,瓷片電容30P2個。發光二極體8個。價錢不足20元。
  • 一種多路紅外遙控系統的電路設計和實現
    本課題要設計的紅外多路遙控系統,主要紅外發射和紅外接收這兩部分,本設計依託市面上常見的紅外發射和紅外接收元器件,使設計具有傳輸距離一般、硬體簡單、安裝方便、價格便宜的優點。本文所介紹的紅外多路遙控系統,是採用碼分制多通道紅外遙控系統裝置。早期的碼分制的脈衝指令編碼多採用分離元器件及小規模數字集成電路,編碼、解碼電路弄得很複雜,可靠性也差。
  • 你家裡的遙控器是咋遙控的?
    紅外線遙控器呢主要是由兩部分組成即是發射和接收兩個部分了那麼發射端就利用我們熟知的發光紅外二極體  這個二極體跟我們普通的二極體還是有很大的區別的它內部材料不同於普通發光二極體當在其兩端施加一定電壓時,它便發出的是紅外線而不是可見光 我們的接收部分呢則是紅外接收二極體
  • 這10款國產手機有紅外功能,可以遙控電視空調
    表面上看,手機帶紅外功能似乎沒啥用,除了小米、華為之外,基本上沒有其它手機廠商,推出帶有紅外功能的手機,其實,它用處還是很大的,比如電器的遙控器突然沒電了,或者放在哪個角落裡找不到了,這種情況下就可以拿出手機開電視或者空調了。甚至,你如果覺得用手機的紅外遙控更方便,還可以把家中所有電器都用手機控制,這樣就不需要再到處找遙控器了。
  • 感應櫥櫃燈開關紅外式好還是手掃式好?
    感應櫥櫃燈開關分為紅外線式開關以及手掃式開關,今天小編要向大家簡單科普,感應櫥櫃燈開關是紅外線的好還是手掃好呢? 手掃開關:手掃啟動設計,根據紅外識別探頭探測活動物體(在感應範圍內)擺動手掌,啟動燈具,方便快捷避免接觸開關,大大降低溼手觸碰開關帶來觸電的風險
  • 【紅外攝影】讓攝影家孫青為大家揭開紅外線攝影那神秘的面紗吧!
    特別是她的紅外攝影,更是突破了傳統的攝影技法,應用光波的變化,在攝影領域有了創新和突破,她的作品多次參加各種攝影展覽和獲得大獎。她還經常向攝友傳播紅外攝影的知識,帶動了一批紅外攝影愛好者。最近,她的三幅紅外攝影作品在新民晚報上刊登,引起廣泛關注,為紅外攝影的推廣、攝影理念的創新起到了積極作用。
  • 拍攝旅遊照片時,如何使用紅外線和微距進行拍攝?
    所以每次我在在修改紅外攝影照片時會感到又愛又恨。但是沒辦法,即便如此,我也還是要拍攝,因為我是個喜歡冒險的人,我會在每次冒險之旅前計劃拍攝一些特殊的照片。在利用紅外線拍攝時,我會使用可以安裝濾鏡的數位相機,因為利用紅外線拍攝需要一個特殊的濾鏡來捕捉紅外線照片。高端消費類數位相機和數碼單眼相機都提供配套的濾鏡。
  • 紅外線鏡頭中的上海城市風光
    我是許麗敏,上海人,退休後熱愛攝影,更喜歡紅外線攝影。要拍好紅外線作品並非易事,幾年來我努力學習得到了一點收穫,並加入了中國煤礦攝影家協會、紅外線委員會,也成為視覺中國500Px籤約攝影師、像素蜜蜂創意供稿攝影師。下面就請各位朋友隨我進入紅外線攝影的上海城市風光,紅外線攝影世界。
  • 手機真的能拍紅外透視照嗎?
    ‍紅外線小知識紅外線是一種人眼看不見,但傳遞著溫度信息的電磁波。由于波長比可見光長,所以紅外線的衍射能力更強,可以繞過塵埃、濃霧、塑料等物讓我們看清背後的東西,這也就是大家認為的「透視」能力的來源。如今相機最常見的感光元件不外乎CCD和CMOS,兩者都可以接收近紅外波段的電磁波信號,也就是說,其實每部手機都有能力進行紅外攝像。但實際應用中,這些紅外波段的信息反倒會影響相機成像質量,帶來偏色等問題,所以現在的廠家通常都會選擇給感光元器件加上紅外截止濾波片,將紅外波段拒之門外。
  • 紅外線攝影,給你看「未曾見過的世界」
    紅外線攝影就是利用紅外輻射線進行拍照的攝影特技之一。
  • 紅外攝影快速入門指南
    您聽說過紅外攝影嗎?簡單來說,紅外攝影就是通過各種技術手段過濾掉大部分光線,只讓紅外線進入鏡頭的一個攝影門類。
  • 華為哪些手機有紅外線?
    華為很多手機有紅外功能,目前如P30 pro、華為P40 pro和pro+、Mate 30系列、Mate 40系列,還有華為榮耀系列,從榮耀6算起,歷經榮耀7、榮耀8、榮耀9、榮耀10都有紅外遙控功能,但是榮耀20開始都沒有了紅外遙控功能。
  • 紅外對射報警器的工作原理淺析
    紅外對射全名叫「光束遮斷式感應器」(Photoelectric Beam Detector),其基本的構造包括瞄準孔、光束強度指示燈、球面鏡片、LED指示燈等。其偵測原理乃是利用紅外線經LED紅外光發射二極體,再經光學鏡面做聚焦處理使光線傳至很遠距離,由受光器接受。當光線被遮斷時就會發出警報。紅外線是一種不可見光,而且會擴散,投射出去會形成圓錐體光束。
  • 紅外攝像機能透視麼?紅外攝像機原理及參數分析給你答案
    在紅外線中,有一種近紅外線,能穿透人的衣物,到達人的皮膚,再反射出去,這就給使用紅外攝像機看透人體衣物等其他物體有了實現的理論依據。  一般攝像機都是光學攝像機,只能撲捉到可見光,有一種熱成像攝像機,能撲捉到比可見光頻率低的光線——紅外光,能在黑夜中拍到大致輪廓。
  • 紅外攝影入門技巧
    所謂紅外攝影,就是使相機通過濾鏡只讓紅外線通過,導致照片形成了與肉眼所見不同的影像。紅外攝影多應用於拍攝風光,白色的樹葉和異常湛藍的天空是最常見的題材。紅外攝影會讓日常的風景變得別有一番風味,下面就讓我們來領略紅外線攝影獨特的魅力並了解其拍攝方法。
  • 廣泛使用的紅外線體溫計會傷害眼睛嗎?
    網上查證要點:(摘自不同渠道的比較科學的解釋) 1、紅外線測溫的原理,是通過接收物體發射的紅外線來檢測的,因為溫度高的物體發射的紅外線數量大,溫度低的物體發射的紅外線數量小。紅外線測溫,它自己不會主動地去照射被測物體。
  • 鬼魅的奇幻影像 紅外攝影技法入門
    紅外攝影的原理在說紅外攝影的主角——紅外線之前,先讓我們來複習一下以前說過的光是怎麼回事。而紅外攝影的原理,就是只讓紅外線到達傳感器,而同時阻止可見光進入。這樣就能讓傳感器產生只由紅外線曝光而帶來的圖像。
  • PS教程:紅外線攝影效果
    紅外線攝影效果哈嘍大家好~我是愛知趣教育的二魚老師。今天給大家更新一個有趣的如何製作紅外線攝影效果的教程。至此,紅外線效果製作完成,效果如圖所示:6、技巧提示:紅外線攝影是一種較為另類的拍攝方式,利用紅外感光設備與紅外濾鏡相配合,可以拍攝出有別於傳統彩色照片的紅外線效果,這種畫面可以給人一種強烈震撼的視覺效果。
  • 紅外熱像儀能穿透衣物透視隱私嗎?
    正常情況下的熱像儀探測器能接收到的紅外波長一般在8-14μm,在這個範圍內的紅外線能繞過障礙物繼續傳播,因此我們拍攝到地數據也會更加準確。有人擔心被紅外熱像儀拍攝會透視,其實紅外線並不能穿透所有絲織物,否則紅外熱像儀下呈現出的人都是赤裸裸的人了。用紅外熱像儀拍攝人物圖片,能清楚地看出他們的服裝形狀甚至褶皺等。
  • 紅外測距儀怎麼用_紅外測距儀使用方法
    打開APP 紅外測距儀怎麼用_紅外測距儀使用方法 網絡整理 發表於 2020-02-27 11:27:53   紅外測距儀使用方法   紅外測距儀的使用方法是:先將紅外測距儀放在面前,用右手按住機器上的紅色三角鍵鎖定要測距的目標,然後再按一下就可以對自身與目標之間的精準距離進行測量了,測試儀上的顯示屏也就會顯示出測試距離的數值。