久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 13937|回復(fù): 17
收起左側(cè)

[原創(chuàng)]詳細(xì)介紹用51單片機(jī)解密任何遙控器

  [復(fù)制鏈接]
ID:6481 發(fā)表于 2009-5-7 17:56 | 顯示全部樓層 |閱讀模式

  首先說(shuō)一下 想寫(xiě)這個(gè)帖子 看到論壇上有關(guān)于遙控器方面的帖子 但是都沒(méi)有很詳細(xì)的介紹 而且是已經(jīng)有完整的波形 僅僅介紹了解碼部分 而沒(méi)有分析波形數(shù)據(jù)方面的介紹 ,因此有了寫(xiě)一篇完整的關(guān)于遙控器方面的文章的沖動(dòng) 此貼對(duì)新手可能有點(diǎn)困難不過(guò) 不要緊 我會(huì)以最通俗的方式來(lái)解釋 如果有不明白的 建議去看看書(shū) 自己努力 沒(méi)有不可能的事 別人能做到 你也一定行,關(guān)于紅外遙控的基礎(chǔ)理論,大家可以到這個(gè)貼去看下http://www.zg4o1577.cn/mcu/184.html,里面有詳細(xì)的介紹。在這里我僅把一些關(guān)鍵的帶出來(lái) 關(guān)于硬件電路 那么拋開(kāi)那么多文字介紹 最后意思就是說(shuō) 你家里的遙控板 也就是發(fā)射部分 是把所有的封裝好了的 比如鍵盤(pán)矩陣、編碼調(diào)制、LED紅外發(fā)送器 等等 那么接受部分 SM0038 3個(gè)腳 一個(gè)腳地 一個(gè)腳電源 一個(gè)腳信號(hào)腳 接到 單片機(jī)隨便個(gè)P口上(此處是P3。6) OK 硬件部分就搞定了當(dāng)然還有數(shù)碼管顯示 ,這些肯定不用說(shuō)你都能搞定吧,我這剛好有一塊51hei單片機(jī)學(xué)習(xí)板是在www.zg4o1577.cn的論壇買(mǎi)的,這些東東都有,所以就不用自己去搭電路那么麻煩了),那么 我們想 我們按一下遙控板 大家看到 有個(gè)燈閃了一下 然后OVER 那么 我們現(xiàn)在要做的就是在燈閃了那一下之后讓 單片機(jī)來(lái)讀它的鍵碼 然后不同的鍵碼來(lái)干不同的事 ,本文 是向大家解釋一種方法 當(dāng)然如果你知道遙控器的編碼 那么 我想寫(xiě)解碼程序應(yīng)該是很簡(jiǎn)單的事 而我的意思是說(shuō)我們現(xiàn)在從0開(kāi)始 拿到任何一種遙控板 那怕不知道它的型號(hào) 但是 大家想 即使它什么型號(hào)都沒(méi)寫(xiě) 但是按一下不同的鍵 它的發(fā)射的脈沖 肯定不一樣 無(wú)非就是引導(dǎo)碼 然后 地址碼 鍵碼 驗(yàn)證碼 因?yàn)椴煌倪b控板 它所定義的規(guī)則不一樣 (這里說(shuō)一點(diǎn)題外話(huà) 其實(shí)在讀出波型后 大家就可以看出這個(gè)遙控板最開(kāi)始設(shè)計(jì)時(shí)的人的意思 或者說(shuō)考慮 它的這個(gè)設(shè)計(jì)方式是否是最好的 是否穩(wěn)定 是否具有通用性 或者說(shuō) 日本的和中國(guó)的設(shè)計(jì)師 在設(shè)計(jì)時(shí)他們所考慮的 名牌和 雜牌的 他們?cè)谠O(shè)計(jì)時(shí)所考慮的 等等 這些其實(shí)也是件很有意思的事 就像偷窺到一個(gè)人的內(nèi)心世界一樣 扯遠(yuǎn)了 。。--)
  下面我們來(lái)說(shuō)說(shuō)本問(wèn)利用51單片機(jī)軟件解密的方法 首先大家看了我剛才貼出來(lái)的連接 應(yīng)該知道了 編碼無(wú)非就是低電平高電平。但是我們知道一點(diǎn) 它肯定是有規(guī)律的 (這里申明一下 如果你能找到它的PDF 上面寫(xiě)好了它的波形 或者你在網(wǎng)上找到了前人把某型號(hào)的遙控器的波形已經(jīng)分析出來(lái)了那么你完全可以把這篇帖子當(dāng)水貼 跳過(guò) 我這里的目的是想通過(guò)一種方法 一種 完整的分析方法  就像醫(yī)生拿起手術(shù)刀 解開(kāi)它的內(nèi)部 看常人所不能看到的東西 最終能把一種很通用的東西 把它的內(nèi)部原理能夠完全的理解 一切從簡(jiǎn)單學(xué)起 做起 以后凡是涉及到 這種 類(lèi)型的東西 相信你會(huì)更加自信 而不是只滿(mǎn)足做一個(gè)課程設(shè)計(jì) 一個(gè)老師布置的作業(yè) 扯遠(yuǎn)了。。  )
  具體我們?cè)趺从涗涍@種規(guī)律  很簡(jiǎn)單 我們用定時(shí)器把每個(gè)高低電平的時(shí)間記下來(lái) 然后顯示在數(shù)碼管上 設(shè)置2秒顯示一個(gè)數(shù)據(jù) 然后用EXCLE記錄下來(lái)
再用鉛筆 或者 隨便什么畫(huà)圖軟件 把它的波形畫(huà)出來(lái) 標(biāo)上 低電平 高電平 再對(duì)比下不同的鍵的區(qū)別 一切就豁然開(kāi)朗了
 現(xiàn)在舉 實(shí)際的例子
萬(wàn)能遙控板大家應(yīng)該都知道吧
圖片 04.jpg
隨便去那都能買(mǎi)到 幾塊錢(qián) 左右 安上電池 設(shè)置好型號(hào)(這里例子設(shè)置的是長(zhǎng)虹 如果用家里的遙控板 那么不用設(shè)置了 )
 單片機(jī)上電 SM0038接好
  關(guān)鍵程序如下 :(在這里我想鼓勵(lì)下大家 不要一想到程序就是完整的 可以直接燒進(jìn)去 看結(jié)果的 其實(shí) 我上個(gè)帖子也說(shuō)過(guò) 你能看程序 看到關(guān)鍵的核心代碼 那么說(shuō)明你已經(jīng)進(jìn)步了 能找出其中的關(guān)鍵代碼 其他比如SM0038的接口 數(shù)碼管顯示的接口 等等 自己加上去就行了 這段程序 的結(jié)果是最終把 脈沖波的個(gè)數(shù) 和每個(gè)高低電平的時(shí)間數(shù) 放在寄存器里 那么既然你要做的就是 用自己手邊的單片機(jī) 把寄存器的值顯示到 數(shù)碼管上 把數(shù)據(jù)記錄下來(lái) 然后分析 找出規(guī)律 得出你想要的結(jié)果 在這個(gè)過(guò)程中 我相信反是喜歡搞磚研的 都會(huì)享受這個(gè)過(guò)程   )               
          mov r5,#0            ;用于記錄保存的時(shí)間值的個(gè)數(shù)
           mov r1,#bmhcq    ;高低電平寬度值緩沖區(qū)

           dec r1
           jb   p3.6,$          ;等待變低 , 即等待按鍵
