📄 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 + -