📄 ht83f_ht_adpcm4.asm
字号:
;;
;;HOLTEK VOICE IC
;;
.list
.listmacro
.LISTINCLUDE
#include HT83F_HT_ADPCM4.hed
#include STDMACRO.INC
;************************************************************
;;In HT83F IDE
;;S1: up S2: down
;demo function explain:
;PA0->GND : play current voice
;PA1->GND : play next voice
;PA2->GND : play current sentence
;PA3->GND : play next sentence
;PA4->GND : volume up
;PA5->GND : volume down
;PA6->GND : stop playing
;
;define variable
MAINDATA .SECTION 'DATA'
R_CURRENT_TRACKH DB ?
R_CURRENT_TRACKL DB ?
R_CURRENT_SENTENCEH DB ?
R_CURRENT_SENTENCEL DB ?
R_MAIN_VOLUME DB ?
R_DEBOUNCE_TIME DB ?
R_KEYSBAK DB ?
B_ENABLE_KEY DBIT
TimeBase_Flag DBIT
#DEFINE C_40MS (40*HT86SYSTEMFREQUENCY)/(1024*4*1000)
;
;define vector
MAINCODE .SECTION AT 00H 'CODE'
ORG 0000H
JMP BEGIN
ORG 0004H
SET TimeBase_Flag
RETI ;TimeBase Interrupt service routine
ORG 0008H
JMP SR0ISR ;Timer0 Interrupt service routine(voice channel0 ISR)
ORG 000CH
RETI ;Timer1 Interrupt service routine(User Programmble ISR)
;************************************************************
; User program here
;************************************************************
BEGIN:
CLR WDT
CLR WDT2
CALL _CLRRAM
CALL _SYSTEM_INITIALIZATION
CALL _SETSTANDBY
CLR R_CURRENT_TRACKH
CLR R_CURRENT_TRACKL
CLR R_CURRENT_SENTENCEH
CLR R_CURRENT_SENTENCEL
MOV A,7
MOV R_MAIN_VOLUME,A
CALL _SET_VOLUME
CALL _INITTIMEBASE ;;Open 1ms int flag
;;
START_LOOP:
CLR WDT
CLR WDT2
SNZ TimeBase_Flag
JMP START_LOOP
CLR TimeBase_Flag
_TIMEBASE_ISR:
CALL KEYSCAN
SZ ACC.0
JMP HANDLE_KEY0
SZ ACC.1
JMP HANDLE_KEY1
SZ ACC.2
JMP HANDLE_KEY2
SZ ACC.3
JMP HANDLE_KEY3
SZ ACC.4
JMP HANDLE_KEY4
SZ ACC.5
JMP HANDLE_KEY5
SZ ACC.6
JMP HANDLE_KEY6
JMP START_LOOP
;
HANDLE_KEY0:;PA0->GND : play current voice
_PLAY_VOICE R_CURRENT_TRACKH,R_CURRENT_TRACKL,0,R_MAIN_VOLUME,0
JMP KEYSCAN_RET
;
HANDLE_KEY1:;PA1->GND : play next voice
SIZ R_CURRENT_TRACKL
JMP $+2
INC R_CURRENT_TRACKH
MOV A,Last_Wav_FIle_Num
SUB A,R_CURRENT_TRACKL
MOV A,Last_Wav_FIle_Num>>8
SBC A,R_CURRENT_TRACKH
SNZ C
JMP $+2
JMP $+3
CLR R_CURRENT_TRACKH
CLR R_CURRENT_TRACKL
_PLAY_VOICE R_CURRENT_TRACKH,R_CURRENT_TRACKL,0,R_MAIN_VOLUME,0
JMP KEYSCAN_RET
;
HANDLE_KEY2:;PA2->GND : play current sentence
_PLAY_SENTENCE R_CURRENT_SENTENCEH,R_CURRENT_SENTENCEL,0,R_MAIN_VOLUME,0
JMP KEYSCAN_RET
;
HANDLE_KEY3:;PA3->GND : play next sentence
SIZ R_CURRENT_SENTENCEL
JMP $+2
INC R_CURRENT_SENTENCEH
MOV A,_Last_Sentence_FIle_Num
SUB A,R_CURRENT_SENTENCEL
MOV A,Last_Wav_FIle_Num>>8
SBC A,R_CURRENT_SENTENCEH
SNZ C
JMP $+2
JMP $+3
CLR R_CURRENT_SENTENCEH
CLR R_CURRENT_SENTENCEL
_PLAY_SENTENCE R_CURRENT_SENTENCEH,R_CURRENT_SENTENCEL,0,R_MAIN_VOLUME,0
JMP KEYSCAN_RET
;
HANDLE_KEY4:;PA4->GND : volume up
MOV A,R_MAIN_VOLUME
SUB A,07H
SZ C
JMP KEYSCAN_RET
INC R_MAIN_VOLUME
CALL _VOLUMEUP
JMP KEYSCAN_RET
;
HANDLE_KEY5:;PA5->GND : volume down
SZ R_MAIN_VOLUME
JMP $+2
JMP KEYSCAN_RET
DEC R_MAIN_VOLUME
CALL _VOLUMEDOWN
JMP KEYSCAN_RET
;
HANDLE_KEY6:;PA6->GND : stop playing
CALL _STOPCH0
JMP KEYSCAN_RET
;;
;;
;;
KEYSCAN_RET:
JMP START_LOOP
;
PUBLIC _HT82V733ENABLE
EXTERN _HT82V733ENABLE_RET:NEAR
_HT82V733ENABLE:
;************************************************************
; Open HT82V733 OP here
;************************************************************
JMP _HT82V733ENABLE_RET
;
PUBLIC _HT82V733DISABLE
EXTERN _HT82V733DISABLE_RET:NEAR
_HT82V733DISABLE:
;************************************************************
; Open HT82V733 OP here
;************************************************************
JMP _HT82V733DISABLE_RET
;
PUBLIC _CUE_EVENT
EXTERN _CUE_EVENT_RET:NEAR
_CUE_EVENT:
;************************************************************
; Handle the CUE event
;************************************************************
JMP _CUE_EVENT_RET
;
;
;
; Return ACC, one bit show one key
;
KEYSCAN:
CPLA PA
AND A,7FH
SUB A,R_KEYSBAK
SNZ Z
JMP KEY_STATE_CHANGED
SAME_KEY:
INC R_DEBOUNCE_TIME
MOV A,R_DEBOUNCE_TIME
SUB A,C_40MS
SNZ C
JMP HAVE_NO_KEY
SZ R_KEYSBAK
JMP $+2
JMP ALL_KEY_UP
SNZ B_ENABLE_KEY
JMP HAVE_NO_KEY
CLR B_ENABLE_KEY
MOV A,R_KEYSBAK
RET
KEY_STATE_CHANGED:
CLR R_DEBOUNCE_TIME
CPLA PA
AND A,7FH
MOV R_KEYSBAK,A
JMP HAVE_NO_KEY
ALL_KEY_UP:
SET B_ENABLE_KEY
SZ _FSTANDBY0
HALT
HAVE_NO_KEY:
CLR ACC ;;have no key
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -