機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
HT6221/2解碼成標(biāo)準(zhǔn)的鍵值
HT6221/2解碼成標(biāo)準(zhǔn)的鍵值
 更新時(shí)間:2009-12-23 16:15:01  點(diǎn)擊數(shù):0
【字體: 字體顏色
一.HT6221遙控器芯片簡(jiǎn)介
1.  特征
           * 工作電壓: 1.8V~3.5V
                  * Dout輸出38KHz
    * 最小發(fā)射字: 一個(gè)字
                  * 一個(gè)455KHz的陶瓷或晶體
    * 16位地址碼
                  * 8位數(shù)據(jù)碼
                  * ppm代碼方式
* 最大活動(dòng)鍵     HT6221: 32鍵
HT6222: 64鍵
 
2. 應(yīng)用
    * 電視和錄像錄音機(jī)控制器
    * 夜盜警報(bào)系統(tǒng)
    * 煙火警報(bào)系統(tǒng)
    * 車門(mén)控制器
    * 汽車警報(bào)系統(tǒng)
    * 安全系統(tǒng)
    * 其它遙控系統(tǒng)
 
3. 概述
HT6221/HT6222能編碼16位地址碼和8位數(shù)據(jù)碼, HT6221/HT6222包含32鍵(K1~K32)和64鍵(K1~K64)
 
4. 引腳圖
5. 方框圖
6.引腳說(shuō)明 
引腳號(hào)
引腳名稱
I/0
描述
1~6
R3~R8
輸入
鍵盤(pán)行控制, 高電平有效
7
DOUT
輸出
串行數(shù)據(jù)輸出引腳, 38KHz發(fā)射頻率
8
VDD
輸入
1.8V~3.5V
9
DT
輸入
最重要數(shù)據(jù)位(DT)代碼設(shè)置
10
X2
輸出
455KHz振蕩器輸出
11
X1
輸入
455KHz振蕩器輸入
12
VSS
輸入
13
LED
輸出
發(fā)射輸出
14~21
C8~C1
輸入/輸出
鍵盤(pán)列控制
22
AIN
輸入
低8位地址碼輸入
23~24
R1~R2
輸入
鍵盤(pán)行控制, 高電平有效
 
 
7. 內(nèi)部連接應(yīng)用電路
二.代碼的特征
1. HT6221鍵碼的形成
當(dāng)一個(gè)鍵按下超過(guò)36ms,振蕩器使芯片激活,如果這個(gè)鍵按下且延遲大約108ms,這108ms發(fā)射代碼由一個(gè)起始碼(9ms),一個(gè)結(jié)果碼(4.5ms),低8位地址碼(9ms~18ms),高8位地址碼(9ms~18ms),8位數(shù)據(jù)碼(9ms~18ms)和這8位數(shù)據(jù)的反碼(9ms~18ms)組成。如果鍵按下超過(guò)108ms仍未松開(kāi),接下來(lái)發(fā)射的代碼(連發(fā)代碼)將僅由起始碼(9ms)和結(jié)束碼(2.5ms)組成。
2.  代碼格式(以接收代碼為準(zhǔn),接收代碼與發(fā)射代碼反向)
 
①位定義
②單發(fā)代碼格式
③連發(fā)代碼格式
注:代碼寬度算法:    16位地址碼的最短寬度:1.12×16=18ms
16位地址碼的最長(zhǎng)寬度:2.24ms×16=36ms
易知8位數(shù)據(jù)代碼及其8位反代碼的寬度和不變:(1.12ms+2.24ms)×8=27ms
∴32位代碼的寬度為(18ms+27ms)~(36ms+27ms)
 
 
三.解碼方法及軟件說(shuō)明
1.解碼的關(guān)鍵是如何識(shí)別“0”和“1”,從位的定義我們可以發(fā)現(xiàn)“0”、“1”均以0.56ms的低電平開(kāi)始,不同的是高電平的寬度不同,“0”為0.56ms,“1”為1.68ms,所以必須根據(jù)高電平的寬度區(qū)別“0”和“1”。如果從0.56ms低電平過(guò)后,開(kāi)始延時(shí),0.56ms以后,若讀到的電平為低,說(shuō)明該位為“0”,反之則為“1”,為了可靠起見(jiàn),延時(shí)必須比0.56ms長(zhǎng)些,但又不能超過(guò)1.12ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此。1.12ms+0.56ms)/2=0.84ms最為可靠,一般取0.84ms左右均可。
2.根據(jù)碼的格式,應(yīng)該等待9ms的起始碼和4.5ms的結(jié)果碼完成后才能讀碼。
3.從上述兩點(diǎn),我們可得到解碼程序的流程圖。
這樣接收到的僅僅是普通的代碼,要得到標(biāo)準(zhǔn)的鍵值,還必須進(jìn)行代碼識(shí)別和代碼轉(zhuǎn)換,下面是從代碼接收到獲得標(biāo)準(zhǔn)值的子程。
 
