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

📄 isd1420.txt

📁 使用ISD1420语音模块录制一段话,使用ISD1420语音模块录制一段话,使用ISD1420语音模块录制一段话
💻 TXT
字号:
ISD1420_AD1	EQU	00H			;1号键录放音起始地址,每次录音5s
ISD1420_AD2	EQU	28H			;2号键录放音起始地址
ISD1420_AD3	EQU	50H			;3号键录放音起始地址
ISD1420_AD4	EQU	78H			;4号键录放音起始地址
RSEG  		STACK
		DS    	20H  			;32 Bytes Stack

CSEG	AT	    0000H			;定位0
		LJMP	START

RSEG		MAIN_CODE			;开始程序段
START:		MOV	SP,#STACK-1
		LCALL	MainInit		;主程序初始化
Main:		LCALL	ScanKey			;扫描按键
		JNC	Main
Main1:		LCALL	KeyRun			;按键处理
		JNB	F0,Main			;是否有新的键按下
		CLR	F0			;清按键标志	
		SJMP	Main1
		JMP	MAIN			;循环进行实验内容介绍与ISD1420功能测试
主程序初始化		
MainInit:	CLR	F0			;有键按下标志位,清0-无键按下
		MOV	P1,#0FFH		
		LCALL	ISD_INIT		;ISD1420初始化
		RET
录放音子程序					
********************************
KEY1:		MOV	A,#ISD1420_AD1		;录音首地址
		LJMP	KEY_REC		
KEY2:		MOV	A,#ISD1420_AD2
		LJMP	KEY_REC
KEY3:		MOV	A,#ISD1420_AD3
		LJMP	KEY_REC
KEY4:		MOV	A,#ISD1420_AD4
		LJMP	KEY_REC

KEY_REC:	MOV	R7,#20			;录音时间长度,5s
		LCALL	ISD_REC			;调用录音子程序
KEY_REC1:	LCALL	Delay_025S		;延时
		JB	F0,KEY_REC2		;检测按键是否有键按下
		DJNZ	R7,KEY_REC1		;录音时间,根据R7的值决定
		LCALL	ISD_STOP		;停止录音
KEY_REC2:	RET

放音子程序
KEY5:		MOV	A,#ISD1420_AD1		;放音首地址
		LJMP	KEY_PLAY
KEY6:		MOV	A,#ISD1420_AD2
		LJMP	KEY_PLAY
KEY7:		MOV	A,#ISD1420_AD3
		LJMP	KEY_PLAY
KEY8:		MOV	A,#ISD1420_AD4
		LJMP	KEY_PLAY

KEY_PLAY:	MOV	R7,#20			
		LCALL	ISD_PLAY		;调用录用子程序
KEY_PLAY1:	LCALL	Delay_025S		;用于进度显示的时间参照
		JB	F0,KEY_PLAY2		;检测按键是否有键按下
		DJNZ	R7,KEY_PLAY1		
KEY_PLAY2:	RET

		

KeyRun:		MOV	DPTR,#KeyTab		;有键按下,跳到相应处理程序
		MOV	A,B
		RL	A
		JMP	@A+DPTR
KeyTab:		SJMP	KEY1			;1--4号键,分别各录音5秒,ISD1420可录音20秒
		SJMP	KEY2			
		SJMP	KEY3			
		SJMP	KEY4			
		SJMP	KEY5			;5--8号键,对应分别放音各5秒
		SJMP	KEY6			
		SJMP	KEY7
		SJMP	KEY8	
按键扫描
ScanKey:	MOV	A,P1			;键扫描
		CJNE	A,#0FFH,ScanKey1
ScanKey4:	CLR	C
		RET
ScanKey1:	ACALL	ScanKey2
		JNC	ScanKey4
ScanKey3:	MOV	B,A
		ACALL	Delay20ms		;消抖动
		ACALL	Delay20ms
		ACALL	ScanKey2
		JNC	ScanKey4
		CJNE	A,B,ScanKey3
ScanKey5:	MOV	A,P1
		CJNE	A,#0FFH,ScanKey5
		SETB	C
		RET

ScanKey2:	CLR	A
		JNB	P1.0,ScanKey21
		INC	A
		JNB	P1.1,ScanKey21
		INC	A
		JNB	P1.2,ScanKey21
		INC	A
		JNB	P1.3,ScanKey21
		INC	A
		JNB	P1.4,ScanKey21
		INC	A
		JNB	P1.5,ScanKey21
		INC	A
		JNB	P1.6,ScanKey21
		INC	A
		JNB	P1.7,ScanKey21
		CLR	C
		RET
ScanKey21:	SETB	C
		RET

Delay20ms:	MOV	R6,#10
Delay1:		MOV	R7,#100
		DJNZ	R7,$
		DJNZ	R6,Delay1
		RET

;延时0.25s
Delay_025S:	PUSH	05H
		PUSH	06H
		PUSH	07H
		MOV	R5,#6
DL1S_1:		MOV	R6,#100
DL1S_2:		MOV	R7,#200
		DJNZ	R7,$
		DJNZ	R6,DL1S_2
		DJNZ	R5,DL1S_1
		ACALL	ScanKey
		JNC	DL1S_3
		SETB	F0			;F0有键按下标志,F0=1,有键按下		
DL1S_3:		POP	07H
		POP	06H
		POP	05H
		RET

		END
rec        bit      p3.2
playe      bit      p3.3
playl      bit      p3.4
isdcomm    xdata    0f000h
isd_init:  setb     rec
           setb     playe
		   setb     playl
		   mov      dptr,#isdcomm
		   clr      a
		   movx     @dptr,a
		   ret
isd_mode:  push   	acc
           lcall    isd_stop
		   mov      dptr,#isdcomm
		   pop      acc
		   movx     @dptr,a
		   clr      playl
		   nop
		   nop
		   nop
		   setb     playl
		   ret
isd_rec:   mov      dptr,#isdcomm
           movx     @dptr,a
		   clr      rec
		   ret
A--放哪段音
isd_play:  push     acc
           call     isd_stop
		   pop      acc
		   mov      dptr,#isdcomm
		   movx     @dptr,a
		   clr      playe
		   nop
		   setb     playe
		   ret
isd_stop:  clr      playl
           nop
		   setb     playl
		   lcall    delay50ms
		   setb     rec
		   setb     playe
		   mov      dptr,#isdcomm
		   clr      a
		   movx     @dptr,a
		   ret

⌨️ 快捷键说明

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