⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8733_tp.dt

📁 Elan eKTP8733N 单片机Touch Pad驱动程序。可检测8个Touch Pad按键是否按下。在Elan公司开发环境中使用。
💻 DT
📖 第 1 页 / 共 2 页
字号:
;****************************************************************;
; TILTE:       eKTP8733 I2C TRANSMISSION DEMO CODE               ;
; FUNCTION:    eKTP8733 I2C FUNCTION                             ;
; COMPANY:     ELAN MICROELECTRONICS (SZ) LTD.                   ;
;****************************************************************;
; 该范例用eKTP8733扫描Touchpad,总共扫描3个按键. Fc: IRC 4MHz
; Key1按下,Port5输出0x01;Key2按下,Port5输出0x02;
; Key3按下,Port5输出0x03;Key4按下,Port5输出0x04;
; Key5按下,Port5输出0x05;Key6按下,Port5输出0x06;
; Key7按下,Port5输出0x08;Key8按下,Port5输出0x08;
;-----------------------------------------------------------------
            INCLUDE "ektr8730.h"
            INCLUDE "RamData.inc"
;-----------------------------------------------------------------
            ORG     0x00
            NOP
            JMP     Main
            ORG     0x0F
            LJMP    TCC_INT
            ORG     0x3F
            LJMP    TPCV_INT
            ORG     0x42
            LJMP    TPOVF_INT
            ORG     0x50
;-----------------------------------------------------------------
; TCC interrupt: 4.096ms
TCC_INT:
            BANK    0
            com		0x06
            INC     NOKeyPCNT
            BC      ISR1, TCIF
            RETI
;-----------------------------------------------------------------
; Touch pad convert interrupt
TPCV_INT:
            ; User code
            ; ...
            BANK    4
            BC      TPCR3, TPIF
            RETI
;-------------------------------------------------------------------
; Touch pad counter overflow interrupt
TPOVF_INT:
            ; User code
            ; ...
            BANK    4
            BC      TPCR3, TPOIF
            RETI
;===================================================================
Main:
            DISI
            CALL    CLEAR_SRAM
            CALL    INIT_DEVICE

main_loop:
            NOP
            ENI
            NOP
            CALL    MainReadTPVa
            ;CALL    MainStudyTP
            CALL    MainScanKey
            JMP     main_loop
;===================================================================
INIT_DEVICE:
            NOP
            BANK    0
            MOV     A, @0x00
            MOV     PORT5, A
            MOV     PORT6, A
            MOV     PORT7, A
            MOV     PORT8, A
            BANK    1
            MOV     A, @0x00
            MOV     IOC5, A
            MOV     IOC6, A
            MOV     IOC7, A
            MOV     IOC8, A
            MOV     A, @0x10
            MOV     IMR1, A         ; Enable TCC interrupt
            BANK    2
            MOV     A, @0x0D        ; TCC P --> 64
            MOV     TCCCR, A
            BANK    3
            CLR     TCC
            MOV     A, @0x1F        ; Select ekt8733, irc: 1*F
            MOV     COBS1, A
            MOV     A, @0x30        ; Select IRC 4MHz
            MOV     COBS2, A
            ;-------------------------------------------
            ; TP set
            BANK    4
            MOV     A, @0X20        ; Enable TP function, TP0 on
            MOV     TPCR1, A
            MOV     A, @0x21        ; TP detect frequency select F/8, PLL output Fr: 48MHz
            MOV     TPCR2, A        ; System frequency(Fm) is IRC 4MHz, PLL clock source select Fm/2
            MOV     A, @0x08        ; Disable TPIF/TPOIF interrupt, Touch pad read time: 4
            MOV     TPCR3, A
            MOV     A, @0x0F        ; Touch pad current: 10uA
            MOV     TPCC, A
            MOV     A, @0X01        ; Select TPEP0, other pin as IO pin
            MOV     TPEPCR0, A
            MOV     A, @0X00        ; Other pin as IO pin
            MOV     TPEPCR1, A
            MOV     TPEPCR2, A
            MOV     TPEPCR3, A
            ;-------------------------------------------
            BANK    0
            BS      Key_Tone, PWON_AD
            MOV     A, @Key_Psd_Va
            MOV     KeyPsdValue, A
            CALL    DelaySomeT
            RET
;-----------------------------------------------------------------
MainReadTPVa:
            NOP
            BANK    0
            MOV     A, DitheringR
            JBS     status, z
            DEC     DitheringR
            MOV     A, LOOSDitheringR
            JBS     status, z
            DEC     LOOSDitheringR
            CLR     TP_Psd_Flag
            ;---------------------------------------
            ; Check TP0
Main_Chk_TP0:
            BANK    4
            MOV     A, @0X20            ; TP0 switch on
            MOV     TPCR1, A
            MOV     A, @0X01            ; Select TP0, other pin as IO pin
            MOV     TPEPCR0, A
            CALL    TPVaRoutine         ; 320us * 2
            MOV     A, @TP0_NPsd_VAL
            CALL    ReleaseOldKeyVa
            MOV     A, @TP0_RlTm_VAL
            CALL    StoreRLKeyVa        ; Store the tp value currently.
            CALL    CMP_TWO_Value
;
            JBC     status, c
            BS      TP_Psd_Flag, TP0
            ;---------------------------------------
            ; Check TP1
Main_Chk_TP1:
            BANK    4
            MOV     A, @0X21            ; TP1 switch on
            MOV     TPCR1, A
            MOV     A, @0X02            ; Select TP1, Other pin as IO pin
            MOV     TPEPCR0, A
            CALL    TPVaRoutine
            MOV     A, @TP1_NPsd_VAL
            CALL    ReleaseOldKeyVa
            MOV     A, @TP1_RlTm_VAL
            CALL    StoreRLKeyVa
            CALL    CMP_TWO_Value
            JBC     status, c
            BS      TP_Psd_Flag, TP1
            ;---------------------------------------
            ; Check TP2
Main_Chk_TP2:
            BANK    4
            MOV     A, @0X22            ; TP2 switch on
            MOV     TPCR1, A
            MOV     A, @0X04            ; Select TP2, Other pin as IO pin
            MOV     TPEPCR0, A
            CALL    TPVaRoutine
            MOV     A, @TP2_NPsd_VAL
            CALL    ReleaseOldKeyVa
            MOV     A, @TP2_RlTm_VAL
            CALL    StoreRLKeyVa
            CALL    CMP_TWO_Value
            JBC     status, c
            BS      TP_Psd_Flag, TP2
            ;---------------------------------------
            ; Check TP3 
Main_Chk_TP3:
            BANK    4
            MOV     A, @0X23            ; TP3 switch on
            MOV     TPCR1, A
            MOV     A, @0X08            ; Select TP3, Other pin as IO pin
            MOV     TPEPCR0, A
            CALL    TPVaRoutine
            MOV     A, @TP3_NPsd_VAL
            CALL    ReleaseOldKeyVa
            MOV     A, @TP3_RlTm_VAL
            CALL    StoreRLKeyVa
            CALL    CMP_TWO_Value
            JBC     status, c
            BS      TP_Psd_Flag, TP3
            ;---------------------------------------
            ; Check TP4 
Main_Chk_TP4:
            BANK    4
            MOV     A, @0X24            ; TP4 switch on
            MOV     TPCR1, A
            MOV     A, @0X10            ; Select TP4, Other pin as IO pin
            MOV     TPEPCR0, A
            CALL    TPVaRoutine
            MOV     A, @TP4_NPsd_VAL
            CALL    ReleaseOldKeyVa
            MOV     A, @TP4_RlTm_VAL
            CALL    StoreRLKeyVa
            CALL    CMP_TWO_Value
            JBC     status, c
            BS      TP_Psd_Flag, TP4
            ;---------------------------------------
            ; Check TP5 
Main_Chk_TP5:
            BANK    4
            MOV     A, @0X25            ; TP5 switch on
            MOV     TPCR1, A
            MOV     A, @0X20            ; Select TP5, Other pin as IO pin
            MOV     TPEPCR0, A
            CALL    TPVaRoutine
            MOV     A, @TP5_NPsd_VAL
            CALL    ReleaseOldKeyVa
            MOV     A, @TP5_RlTm_VAL
            CALL    StoreRLKeyVa
            CALL    CMP_TWO_Value
            JBC     status, c
            BS      TP_Psd_Flag, TP5
            ;---------------------------------------
            ; Check TP6 
Main_Chk_TP6:
            BANK    4
            MOV     A, @0X26            ; TP6 switch on
            MOV     TPCR1, A
            MOV     A, @0X40            ; Select TP6, Other pin as IO pin
            MOV     TPEPCR0, A
            CALL    TPVaRoutine
            MOV     A, @TP6_NPsd_VAL
            CALL    ReleaseOldKeyVa
            MOV     A, @TP6_RlTm_VAL
            CALL    StoreRLKeyVa
            CALL    CMP_TWO_Value
            JBC     status, c
            BS      TP_Psd_Flag, TP6
            ;---------------------------------------
            ; Check TP7 
Main_Chk_TP7:
            BANK    4
            MOV     A, @0X27            ; TP7 switch on
            MOV     TPCR1, A
            MOV     A, @0X80            ; Select TP7, Other pin as IO pin
            MOV     TPEPCR0, A
            CALL    TPVaRoutine
            MOV     A, @TP7_NPsd_VAL
            CALL    ReleaseOldKeyVa
            MOV     A, @TP7_RlTm_VAL
            CALL    StoreRLKeyVa
            CALL    CMP_TWO_Value
            JBC     status, c
            BS      TP_Psd_Flag, TP7
;
            ;---------------------------------------
            JBS     Key_Tone, PWON_AD
            JMP     Main_Chk_Ret
            INC     PWON_CNT
            MOV     A, PWON_CNT
            ADD     A, @255-5
            JBC     status, C
            JMP     Main_Chk_Ret
            MOV     A, @0x20
            CALL    SwapKeyValue
            CLR     PWON_CNT
            BC      Key_Tone, PWON_AD
Main_Chk_Ret:
            RET
;-----------------------------------------------------------------
MainScanKey:
            NOP
            CLR     KeyValue
            CLR     buffer
            MOV     A, Tp_Psd_Flag
            JBC     status, z
            JMP     CheckKeyLoos
            BC      Key_Tone, SYSKEYLOOS
            ;---------------------------------------
            ; Check whether two key are Pressed.
            MOV     buffer+1, A
            MOV     A, @0x08
            MOV     buffer+2, A
RRC_Lp:
            BC      status, C
            RRC     buffer+1
            JBC     status, C
            INC     buffer
            DJZ     BUFFER+2
            JMP     RRC_Lp
            MOV     A, @255-1
            ADD     A, buffer
            JBC     status, C
            JMP     NoKey_Pressed2      ; Two key pressed, treat as no key pressed
            ;---------------------------------------
Key_Pressed:
            BC      Key_Tone, SYSKEYLOOS
            MOV     A, Tp_Psd_Flag
            SUB     A, OldKey
            JBC     status, z
            JMP     Check_Key_Up
SetNewKeyDithering:
            ; New key checked
            MOV     A, Tp_Psd_Flag
            MOV     OldKey, A
            MOV     A, @DitheringTM     ; 10
            MOV     DitheringR, A       ; 5ms * 10 = 50ms
            JMP     ScanKey_Out
Check_Key_Up:
            MOV     A, DitheringR
            JBS     STATUS, Z
            JMP     ScanKey_Out