next:      setb tr1             ;啟動(dòng)定時(shí)器1
           jnb p3.6,$   ;  等待變高,以測(cè)量低電平時(shí)間寬度
           clr tr1      ;關(guān)閉定時(shí)器1                             ;1US
           inc r5       ;時(shí)間值個(gè)數(shù)加1                           ;1
           inc r1                                                ;1
           mov @r1,th1  ;存低電平時(shí)間值 ,先存高8位,后存低8位   ;2US
           inc r1                                                ;1
           mov @r1,tl1                                           ;2
           mov th1,#0   ;重賦初值                                ;2
           mov tl1,#13  ;13為停止T1到重啟T1經(jīng)過(guò)的時(shí)間            ;2
           setb tr1     ;重新啟動(dòng)定時(shí)器                          ;1
           jb p3.6,$    ;等待變低
           clr tr1      ;關(guān)閉定時(shí)器1                             ;1
           inc r5                                                ;1
           inc r1                                                ;1
           mov @r1,th1  ;存高電平時(shí)間值                          ;2
           inc r1                                                ;1
           mov @r1,tl1                                           ;2
           mov th1,#0   ;重賦初值                                ;2
           mov tl1,#15  ;15為停止T1到重啟T1經(jīng)過(guò)的時(shí)間            ;2
           ajmp next    ;循環(huán)檢測(cè),直到T1在遙控器無(wú)鍵按下時(shí)溢出時(shí)產(chǎn)生中斷   ;2
           ajmp $

;-----------------------------------------
 ;定時(shí)器1中斷程序
 ;在遙控器無(wú)鍵按下時(shí)產(chǎn)生中斷,便依次將BMHCQ中的高低電平時(shí)間值轉(zhuǎn)換為BCD碼并顯示出來(lái)
;-----------------------------------------
t1zd:
          setb tr0       ;啟動(dòng)T0
          clr tr1        ;關(guān)閉T1
          setb et0       ;T0開(kāi)中斷
          mov a,r5
          mov r2,a
          mov r3,#0
          lcall hextoxcq
          lcall display
          jb yszt,$           ;延時(shí)一段時(shí)間,以便記錄顯示的時(shí)間值
          setb yszt
          mov r0,#bmhcq
dispnext: mov a,@r0           ;從BMHCQ中依次取出時(shí)間值(16位)調(diào)BTOD子程序?qū)⑵滢D(zhuǎn)換為5位BCD碼并放入XCQ中再調(diào)顯示子程序顯示
          mov r3,a  ;取高8位
          inc r0
          mov a,@r0
          mov r2,a   ;取低8位
          inc r0
          ;lcall BtoD      ;將高電平或低電平時(shí)間值轉(zhuǎn)為BCD碼放于XCQ中
          lcall HEXtoXCQ   ;將高電平或低電平時(shí)間值轉(zhuǎn)為十六進(jìn)制的LED碼放于XCQ中
          lcall display   ;顯示
          cpl p2.5        ;改變批示燈的狀態(tài),以此說(shuō)明顯示內(nèi)容的改變
          jb    yszt,$    ;延時(shí),以便抄錄時(shí)間值
          setb  yszt
          djnz r5,dispnext ;獲取的時(shí)間值沒(méi)顯示完則繼續(xù)
          sjmp $           ;顯示完畢,在此踏步
          reti
         
 HEXtoXCQ:
          push 00h
          mov r0,#xcq
          mov a,r2
          anl a,#0fH
          mov dptr,#LED
          movc a,@a+dptr
          mov @r0,a
          inc r0
          mov a,r2
          swap a
          anl a,#0fH
          mov dptr,#LED
          movc a,@a+dptr
          mov @r0,a
          inc r0
         
          mov a,r3
          anl a,#0fH
          mov dptr,#LED
          movc a,@a+dptr
          mov @r0,a
          inc r0
          mov a,r3
          swap a
          anl a,#0fH
          mov dptr,#LED
          movc a,@a+dptr
          mov @r0,a
          inc r0
          mov @r0,#7eh
          inc r0
          mov @r0,#7eh
          pop 00H
          ret
 led:    db 7eh,30h,6dh,79h,33h,5bh,5fh,70h,7fh,7bh,77h,1fh,4eh,3dh,4fh,47h                         

;---------------------------------------------
;將存于R3R2中高電平或低電平時(shí)間值轉(zhuǎn)為BCD碼放于XCQ中
;---------------------------------------------
BtoD:
         push 00h
         mov r0,#BCD
         mov r4,#3
bd0:     mov @r0,#0       ;BCD緩沖區(qū)清0
         inc r0
         djnz r4,bd0
         mov r6,#16
bd1:     clr c            ;將R3R2中的16位二進(jìn)制值轉(zhuǎn)換為三字節(jié)BCD碼存入BCD緩沖區(qū)中
         mov a,r3
         rlc a
         mov r3,a
         mov a,r2
         rlc a
         mov r2,a
         mov r4,#3
         mov r1,#bcd
BD3:     mov a, @r1
         addc a,@r1
         da a
         mov @r1,a
         inc r1
         djnz r4,bd3
         djnz r6,bd1
         mov r0,#xcq      ;將轉(zhuǎn)換結(jié)果從BCD緩沖中存入XCQ中
         mov r1,#bcd
         mov r4,#3
bd4:     mov a,@r1
         xchd a,@r0
         inc r0
         swap a
         xchd a,@r0
         inc r0
         inc r1
         djnz r4,bd4
         pop 00h
         ret

 

通過(guò)上面的程序我們讀出了按下一個(gè)鍵后的編碼的本質(zhì)的東西
  那么動(dòng)手把 圖畫(huà)下來(lái) 找規(guī)律 解碼 
我把我例子長(zhǎng)虹解碼后的波形圖 發(fā)出來(lái)
01.jpg
 01。JPG 是脈沖開(kāi)始時(shí)所有鍵前8個(gè)完全一樣的高低脈沖

02.jpg
02。JPG 大家注意看按不同的鍵 中間只是有3個(gè)脈沖在變化 是EXCLE的 W列-AC列 而這3位數(shù)值就是我們解碼的關(guān)鍵 01。JPG 中8位數(shù) 大家應(yīng)該看出 所有鍵都是一樣的11100010 后面02。JPG中我們把鍵碼整理出來(lái)就是 
按1鍵 00000000  00H
按2鍵 00010000  10H
按3鍵 00001000  08H
按4鍵 00011000  18H
按5鍵 。。。。。
后面就不寫(xiě)了
為了大家清晰可見(jiàn) 我把畫(huà)出的最后的波形圖03。JPG 貼出來(lái) 大家看下規(guī)律 
03.jpg
然后我們 來(lái)分析應(yīng)該怎么解碼 我相信到了這一步應(yīng)該很簡(jiǎn)單了吧 比如在這個(gè)例子中 我們發(fā)現(xiàn) 后面的鍵碼改變的部分完全是重復(fù)
 那么為什么完全可以不去讀后面的碼 只讀前面的16位的脈沖 放在寄存器中 再用比較指令 跳轉(zhuǎn) 下面是針對(duì)這個(gè)波形圖的解碼程序  相信大家已經(jīng)能用自己手中的利器 把它搞定了
寫(xiě)到這里 我覺(jué)得很疑惑 感覺(jué)自己沒(méi)能把具體問(wèn)題簡(jiǎn)單化  很多東西還是要靠大家自己去消化理解了
  程序看不懂。?那么OK  去翻指令 查書(shū) 一條一條看吧  程序我敢保證都是 編譯通過(guò)的
下面是解碼程序的關(guān)鍵代碼 : 


[此貼子已經(jīng)被admin于2009-7-30 2:03:19編輯過(guò)]
回復(fù)

使用道具 舉報(bào)

ID:6481 發(fā)表于 2009-5-7 17:56 | 顯示全部樓層

DYKJZ:     JB   P3.6,$

           LCALL YKJM  ;核心解碼代碼子程序
           cpl a
           jz    no     ;判斷是否為錯(cuò)誤代碼(0FFH)
           cpl a

           AJMP JZPD
NO:      LJMP  DYKJZ
            RET
 

JZPD:    CJNE A,#09H,JZ1  ;鍵碼為09H嗎?
            AJMP KAIS            ;鍵碼為09H 轉(zhuǎn)開(kāi)始程序()

JZ1:                                ;不為09H 轉(zhuǎn)最開(kāi)始 等待下一次遙控器按鍵到來(lái)
            AJMP DYKJZ      
            RET
KAIS: ;放你需要執(zhí)行的代碼 
           ;比如 點(diǎn)亮一個(gè)燈 給單片機(jī)接上串口   用單片機(jī)控制電腦的打開(kāi) 放音樂(lè)。等等 
           ;這些不屬于本問(wèn)討論的范圍 有興趣的可以自己擴(kuò)展
        RET
;-----------------------
  ;核心解碼代碼子程序
;------------------------
YKJM:
       

           PUSH         PSW
           PUSH         02H
           PUSH         06H
           PUSH         07H
           PUSH         B
           MOV          B,#0FFH
           JNB          TF1,JMCW                ;通過(guò)T1從0開(kāi)始定時(shí)到溢出來(lái)避開(kāi)遙控器的重發(fā)碼 ,也就是說(shuō)在讀了一個(gè)遙控按鍵后
           CLR          TF1                     ;到少要等到T1從0開(kāi)始定時(shí)到溢出才能讀取第二個(gè)按鍵


;引導(dǎo)碼正確時(shí)執(zhí)行以下代碼
        ;   CLR          YKBZ                    ;遙控標(biāo)志清0
JM21:
           MOV          R2,#16                  ;每次循環(huán)讀8位碼
           MOV          R6,#0                   ;存放16位碼中的低8位
           MOV          R7,#0                   ;存放16位碼中的高8位
JM3:
           JNB          P3.6,$                  ;等待低電平結(jié)束,不管其寬度,因?yàn)槭峭ㄟ^(guò)高電平的寬度來(lái)區(qū)分0(約為0.5ms)和1(約為1.6ms)
           MOV          TH1,#0
           MOV          TL1,#0
           SETB         TR1                     ;啟動(dòng)T1,統(tǒng)計(jì)高電平的寬度
           JB           P3.6,$
           CLR          TR1
    MOV   A,TH1
           CJNE         A,#2,JM4                ;若高電平寬度值大于2,則說(shuō)明此高電平為寬脈沖(1),否則為窄脈沖(0)
JM4:       CPL          C                       ;當(dāng)TH1的值大于2時(shí),C=0,小于2時(shí),C=1
           MOV          A,R7
           RRC          A
           MOV          R7,A
           MOV          A,R6
           RRC          A
           MOV          R6,A
           DJNZ         R2,JM3          ;連讀16位,先讀的為低位,后讀的為高位,高8位(數(shù)據(jù)碼)存于R7中,低8位(地址碼)存于R6中
           MOV          A,R6
           CJNE         A,#47H,JMCW     ;判斷地址碼是否為47H,不是轉(zhuǎn)出錯(cuò)返回
           MOV          A,R7            ;若地址碼正確,則R7中便為數(shù)據(jù)碼
           mov          r1,#jzh
           mov          @r1,A
           LJMP         JMFH
JMCW:      MOV          A,B
JMFH:      CLR          TF1            ;T1的溢出標(biāo)志清0
           MOV          TH1,#0          ;為T(mén)1設(shè)定初值并啟動(dòng)它
           MOV          TL1,#0          ;以此來(lái)避免對(duì)同一按鍵讀兩次(避開(kāi)遙控器的重發(fā)代碼)
           SETB         TR2
           POP          B
           POP          07H
           POP          06H
           POP          02H
           POP          PSW
           RET                          ;此時(shí),若引導(dǎo)碼、地址碼、鍵值碼和鍵值反碼中有一個(gè)有問(wèn)題,A中便為錯(cuò)誤代碼,否則,A中便為所按鍵之鍵值碼

 文章寫(xiě)完了。希望能對(duì)大家有少許的幫助 覺(jué)得有用就拿去研究下吧。最后放上完整的EXCLE 數(shù)據(jù)分析表 和 整理出的波形圖 大家看不清楚的下載后看完整的圖
 “要發(fā)只發(fā)精品   把最好的給大家”

[ 原 創(chuàng) ] Suse| haozi
2009.5.7 15:55
www.zg4o1577.cn 轉(zhuǎn)載請(qǐng)注明出處

 

回復(fù)

使用道具 舉報(bào)

ID:13700 發(fā)表于 2009-6-1 15:08 | 顯示全部樓層

呀這個(gè)好玩

回復(fù)

使用道具 舉報(bào)

ID:33120 發(fā)表于 2011-11-8 21:04 | 顯示全部樓層
牛人真多
回復(fù)

使用道具 舉報(bào)

ID:33706 發(fā)表于 2012-1-10 10:01 | 顯示全部樓層
這個(gè)好東西啊。。
回復(fù)

使用道具 舉報(bào)

ID:44558 發(fā)表于 2012-9-10 13:54 | 顯示全部樓層

謝謝版主,看到你這個(gè)帖子我非常感謝,我最近在做一個(gè)學(xué)習(xí)萬(wàn)能型遙控器,我覺(jué)得我研究了版主這個(gè)主題后,我就能做出來(lái) ,

我想問(wèn)下版主,請(qǐng)問(wèn)這里介紹的方法可以解碼任何制式的,是么?

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2012-9-19 04:38 | 顯示全部樓層

這個(gè)是nec的吧

回復(fù)

使用道具 舉報(bào)

ID:44824 發(fā)表于 2012-9-19 16:36 | 顯示全部樓層

我做了一個(gè)解碼器,但不是任何遙控器都能解的,只能自動(dòng)識(shí)別并解出23種編碼

http://bbs.lcdhome.net/read.php?tid=222321&page=1&toread=1

回復(fù)

使用道具 舉報(bào)

ID:21296 發(fā)表于 2013-1-28 17:03 | 顯示全部樓層

認(rèn)真學(xué)習(xí)

1
!!!!!

回復(fù)

使用道具 舉報(bào)

10#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:55734 發(fā)表于 2013-10-9 03:47 | 顯示全部樓層
看看學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:55611 發(fā)表于 2013-10-12 09:47 | 顯示全部樓層
好好學(xué)習(xí),天天向上
回復(fù)

使用道具 舉報(bào)

ID:52286 發(fā)表于 2013-10-13 22:20 | 顯示全部樓層
#在這里快速回復(fù)#真是不錯(cuò)的資料
回復(fù)

使用道具 舉報(bào)

14#
無(wú)效樓層,該帖已經(jīng)被刪除
ID:34185 發(fā)表于 2014-11-30 07:19 | 顯示全部樓層
好東西,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:69860 發(fā)表于 2014-12-6 11:05 | 顯示全部樓層
匯編的大神,膜拜啊
回復(fù)

使用道具 舉報(bào)

ID:72947 發(fā)表于 2015-1-31 21:53 來(lái)自觸屏版 | 顯示全部樓層
收藏了
回復(fù)

使用道具 舉報(bào)

ID:72047 發(fā)表于 2015-3-1 17:35 | 顯示全部樓層
太厲害 ...
回復(fù)

使用道具 舉報(bào)

ID:77205 發(fā)表于 2015-4-16 23:50 | 顯示全部樓層
好樣的@@@@@@@@@@@@@@@@@@
回復(fù)

使用道具 舉報(bào)

ID:28571 發(fā)表于 2015-4-17 21:59 | 顯示全部樓層
好東西,學(xué)習(xí)一下,謝謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品在线免费观看 | 久久精品97 | 成人日韩 | 亚洲性视频网站 | 99reav| 亚洲毛片在线观看 | 成人国产精品色哟哟 | 国产欧美在线观看 | 亚洲成人一级 | 国产精品久久久一区二区三区 | 国产目拍亚洲精品99久久精品 | 国产一区影院 | 国产一区91精品张津瑜 | 亚洲精品视频在线看 | 91国在线高清视频 | 日韩靠逼 | 99精品视频在线 | 人人做人人澡人人爽欧美 | 午夜在线精品 | 国产一区二区三区在线免费 | caoporn国产精品免费公开 | 午夜精品一区二区三区在线观看 | 国产一区久久久 | 亚洲一区二区av | 欧美精品一区二区三区在线播放 | 天天操一操 | 在线播放亚洲 | 九九亚洲| 久久精品色欧美aⅴ一区二区 | 亚洲精品久久久久久首妖 | 亚洲精品高清视频在线观看 | 欧美精品一区二区三区在线播放 | 国产中文字幕在线观看 | 国产精品久久久久久二区 | 中文字幕不卡在线88 | 成人亚洲视频 | 天天干天天操天天射 | 午夜视频网站 | 成人免费看片 | 日韩福利视频 | 国产精品国产三级国产a |