KREM;與接收頭相連的I/O口
1AH,1BH,1CH,1DH;存放代碼的4個(gè)連續(xù)單元
YAO_KONG:         CLR               EA
                            JNB               KREM,REMOT1    
SJMP            REM_BAK      ;平時(shí)KREM為高電平,所以當(dāng)KREM=1時(shí),
;表示無(wú)鍵按下,應(yīng)立即返回
 
REMOT1:              JNB               KREM,$         ;等待9ms的起始碼發(fā)送完     
MOV             R2,#32           ;32表示代碼共32位,也可以送24,這樣
;接收到的24位碼將不包括數(shù)據(jù)代碼的
                                               ;反代碼   
;-----------------------------------------
;代碼接收
BYTE1:                 MOV             R3,#250
BYTE2:                 MUL              AB                 ;延時(shí)約6ms,可以稍長(zhǎng)或稍短,但不能
;小于4.5ms,也不能太長(zhǎng)。太長(zhǎng)連擊時(shí)
;將影響程序運(yùn)行速度
JNB               KREM,BYTE3;
DJNZ            R3,BYTE2      ;由于結(jié)果碼為4.5ms,如果小于4.5ms,
             ;結(jié)果碼未發(fā)送完,讀得的碼值將出錯(cuò)
BYTE3:                 JNB               KREM,$         ;等待高電平,保證讀每一位的起點(diǎn)一致
;-----------------------------------------------
MOV             R3,#150
DJNZ            R3,$                     ;延時(shí)0.9ms,延時(shí)范圍為0.56ms~1.12ms
;----------------------------------------
MOV             C,KREM
MOV             R3,#4
MOV             R0,#1DH
BYTE4:                 MOV             A,@R0
RLC                     A
MOV             @R0,A
DEC                     R0
DJNZ            R3,BYTE4
DJNZ            R2,BYTE1
;至此32位代碼已全部接收完成,并存放在1AH~1DH中,
;依次為低8位地址碼,高8位地址碼,8位數(shù)據(jù)碼,
;8位數(shù)據(jù)的反代碼
;----------------------------------------------------
;代碼識(shí)別
                MOV             A,1AH
XRL                     A,#03             ;3為地址低8位的值,對(duì)于不同的遙控器
;有不同的地址值    
JNZ               REM_BAK
MOV             A,1BH
XRL                     A,#0FCH        ;FCH為地址高8位的值       
JNZ               REM_BAK
MOV             A,1CH
CPL               A
XRL                     A,1DH           ;如果地址碼不對(duì)或接收到的數(shù)據(jù)碼兩單元
;不反向均當(dāng)錯(cuò)碼,本程序當(dāng)無(wú)鍵按下處理
                JNZ               REM_BAK
;--------------------------------------------
;代碼轉(zhuǎn)換
MOV             R2,#21           ;21為遙控器面板按鍵數(shù)
MOV             DPTR,#TAB_REMOT
LOOKUP_1:                 MOV             A,R2
MOVC           A,@A+DPTR
XRL                     A,1CH
JZ                 REM_BAK0
DJNZ            R2,LOOPUP_1
REM_BAK0:                 MOV             A,R2              ;R2中的值即為標(biāo)準(zhǔn)的鍵值
SJMP            END_YK
REM_BAK:            CLR               A
END_YK:              SETB             EA
RET
;=====================================================================
;代碼轉(zhuǎn)換表,表中的值為面板上相應(yīng)鍵的代碼
;對(duì)于不同的遙控器,表中的值應(yīng)做相應(yīng)的改變
TAB_REMOT:
        DB          00H
;                           VCD       DVD       AUX       TUNER          ST/M      TSV-4     6
DB         0C0H,     0D0H,     0E8H,     0F0H,            0E0H,     0C8H
;                           UP          DOWN   FM/AM   MEMORY      A/B                       11
DB         00H,              20H,              48H,              68H,                     58H                 
 
;                           1            2            3            4                   5            6            17
        DB          0D8H,     0F8H,     40H,              60H,                     50H,              70H
;                           AUTO     VOL+     VOL-      MUTE                                        21
        DB          28H ,      10H ,      30H ,      78H
;=================================================================
說(shuō)明:此程序可在需要的地方任意調(diào)用(LCALL YA0_KONG),返回后,累加器中的值即為標(biāo)準(zhǔn)的鍵值,如果A=0則不予處理(可能原因有:無(wú)鍵按下,錯(cuò)碼或非本機(jī)所用的遙控器的操作),程序中的延時(shí)均以4MHz的晶振為準(zhǔn),若用不同的晶振,只需改變相應(yīng)值,符合注釋中的延時(shí)時(shí)間即可。
 
4.  從上述解碼過(guò)程我們不難發(fā)現(xiàn),對(duì)于連發(fā)代碼,解碼得的值1AH~1DH全為0FFH,所以軟件如果需要處理連擊,我們只須在代碼識(shí)別前判斷1AH~1DH是否全為0FFH,是則有連擊現(xiàn)象,這樣建一個(gè)連擊標(biāo)志,再返回,軟件根據(jù)這個(gè)標(biāo)志,結(jié)合上一次讀得的鍵值便可進(jìn)行相應(yīng)的連擊操作,直到按鍵松開(kāi),連擊標(biāo)志才被清除。具體操作如下:
在代碼識(shí)別前插入
MOV             A,1AH
ANL              A,1BH
ANL              A,1CH
ANL              A,1DH
XRL                     A,#0FFH
JNZ               DAN_JI
SETB             FLAG_LIANJI              ;建連擊標(biāo)志
SJMP            END_YK
DAN_JI:                NOP
 
另外子程的最后幾條指令改成
REM_BAK0:          MOV             A,R2
SJMP            END_YK0
REM_BAK:            CLRA
END_YK0:            CLR               FLAG_LIANJI              ;清連擊標(biāo)志
END_YK:              SETB             EA
四.應(yīng)用實(shí)例
讀者也許會(huì)問(wèn),只要解得遙控器的代碼就可以了,轉(zhuǎn)換成1~n標(biāo)準(zhǔn)值有什么優(yōu)點(diǎn)呢?看了后面的簡(jiǎn)單實(shí)例,不難發(fā)現(xiàn)它有如下好處:
①.       在應(yīng)用系統(tǒng)中,帶遙控器的儀器,一般都帶按鍵,而且二者功能相同,轉(zhuǎn)換成標(biāo)準(zhǔn)值后,遙控按鍵散轉(zhuǎn)表格可以與鍵盤(pán)散轉(zhuǎn)表格復(fù)用,這樣能節(jié)省一定的空間。
②.       HT622 1/2最大可支持32或64個(gè)按鍵,一般系統(tǒng)只使用其中的一部分,這樣可能會(huì)使遙控器按鍵的代碼毫無(wú)規(guī)律,為了處理這樣的代碼,軟件人員要么想方設(shè)法通過(guò)復(fù)雜的算法找出那些代碼不是規(guī)律的規(guī)律,要么干脆不管那么多,排列一大堆“CJNE A,#DATA,NEXT”指令判斷,使鍵值判斷變得拖沓冗長(zhǎng)。使用前述方法則清楚明了,簡(jiǎn)單易行。
③.       對(duì)于不同的遙控器,本程序只要改變代碼轉(zhuǎn)換表即可,對(duì)再開(kāi)發(fā)大有益處。
 
1.實(shí)例電路
程序清單及說(shuō)明:
KREM        EQU     P0.0
L1      EQU     P1.0
L2      EQU     P1.1
L3      EQU     P1.2
L4      EQU     P1.3
L5      EQU     P1.4
L6      EQU     P1.5
L7      EQU     P1.6
L8      EQU     P1.7
L9      EQU     P3.4
L10     EQU     P3.5
L11     EQU     P3.6
L12     EQU     P2.0
L13     EQU     P2.1
L14     EQU     P2.2
L15     EQU     P2.3
L16     EQU     P2.4
L17     EQU     P2.5
L18     EQU     P2.6
L19     EQU     P2.7
L20     EQU     P0.6
L21     EQU     P0.5
;-----------------------------------------
 
 
ORG     0000H
AJMP        START0
ORG     0030H
START0:         MOV     SP,#60H
START:          ACALL   YAO_KONG            ;調(diào)用解碼子程
JZ      START
;----------------------------------------
RL      A
MOV     DPTR,#TAB_KEY
JMP     @A+DPTR
;---------------------------------------
TAB_KEY:            AJMP        START
AJMP        KEY1
AJMP        KEY2
AJMP        KEY3
AJMP        KEY4
AJMP        KEY5
AJMP        KEY6
AJMP        KEY7
AJMP        KEY8
AJMP        KEY9
AJMP        KEY10
AJMP        KEY11
AJMP        KEY12
AJMP        KEY13
AJMP        KEY14
AJMP        KEY15
AJMP        KEY16
AJMP        KEY17
AJMP        KEY18
AJMP        KEY19
AJMP        KEY20
AJMP        KEY21
;-------------------------------------
KEY1:           ACALL   CLEAR_IO
SETB        L1
AJMP        START
;-------------------------------------
KEY2:           ACALL   CLEAR_IO
SETB        L2
AJMP        START
;------------------------------------
KEY3:           ACALL   CLEAR_IO
SETB        L3
AJMP        START
;-----------------------------------
KEY4:           ACALL   CLEAR_IO
SETB        L4
AJMP        START
;----------------------------------
KEY5:           ACALL   CLEAR_IO
SETB        L5
AJMP        START
;----------------------------------
KEY6:           ACALL   CLEAR_IO
SETB        L6
AJMP        START
;----------------------------------
KEY7:           ACALL   CLEAR_IO
SETB        L7
AJMP        START
;----------------------------------
KEY8:           ACALL   CLEAR_IO
SETB        L8
AJMP        START
;----------------------------------
KEY9:           ACALL   CLEAR_IO
SETB        L9
AJMP        START
;----------------------------------
KEY10:          ACALL   CLEAR_IO
SETB        L10
AJMP        START
;----------------------------------
KEY11:          ACALL   CLEAR_IO
SETB        L11
AJMP        START
;----------------------------------
KEY12:          ACALL   CLEAR_IO
SETB        L12
AJMP        START
;----------------------------------
KEY13:          ACALL   CLEAR_IO
SETB        L13
AJMP        START
;----------------------------------
KEY14:          ACALL   CLEAR_IO
SETB        L14
AJMP        START
;----------------------------------
KEY15:          ACALL   CLEAR_IO
SETB        L15
AJMP        START
;----------------------------------
KEY16:          ACALL   CLEAR_IO
SETB        L16
AJMP        START
;----------------------------------
KEY17:          ACALL   CLEAR_IO
SETB        L17
AJMP        START
;----------------------------------
KEY18:          ACALL   CLEAR_IO
SETB        L18
AJMP        START
;----------------------------------
KEY19:          ACALL   CLEAR_IO
SETB        L19
AJMP        START
;----------------------------------
KEY20:          ACALL   CLEAR_IO
SETB        L20
AJMP        START
;----------------------------------
KEY21:          ACALL   CLEAR_IO
SETB        L21
AJMP        START
;----------------------------------
CLEAR_IO:       MOV     P0,#0
MOV     P1,#0
MOV     P2,#0
MOV     P3,#0
RET
;------------------------------------
END
 
①    該程序是應(yīng)用“HT6221解碼成標(biāo)準(zhǔn)鍵值”的典型例子。KEY1、KEY2……KEY21分別表示不同的功能模塊,也就是說(shuō)根據(jù)解得的鍵值按照需要做具體的事。以示明顯,。這里分別用L1、L2……L21共21個(gè)發(fā)光管代替程序要做的事,當(dāng)不同的鍵按下時(shí),對(duì)應(yīng)的發(fā)光管亮,其余的管均滅。
②    如果讀者有興趣,不防一試。需要注意的是,實(shí)驗(yàn)前必須把你手上的遙控器的代碼填在代碼轉(zhuǎn)換表的相應(yīng)位置,代碼的得來(lái)不難。在“代碼識(shí)別”前設(shè)一斷點(diǎn),運(yùn)行程序,按不同的鍵,程序運(yùn)行到斷點(diǎn)停下時(shí),“1CH”單元的內(nèi)容即為當(dāng)前按鍵的代碼。同時(shí)應(yīng)該用1AH中的內(nèi)容替換程序中的低8位地址“3”,1BH中的內(nèi)容替換程序中高8位地址“0FCH”。如此做好后,便大功告成,這時(shí)有且只有你手上的遙控器可以控制發(fā)光管了。
  • 上一篇: 模擬計(jì)算器數(shù)字輸入及顯示
  • 下一篇: 沒(méi)有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1