?? hpis.asm
字號:
*file: hpi.asm
.file "hpis.asm"
.c_mode
.copy "vc5402.inc"
* .copy "mmi5402.inc"
.ref IV_RESET
.def _init_timer0
.def _init_hpi
.def test_key
.def ISR_TIMER0
.def _GUI_KeyValue
.bss _GUI_KeyValue,1
.bss _first_press,1
.bss _add_num,1
.text
ISR_TIMER0:
PSHM AL
PSHM AH
PSHM BL
PSHM BH
PSHM AR0
PSHM AR1
PSHM AR2
STM #_first_press,AR0
STM #_GUI_KeyValue,AR1
STM #_add_num,AR2
CMPM *AR2,#20
BC T0,TC
LD *AR2,A
ADD #1h,A,B
STL B,*AR2
B T2
T0:
LD #0,A
STL A,*AR2
LD *AR1,B
BC T2,BNEQ
CALL test_key
BC T1,AEQ
LD *AR0,B
BC T1,BNEQ
STL A,*AR1
STL A,*AR0
T1:
STL A,*AR0
T2:
POPM AR2
POPM AR1
POPM AR0
POPM BH
POPM BL
POPM AH
POPM AL
POPM ST1
POPM ST0
RETE
***************************************************************************
* 函數: _init_timer0
* 目的: 初始化HPI
* 輸入: 無
* 輸出: 無
***************************************************************************
_init_timer0:
STM #0C30H,TCR
STM #50000,PRD ;1ms
STM #0,TIM
STM #0C20H,TCR
ANDM #00h,*(IMR)
; ANDM #1FFFh,*(IFR)
ORM #08H,*(IMR)
ANDM #03fh,*(PMST)
ORM #IV_RESET,*(PMST)
RSBX INTM
RET
***************************************************************************
* 函數: _init_hpi
* 目的: 初始化HPI
* 輸入: 無
* 輸出: 無
***************************************************************************
_init_hpi:
STM #0fh,GPIOCR ;configure hpi0~3 as output, hpi4~7 as input
STM #0FFh,GPIOSR ;configure hpi0~7 as high
LD #0,A
STM #_GUI_KeyValue,AR0
STL A,*AR0
STM #_first_press,AR0
STL A,*AR0
STM #_add_num,AR0
STL A,*AR0
RET
***************************************************************************
* 函數: _test_key
* 目的: 鍵盤測試
* 輸入: 無
* 輸出: A 0為無觸動
* 1~20為19個按鍵觸動
***************************************************************************
test_key:
PSHM ST0
PSHM BL
PSHM BH
LD #0,A
LD #0,B
STM #0FEh,GPIOSR ;configure hpi0 as low
NOP
NOP
NOP
NOP
;test hpi4
LD #1,B
LDM GPIOSR,A
XOR #0EEh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi5
LD #2,B
LDM GPIOSR,A
XOR #0DEh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi6
LD #3,B
LDM GPIOSR,A
XOR #0BEh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi7
LD #4,B
LDM GPIOSR,A
XOR #07Eh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test BIO
LD #5,B
BC KEY1,BIO
STM #0FFh,GPIOSR
NOP
NOP
NOP
NOP
STM #0FDh,GPIOSR ;configure hpi1 as low
NOP
NOP
NOP
NOP
;test hpi4
LD #6,B
LDM GPIOSR,A
XOR #0EDh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi5
LD #7,B
LDM GPIOSR,A
XOR #0DDh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi6
LD #8,B
LDM GPIOSR,A
XOR #0BDh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi7
LD #9,B
LDM GPIOSR,A
XOR #07Dh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test bio
LD #10,B
BC KEY1,BIO
STM #0FBh,GPIOSR ;configure hpi2 as low
NOP
NOP
NOP
NOP
;test hpi4
LD #11,B
LDM GPIOSR,A
XOR #0EBh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi5
LD #12,B
LDM GPIOSR,A
XOR #0DBh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi6
LD #13,B
LDM GPIOSR,A
XOR #0BBh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi7
LD #14,B
LDM GPIOSR,A
XOR #07Bh,A
BC KEY1,AEQ ;if a = 0, goto key1
;test bio
LD #15,B
BC KEY1,BIO
STM #0F7h,GPIOSR ;configure hpi3 as low
NOP
NOP
NOP
NOP
;test hpi4
LD #16,B
LDM GPIOSR,A
XOR #0E7h,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi5
LD #17,B
LDM GPIOSR,A
XOR #0D7h,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi6
LD #18,B
LDM GPIOSR,A
XOR #0B7h,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi7
LD #19,B
LDM GPIOSR,A
XOR #077h,A
BC KEY1,AEQ ;if a = 0, goto key1
;test hpi7
LD #20,B
BC KEY1,BIO
LD #0,B ;no touch test_key_num = 0
KEY1:
LD B,A
STM #0FFh,GPIOSR ;configure hpi0~7 as high
POPM BH
POPM BL
POPM ST0
.if __far_mode
FRET
.else
RET
.endif
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -