(玩電子) 電子技術學(xue)習與研(yan)xin)/div>
當前(qian)位(wei)置︰單(dan)片機教程網 >> MCU設計實例 >> 瀏覽文章

一分快三官网

作者:佚名   來(lai)源:本站(zhan)原創   點擊數:x  更新時間︰2020年02月10日   【字(zi)體︰大(da) 中(zhong)

    首(shou)先ren)狄幌想(xiang)寫這(zhe)個帖子 看(kan)到論(lun)壇上(shang)有(you)關于遙控器(qi)方面的(de)帖子 但是都沒(mei)有(you)很詳細的(de)介(jie)紹 而(er)且是已(yi)經有(you)完整的(de)波形 僅僅介(jie)紹了解碼部分 而(er)沒(mei)有(you)分析波形數據方面的(de)介(jie)紹 ,因(yin)此有(you)了寫一篇(pian)完整的(de)關于遙控器(qi)方面的(de)文章的(de)沖動   此貼對新手可能有(you)點困難不(bu)過 不(bu)要(yao)緊 我會以最(zui)通俗的(de)方式來(lai)解釋(shi) 如果有(you)不(bu)明白的(de) 建議去(qu)看(kan)看(kan)書 自己努(nu)力 沒(mei)有(you)不(bu)可能的(de)事  別(bie)人(ren)能做到 你也一定行,關于紅外遙控的(de)基礎理論(lun),大(da)家可以到這(zhe)個貼去(qu)看(kan)下http://www.51hei.com/mcu/184.html,里面有(you)詳細的(de)介(jie)紹。在這(zhe)里我僅把(ba)一些關鍵的(de)帶出來(lai) 關于硬(ying)件電路 那麼拋開那麼多文字(zi)介(jie)紹 最(zui)後意思(si)就是說 你家里的(de)遙控板 也就是發射(she)部分 是qian)ba)所有(you)的(de)封裝好了的(de)  比如鍵盤矩陣(zhen)、編碼調制、LED紅外發送器(qi) 等等 那麼接受部分 SM0038 3個腳(jiao) 一個腳(jiao)地 一個腳(jiao)電源 一個腳(jiao)信號腳(jiao) 接到 單(dan)片機隨便個P口上(shang)(此處是P3。6) OK  硬(ying)件部分zhi)透愣 說比換huai)有(you)數碼管(guan)顯示(shi) ,這(zhe)些肯定不(bu)用說de)愣寄芨愣 桑 藝zhe)剛好有(you)一塊51hei單(dan)片機學(xue)習板是在www.51hei.com的(de)論(lun)壇買(mai)的(de),這(zhe)些東東都有(you),所以就不(bu)用自己去(qu)搭電路那麼麻煩(fan)了),那麼 我們想(xiang) 我們qian)匆幌亂?匕大(da)家看(kan)到 有(you)個燈閃(shan)了一下 然後OVER 那麼 我們現在要(yao)做的(de)就是在燈閃(shan)了那一下之(zhi)後讓 單(dan)片機來(lai)讀它的(de)鍵碼 然後不(bu)同的(de)鍵碼來(lai)干(gan)不(bu)同的(de)事 ,本文 是向大(da)家解釋(shi)一種方法  當然如果你知道遙控器(qi)的(de)編碼 那麼 我想(xiang)寫解碼程序(xu)應該是很簡單(dan)的(de)事 而(er)我的(de)意思(si)是說我們現在從0開始  拿(na)到任(ren)何一種遙控板 那怕不(bu)知道它的(de)型號 但是 大(da)家想(xiang) 即使它什(shi)麼型號都沒(mei)寫 但是qian)匆幌虜bu)同的(de)鍵 它的(de)發射(she)的(de)脈沖 肯定不(bu)一樣 無非就是引導碼 然後 地址碼 鍵碼 驗證碼 因(yin)為不(bu)同的(de)遙控板 它所定義的(de)規則不(bu)一樣 (這(zhe)里說一點題外話 其實在讀出波型後 大(da)家就可以看(kan)出這(zhe)個遙控板最(zui)開始設計時的(de)人(ren)的(de)意思(si) 或(huo)者說考慮 它的(de)這(zhe)個設計方式是否是最(zui)好的(de) 是否穩定 是否具有(you)通用性 或(huo)者說 日本的(de)和(he)中(zhong)國的(de)設計師 在設計時他們所考慮的(de) 名牌和(he) 雜牌的(de) 他們在設計時所考慮的(de) 等等 這(zhe)些其實也是件很有(you)意思(si)的(de)事 就像偷(tou)窺到一個人(ren)的(de)內心(xin)世(shi)界(jie)一樣 扯遠了 。。--)


   下面我們來(lai)說說本問shi)li)用51單(dan)片機軟件解密(mi)的(de)方法 首(shou)先大(da)家看(kan)了我剛才(cai)貼出來(lai)的(de)連(lian)接 應該知道了 編碼無非就是低(di)電平高電平。但是我們知道一點 它肯定是有(you)規律的(de) (這(zhe)里申明一下 如果你能找到它的(de)PDF 上(shang)面寫好了它的(de)波形 或(huo)者你在網上(shang)找到了前(qian)人(ren)把(ba)某型號的(de)遙控器(qi)的(de)波形已(yi)經分析出來(lai)了那麼你完全可以把(ba)這(zhe)篇(pian)帖子當水貼 跳(tiao)過 我這(zhe)里的(de)目的(de)是想(xiang)通過一種方法 一種 完整的(de)分析方法  就像醫生拿(na)起手術刀 解開它的(de)內部 看(kan)常(chang)人(ren)所不(bu)能看(kan)到的(de)東西(xi) 最(zui)終能把(ba)一種很通用的(de)東西(xi) 把(ba)它的(de)內部原理能夠完全的(de)理解 一切從簡單(dan)學(xue)起 做起 以後凡(fan)是涉及到 這(zhe)種 類(lei)型tou)de)東西(xi) 相信你會更加自信 而(er)不(bu)是只滿足(zu)做一個課程設計 一個老(lao)師布置的(de)作業 扯遠了。。  )
    具體我們怎麼記(ji)錄這(zhe)種規律  很簡單(dan) 我們用定時器(qi)把(ba)每個高低(di)電平的(de)時間記(ji)下來(lai) 然後顯示(shi)在數碼管(guan)上(shang) 設置2秒顯示(shi)一個數據 然後用EXCLE記(ji)錄下來(lai)
再用鉛筆 或(huo)者 隨便什(shi)麼畫圖軟件 把(ba)它的(de)波形wei) 隼lai) 標上(shang) 低(di)電平 高電平 再對比下不(bu)同的(de)鍵的(de)區別(bie) 一切xin)突huo)然開朗了
 現在舉 實際的(de)例子
萬(wan)能遙控板大(da)家應該都知道吧

此主題相關圖片如下︰he)計04.jpg

隨便去(qu)那都能買(mai)到 幾塊錢(qian) 左右(you) 安上(shang)電池 設置好型號(這(zhe)里例子設置的(de)是長(chang)虹 如果用家里的(de)遙控板 那麼不(bu)用設置了 )
 單(dan)片機上(shang)電 SM0038接好
  關鍵程序(xu)如下 ︰(在這(zhe)里我想(xiang)鼓勵下大(da)家 不(bu)要(yao)一想(xiang)到程序(xu)就是完整的(de) 可以直接燒進去(qu) 看(kan)結果的(de) 其實 我上(shang)個帖子you)菜倒你能看(kan)程序(xu) 看(kan)到關鍵的(de)核心(xin)代碼 那麼說明你已(yi)經進步(bu)了 能找出其中(zhong)的(de)關鍵代碼 其他比如SM0038的(de)接口 數碼管(guan)顯示(shi)的(de)接口 等等 自己加上(shang)去(qu)就行了 這(zhe)段(duan)程序(xu) 的(de)結果是最(zui)終把(ba) 脈沖波的(de)個數 和(he)每個高低(di)電平的(de)時間數 放(fang)在寄存器(qi)里 那麼既然你要(yao)做的(de)就是 用自己手邊的(de)單(dan)片機 把(ba)寄存器(qi)的(de)值(zhi)顯示(shi)到 數碼管(guan)上(shang) 把(ba)數據記(ji)錄下來(lai) 然後分析 找出規律 得出你想(xiang)要(yao)的(de)結果 在這(zhe)個過程中(zhong) 我相信反是喜bu)陡闋┬yan)的(de) 都會享受這(zhe)個過程   )               
          mov r5,#0            ;用于記(ji)錄保存的(de)時間值(zhi)的(de)個數
           mov r1,#bmhcq    ;高低(di)電平寬度值(zhi)緩沖區

           dec r1
           jb   p3.6,$          ;等待變低(di) , 即等待按鍵
next:      setb tr1             ;啟動定時器(qi)1
           jnb p3.6,$   ;  等待變高,以測量低(di)電平時間寬度
           clr tr1      ;關閉(bi)定時器(qi)1                             ;1US
           inc r5       ;時間值(zhi)個數加1                           ;1
           inc r1                                                ;1
           mov @r1,th1  ;存低(di)電平時間值(zhi) ,先存高8位(wei),後存低(di)8位(wei)   ;2US
           inc r1                              ;1
           mov @r1,tl1                     ;2
           mov th1,#0   ;重賦初值(zhi)     ;2
           mov tl1,#13  ;13為停止T1到重啟T1經過的(de)時間     ;2
           setb tr1     ;重新啟動定時器(qi)    ;1
           jb p3.6,$    ;等待變低(di)
           clr tr1      ;關閉(bi)定時器(qi)1    ;1
           inc r5                              ;1
           inc r1                             ;1
           mov @r1,th1  ;存高電平時間值(zhi)   ;2
           inc r1                        ;1
           mov @r1,tl1              ;2
           mov th1,#0   ;重賦初值(zhi)    ;2
           mov tl1,#15  ;15為停止T1到重啟T1經過的(de)時間    ;2
           ajmp next    ;循環檢測,直到T1在遙控器(qi)無鍵按下時溢(yi)出時產(chan)生中(zhong)斷   ;2
           ajmp $

;-----------------------------------------
 ;定時器(qi)1中(zhong)斷程序(xu)
 ;在遙控器(qi)無鍵按下時產(chan)生中(zhong)斷,便依lai)謂jiang)BMHCQ中(zhong)的(de)高低(di)電平時間值(zhi)轉換為BCD碼並顯示(shi)出來(lai)
;-----------------------------------------
t1zd:
          setb tr0       ;啟動T0
          clr tr1        ;關閉(bi)T1
          setb et0       ;T0開中(zhong)斷
          mov a,r5
          mov r2,a
          mov r3,#0
          lcall hextoxcq
          lcall display
          jb yszt,$           ;延(yan)時一段(duan)時間,以便記(ji)錄顯示(shi)的(de)時間值(zhi)
          setb yszt
          mov r0,#bmhcq
dispnext: mov a,@r0           ;從BMHCQ中(zhong)依lai)穩﹞鍪奔渲zhi)(16位(wei))調BTOD子程序(xu)將(jiang)其轉換為5位(wei)BCD碼並放(fang)入XCQ中(zhong)再調顯示(shi)子程序(xu)顯示(shi)
          mov r3,a  ;取高8位(wei)
          inc r0
          mov a,@r0
          mov r2,a   ;取低(di)8位(wei)
          inc r0
          ;lcall BtoD      ;將(jiang)高電平或(huo)低(di)電平時間值(zhi)轉為BCD碼放(fang)于XCQ中(zhong)
          lcall HEXtoXCQ   ;將(jiang)高電平或(huo)低(di)電平時間值(zhi)轉為十六進制的(de)LED碼放(fang)于XCQ中(zhong)
          lcall display   ;顯示(shi)
          cpl p2.5        ;改變批示(shi)燈的(de)狀態,以此說明顯示(shi)內容的(de)改變
          jb    yszt,$    ;延(yan)時,以便抄(chao)錄時間值(zhi)
          setb  yszt
          djnz r5,dispnext ;獲取的(de)時間值(zhi)沒(mei)顯示(shi)完則繼續
          sjmp $           ;顯示(shi)完畢(bi),在此踏步(bu)
          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                         

;---------------------------------------------
;將(jiang)存于R3R2中(zhong)高電平或(huo)低(di)電平時間值(zhi)轉為BCD碼放(fang)于XCQ中(zhong)
;---------------------------------------------
BtoD:
         push 00h
         mov r0,#BCD
         mov r4,#3
bd0:     mov @r0,#0       ;BCD緩沖區清0
         inc r0
         djnz r4,bd0
         mov r6,#16
bd1:     clr c            ;將(jiang)R3R2中(zhong)的(de)16位(wei)二進制值(zhi)轉換為三(san)字(zi)節BCD碼存入BCD緩沖區中(zhong)
         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      ;將(jiang)轉換結果從BCD緩沖中(zhong)存入XCQ中(zhong)
         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

 

通過上(shang)面的(de)程序(xu)我們讀出了按下一個鍵後的(de)編碼的(de)本質的(de)東西(xi)
  那麼動手把(ba) 圖畫下來(lai) 找規律 解碼 
我把(ba)我例子長(chang)虹解碼後的(de)波形圖 發出來(lai)

此主題相關圖片如下︰01.jpg 點擊圖片放(fang)大(da)

 01。JPG 是脈沖開始時所有(you)鍵前(qian)8個完全一樣的(de)高低(di)脈沖


此主題相關圖片如下︰02.jpg

02。JPG 大(da)家注意看(kan)按不(bu)同的(de)鍵 中(zhong)間只是有(you)3個脈沖在變化 是EXCLE的(de) W列-AC列 而(er)這(zhe)3位(wei)數值(zhi)就是我們解碼的(de)關鍵 01。JPG 中(zhong)8位(wei)數 大(da)家應該看(kan)出 所有(you)鍵都是一樣的(de)11100010 後面02。JPG中(zhong)我們qian)ba)鍵碼整理出來(lai)就是 
按1鍵 00000000  00H
按2鍵 00010000  10H
按3鍵 00001000  08H
按4鍵 00011000  18H
按5鍵 。。。。。
後面就不(bu)寫了
為了大(da)家清晰可見 我把(ba)畫出的(de)最(zui)後的(de)波形圖03。JPG 貼出來(lai) 大(da)家看(kan)下規律 

此主題相關圖片如下︰03.jpg 點擊圖片放(fang)大(da)

然後我們 來(lai)分析應該怎麼解碼 我相信到了這(zhe)一步(bu)應該很簡單(dan)了吧 比如在這(zhe)個例子中(zhong) 我們發現 後面的(de)鍵碼改變的(de)部分完全是重復
 那麼為什(shi)麼完全可以不(bu)去(qu)讀後面的(de)碼 只讀前(qian)面的(de)16位(wei)的(de)脈沖 放(fang)在寄存器(qi)中(zhong) 再用比較指(zhi)令 跳(tiao)轉 下面是針對這(zhe)個波形圖的(de)解碼程序(xu)  相信大(da)家已(yi)經能用自己手中(zhong)的(de)利(li)器(qi) 把(ba)它搞定了
寫到這(zhe)里 我覺得很疑惑 感xin)踝約好mei)能把(ba)具體問題簡單(dan)化  很多東西(xi)還(huai)是要(yao)*大(da)家自己去(qu)消化理解了
  程序(xu)看(kan)不(bu)懂。?那麼OK  去(qu)翻指(zhi)令 查(cha)書 一條一條看(kan)吧  程序(xu)我敢保證都是 編譯通過的(de)
下面是解碼程序(xu)的(de)關鍵代碼 ︰ 

DYKJZ:     JB   P3.6,$

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

           AJMP JZPD
NO:      LJMP  DYKJZ
            RET
 
 

JZPD:    CJNE A,#09H,JZ1  ;鍵碼為09H嗎(ma)?
            AJMP KAIS            ;鍵碼為09H 轉開始程序(xu)()

JZ1:                                ;不(bu)為09H 轉最(zui)開始 等待下一次遙控器(qi)按鍵到來(lai)
            AJMP DYKJZ      
            RET
KAIS︰ ;放(fang)你需要(yao)執行的(de)代碼 
           ;比如 點亮一個燈 給單(dan)片機接上(shang)串口   用單(dan)片機控制電腦的(de)打開 放(fang)音樂。等等 
           ;這(zhe)些不(bu)屬(shu)于本問討論(lun)的(de)範duan)有(you)興(xing)趣的(de)可以自己擴展
        RET
;-----------------------
  ;核心(xin)解碼代碼子程序(xu)
;------------------------
YKJM︰
       

           PUSH         PSW
           PUSH         02H
           PUSH         06H
           PUSH         07H
           PUSH         B
           MOV          B,#0FFH
           JNB          TF1,JMCW         ;通過T1從0開始定時到溢(yi)出來(lai)避開遙控器(qi)的(de)重發碼 ,也就是說在讀了一個遙控按鍵後
           CLR          TF1                   ;到少要(yao)等到T1從0開始定時到溢(yi)出才(cai)能讀取第二個按鍵


;引導碼正確時執行以下代碼
        ;   CLR          YKBZ              ;遙控標志(zhi)清0
JM21:
           MOV          R2,#16           ;每kan)窩 範位(wei)碼
           MOV          R6,#0             ;存放(fang)16位(wei)碼中(zhong)的(de)低(di)8位(wei)
           MOV          R7,#0             ;存放(fang)16位(wei)碼中(zhong)的(de)高8位(wei)
JM3:
           JNB          P3.6,$             ;等待低(di)電平結束,不(bu)管(guan)其寬度,因(yin)為是通過高電平的(de)寬度來(lai)區分0(約為0.5ms)和(he)1(約為1.6ms)
           MOV          TH1,#0
           MOV          TL1,#0
           SETB         TR1               ;啟動T1,統計高電平的(de)寬度
           JB           P3.6,$
           CLR          TR1
    MOV   A,TH1
           CJNE         A,#2,JM4      ;若(ruo)高電平寬度值(zhi)大(da)于2,則說明此高電平為寬脈沖(1),否則為窄(zhai)脈沖(0)
JM4:       CPL          C                 ;當TH1的(de)值(zhi)大(da)于2時,C=0,小于2時,C=1
           MOV          A,R7
           RRC          A
           MOV          R7,A
           MOV          A,R6
           RRC          A
           MOV          R6,A
           DJNZ         R2,JM3          ;連(lian)讀16位(wei),先讀的(de)為低(di)位(wei),後讀的(de)為高位(wei),高8位(wei)(數據碼)存于R7中(zhong),低(di)8位(wei)(地址碼)存于R6中(zhong)
           MOV          A,R6
           CJNE         A,#47H,JMCW     ;判斷xi)?仿朧欠裎7H,不(bu)是轉出錯(cuo)返回
           MOV          A,R7            ;若(ruo)地址碼正確,則R7中(zhong)便為數據碼
           mov          r1,#jzh
           mov          @r1,A
           LJMP         JMFH
JMCW:      MOV          A,B
JMFH:      CLR          TF1            ;T1的(de)溢(yi)出標志(zhi)清0
           MOV          TH1,#0          ;為T1設定初值(zhi)並啟動它
           MOV          TL1,#0          ;以此來(lai)避免對同一按鍵讀兩次(避開遙控器(qi)的(de)重發代碼)
           SETB         TR2
           POP          B
           POP          07H
           POP          06H
           POP          02H
           POP          PSW
           RET                          ;此時,若(ruo)引導碼、地址碼、鍵值(zhi)碼和(he)鍵值(zhi)反碼中(zhong)有(you)一個有(you)問題,A中(zhong)便為錯(cuo)誤代碼,否則,A中(zhong)便為所按鍵之(zhi)鍵值(zhi)碼

 文章寫完了。希望(wang)能對大(da)家有(you)少許的(de)幫助 覺得有(you)用就拿(na)去(qu)研(yan)xin)肯擄傘Wzui)後放(fang)上(shang)完整的(de)EXCLE 數據分析表 和(he) 整理出的(de)波形圖 大(da)家看(kan)不(bu)清楚的(de)下載後看(kan)完整的(de)圖
 “要(yao)發只發精品   把(ba)最(zui)好的(de)給大(da)家”
[ 原 創 ] Suse haozi
2009.5.7 15:55
原創作品轉載請保留(liu)本文鏈接

一分快三官网

一分快三官网 | 下一页