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

📄 ht83f_ht_adpcm4.asm

📁 use Holtek HT83F60 flash voice MCU edit,function:Play PCM12 Voice ,sentence ,VOL control,Stop voice
💻 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 + -