NewKeyDown:
            BC      Key_Tone, STYKey
            BS      Key_Tone, KeyPressed
            CLR     NOKeyPCNT
            MOV     A, OldKey
            MOV     KeyValue, A
            SUB     A, OldKeyValue
            JBC     STATUS, Z           ; = 0 Skip
            JMP     NoKey_Pressed2
            ; sure new key pressed
SetOldKeyValue:
            MOV     A, OldKey
            MOV     OldKeyValue, A
            JMP     ScanKey_Out
CheckKeyLoos:
            MOV     A, OldKeyValue
            JBC     Status, z
            JMP     NoKey_Pressed
;
            JBC     Key_Tone, SYSKEYLOOS
            JMP     Check_Key_Loos_Up
            BS      Key_Tone, SYSKEYLOOS
            MOV     A, @LOOSDitheringTM ;10*5ms
            MOV     LOOSDitheringR, A
            JMP     ScanKey_Out
Check_Key_Loos_Up:
            MOV     A, LOOSDitheringR
            JBS     STATUS, Z
            JMP     ScanKey_Out
            BC      Key_Tone, SYSKEYLOOS
NoKey_Pressed:
            MOV     A, @0xF0
            AND     Port5, A
            and		port8,a
            CLR     OldKeyValue
            MOV     A, NOKeyPCNT
            ADD     A, @256-20
            JBC     Key_Tone, KeyPressed
            ADD     A, @256-75
            JBS     status, C
            JMP     NoKey_Pressed2
            BC      Key_Tone, KeyPressed
            BS      Key_Tone, STYKey
            CLR     NOKeyPCNT
NoKey_Pressed2:
            CLR     OldKey
            CLR     KeyValue
ScanKey_Out:
            MOV     A, KeyValue
            JBC     STATUS, Z           ;
            JMP     Key_Check_Ret       ; no key pressed
            CALL   Main_Key_Do
Key_Check_Ret:
            NOP
            RET
;-----------------------------------------------------------------
Main_Key_Do:
            MOV     A, @0x01
            SUB     A, KeyValue
            JBC     status, Z
            JMP     main_key1_psd   ; key1
            ;
            MOV     A, @0x02
            SUB     A, KeyValue
            JBC     status, Z
            JMP     main_key2_psd   ; key2
            ;
            MOV     A, @0x04
            SUB     A, KeyValue
            JBC     status, Z
            JMP     main_key3_psd   ; key3
            ;
            MOV     A, @0x08
            SUB     A, KeyValue
            JBC     status, Z
            JMP     main_key4_psd   ; key4
            ;
            MOV     A, @0x10
            SUB     A, KeyValue
            JBC     status, Z
            JMP     main_key5_psd   ; key5
            ;
            MOV     A, @0x20
            SUB     A, KeyValue
            JBC     status, Z
            JMP     main_key6_psd   ; key6
            ;
            MOV     A, @0x40
            SUB     A, KeyValue
            JBC     status, Z
            JMP     main_key7_psd   ; key7
            ;
            MOV     A, @0x80
            SUB     A, KeyValue
            JBC     status, Z
            JMP     main_key8_psd   ; key8
            ;-----------------------------------
main_key1_psd:
            MOV     A, @0x01
            ;OR      Port5, A
            JMP     main_key_Psd_Out
            ;-----------------------------------
main_key2_psd:
            MOV     A, @0x02
            ;OR      Port5, A
            JMP     main_key_Psd_Out
            ;-----------------------------------
main_key3_psd:
            MOV     A, @0x03 
            ;OR      Port5, A
            JMP     main_key_Psd_Out
            ;-----------------------------------
main_key4_psd:
            MOV     A, @0x04
            ;OR      Port5, A
            JMP     main_key_Psd_Out
            ;-----------------------------------
main_key5_psd:
            MOV     A, @0x05
            ;OR      Port5, A
            JMP     main_key_Psd_Out
            ;-----------------------------------
main_key6_psd:
            MOV     A, @0x06
            ;OR      Port5, A
            JMP     main_key_Psd_Out
            ;-----------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -