程序如下
;录音地址为1、00~32H、2、33H~64H、3、65H~96H、4、97H~0C8H、5、0C9H~0FAH、6、0FBH~12CH、7、12DH~15EH、8、
;15FH~190H、9、191H~1C2H、10、1C3H~1F4H
SS EQU P1.1 ;片选这个程序设计的每次的语音时间为5S
SCLK EQU P1.0 ;ISD4003时钟
MOSI EQU P1.2 ;数据输入
MIC EQU P1.3 ;数据输出
INT EQU P3.2 ;中断
AN0 EQU P0.7 ;执行
AN1 EQU P2.0
AN2 EQU P2.1
AN3 EQU P2.2
AN4 EQU P2.3
AN5 EQU P2.4
AN6 EQU P2.5
AN7 EQU P2.6
AN8 EQU P2.7
LED EQU P1.7 ;指示灯
;初始化
ORG 0000H ;
MAIN:
MOV SP,#30H ;设置堆栈
MOV P1,#0FFH ;
MOV P2,#0FFH ;
MOV P3,#0FFH ;
MOV P0,#0FFH ;
CLR EA ;
SETB LED ;
;+++++++录音程序+++++++++++
MAS0:
MOV R0,#200 ;
MAS1:
JB AN0,MAS0 ;等按AN键
DJNZ R0,MAS1
MOV A,#01H; ;有健按下显示录音段
LCALL DISPLAY
CALL UP ;ISD上电
CALL UP ;再次上电
;******发送SET REC指令****** ;第一段地址00~32H
SETREC:
MOV A,#00H ;发送录音地址低位
CALL ISDX
MOV A,#0A0H ;发送录音地址高位和SET REC指令
CALL ISDX
SETB SS ;关片
;******发送REC指令**********
REC1:
MOV R0,#10
REC2:
CALL YS50 ;延时录音
DJNZ R0,REC2 ;
CLR LED ;开指示灯
MOV A,#0B0H ;发送REC指令
CALL ISDX ;
SETB SS ;关片选
LCALL DELAY10S ;十秒录音后发送停止命令
SETB LED ;关指示灯
CALL STOPP ;停止当前操作
JB AN0,$ ;开始第二段录音;
MOV A,#02H ;显示录音段
LCALL DISPLAY
SETREC2:
MOV A,#33H ;发送录音地址低位 33~64H
CALL ISDX
MOV A,#0A0H ;发送录音地址高位和SET REC指令
CALL ISDX
SETB SS ;关片选
REC21: ;发送REC指令
MOV R0,#10 ;
REC22:
CALL YS50 ;延时录音
DJNZ R0,REC22 ;
CLR LED ;开指示灯
MOV A,#0B0H ;发送REC指令
CALL ISDX ;
SETB SS ;关片选
LCALL DELAY10S
SETB LED ;关指示灯
CALL STOPP ;停止当前操作
JB AN0,$
; 录第三段录音;地址65~96H
MOV A,#03H
LCALL DISPLAY
SETREC3: ;发送SETREC指令
MOV A,#65H ;发送录音地址低位
CALL ISDX
MOV A,#0A0H ;发送录音地址高位和SET REC指令
CALL ISDX
SETB SS ;关片选
REC31: ;发送REC指令
MOV R0,#10 ;
REC32:
CALL YS50 ;延时录音
DJNZ R0,REC32 ;
CLR LED ;开指示灯
MOV A,#0B0H ;发送REC指令
CALL ISDX ;
SETB SS ;关片选
LCALL DELAY10S
SETB LED ;关指示灯
CALL STOPP ;停止当前操作
JB AN0,$
;第四段语音 录音地址 97~0C8
MOV A,#04H
LCALL DISPLAY
SETREC4:
MOV A,#97H ;发送录音地址低位 第四段
CALL ISDX
MOV A,#0A0H ;发送录音地址高位和SET REC指令
CALL ISDX
SETB SS ;关片选
;******发送REC指令**********
REC41:
MOV R0,#10 ;
REC42:
CALL YS50 ;延时录音
DJNZ R0,REC42 ;
CLR LED ;开指示灯
MOV A,#0B0H ;发送REC指令
CALL ISDX ;
SETB SS ;关片选
LCALL DELAY10S ;
SETB LED ;关指示灯
CALL STOPP ;停止当前操作
JB AN0,$
;第五段录音 地址0C9H~0FAH
MOV A,#05H
LCALL DISPLAY
SETREC5:
MOV A,#0C9H ;发送录音地址低位
CALL ISDX
MOV A,#0A0H ;发送录音地址高位和SET REC指令
CALL ISDX
SETB SS ;关片选
;******发送REC指令**********
REC51:
MOV R0,#10 ;
REC52:
CALL YS50 ;延时录音
DJNZ R0,REC52 ;
CLR LED ;开指示灯
MOV A,#0B0H ;发送REC指令
CALL ISDX ;
SETB SS ;关片选
LCALL DELAY10S
SETB LED ;关指示灯
CALL STOPP ;停止当前操作
JB AN0,$
;第六段录音 地址0FB~12CH
MOV A,#06H
LCALL DISPLAY
SETREC6:
MOV A,#0FBH ;发送录音地址低位
CALL ISDX
MOV A,#0A0H ;发送录音地址高位和SET REC指令
CALL ISDX
SETB SS ;关片选
;******发送REC指令**********
REC61:
MOV R0,#10 ;
REC62:
CALL YS50 ;延时录音
DJNZ R0,REC62 ;
CLR LED ;开指示灯
MOV A,#0B0H ;发送REC指令
CALL ISDX ;
SETB SS ;关片选
LCALL DELAY10S
SETB LED ;关指示灯
CALL STOPP ;停止当前操作
JB AN0,$
;第七段语音 地址12D~15E
MOV A,#07H
LCALL DISPLAY
SETREC7:
MOV A,#2DH ;发送录音地址低位 第七段
CALL ISDX
MOV A,#0A1H ;发送录音地址高位和SET REC指令
CALL ISDX
SETB SS ;关片选
;******发送REC指令**********
REC71:
MOV R0,#10 ;
REC72:
CALL YS50 ;延时录音
DJNZ R0,REC72 ;
CLR LED ;开指示灯
MOV A,#0B0H ;发送REC指令
CALL ISDX ;
SETB SS ;关片选
LCALL DELAY10S
SETB LED ;关指示灯
CALL STOPP ;停止当前操作
JB AN0,$
;第八段录音 地址15FH~190H
MOV A,#08H
LCALL DISPLAY
SETREC8:
MOV A,#5FH ;发送录音地址低位
CALL ISDX
MOV A,#0A1H ;发送录音地址高位和SET REC指令
CALL ISDX
SETB SS ;关片选
;******发送REC指令**********
REC81:
MOV R0,#10 ;
REC82:
CALL YS50 ;延时录音
DJNZ R0,REC82 ;
CLR LED ;开指示灯
MOV A,#0B0H ;发送REC指令
CALL ISDX ;
SETB SS ;关片选
LCALL DELAY10S ;
SETB LED ;关指示灯
CALL STOPP ;停止当前操作
LJMP LETPLAY
;*********延时2s**************
LCALL DELAY1S
;******播放刚才的录音********
LETPLAY:
CALL UP ;上电
CALL UP
JNB AN1,FIRST
JNB AN2,SECOND
JNB AN3,THIRD
JNB AN4,FOUR
JNB AN5,FIVE
JNB AN6,SIX
JNB AN7,SEVEN
JNB AN8,EIGHT
LCALL YS50
JMP LETPLAY
FIRST:NOP
SETPLAY:LCALL FIRST1
LCALL PLAY
SECOND: LCALL SECOND1
LJMP PLAY
THIRD: LCALL THIRD1
LJMP PLAY
FOUR: LCALL FOUR1
LJMP PLAY
FIVE: LCALL FIVE1
LJMP PLAY
SIX: LCALL SIX1
LJMP PLAY
SEVEN: LCALL SEVEN1
LJMP PLAY
EIGHT: LCALL EIGHT1
PLAY:
MOV A,#0F0H ;发送PLAY指令
CALL ISDX ;
SETB SS ;关片选
;******等待EOM标志************
JB INT,$
LJMP LETPLAY
FIRST1:MOV A,#01H
LCALL DISPLAY
MOV A,#00H ;发送播放地址低位
CALL ISDX
MOV A,#0E0H ;发送播放地址高位及SET PLAY指令
CALL ISDX
SETB SS ;关片选
CLR LED ;开指示灯
RET
SECOND1:MOV A,#02H
LCALL DISPLAY
MOV A,#33H ;发送播放地址低位
CALL ISDX
MOV A,#0E0H ;发送播放地址高位及SET PLAY指令
CALL ISDX
SETB SS ;关片选
CLR LED ;开指示灯
RET
THIRD1: MOV A,#03H
LCALL DISPLAY
MOV A,#65H ;发送播放地址低位
CALL ISDX
MOV A,#0E0H ;发送播放地址高位及SET PLAY指令
CALL ISDX
SETB SS ;关片选
CLR LED ;开指示灯
RET
FOUR1: MOV A,#04H
LCALL DISPLAY
MOV A,#97H
CALL ISDX
MOV A,#0E0H
CALL ISDX
SETB SS
RET
FIVE1:MOV A,#05H
LCALL DISPLAY
MOV A,#0C9H
CALL ISDX
MOV A,#0E0H
CALL ISDX
SETB SS
RET
SIX1:MOV A,#06H
LCALL DISPLAY
MOV A,#0FBH
CALL ISDX
MOV A,#0E0H
CALL ISDX
SETB SS
RET
SEVEN1:MOV A,#07H
LCALL DISPLAY
MOV A,#2DH
CALL ISDX
MOV A,#0E1H
CALL ISDX
SETB SS
RET
EIGHT1:MOV A,#08H ;
LCALL DISPLAY
MOV A,#5FH
CALL ISDX
MOV A,#0E1H
CALL ISDX
SETB SS
RET
;ISD上电 << POWERUP >>
UP:
MOV A,#20H ;发00100 XA9~A0
CALL ISDX ;
SETB SS ;关片选
ACALL YS50 ;50mS延时
ACALL YS50 ;50mS延时
RET ;
;停止当前操作<< STOP >> 8位
STOPP:
MOV A,#30H ;发 0X11 0XXX
ACALL ISDX ;
SETB SS ;关片选
ACALL YS50 ;50mS延时
ACALL YS50 ;50mS延时
RET ;
;ISD3300,4003 SPI写入程序 8位 数据在A
ISDX:
CLR SS ;开片选
MOV R6,#8 ;
CLR SCLK ;时钟SCLK=0
ISD1:
RRC A ;
MOV MOSI,C ;数据写 MOSI
SETB SCLK ;时钟SCLK=1
CLR SCLK ;时钟SCLK=0
DJNZ R6,ISD1 ;
RET ;
DELAY10S:MOV R3,#2EH
ST0: MOV R4,#0FFH
ST1:MOV R5,#0FFH
ST2:NOP
DJNZ R5,ST2
DJNZ R4,ST1
DJNZ R3,ST0
RET
DELAY1S: :MOV R3,#07H
ST0: MOV R4,#0FFH
ST1:MOV R5,#0FFH
ST2:NOP
DJNZ R5,ST2
DJNZ R4,ST1
DJNZ R3,ST0
RET
DISPLAY :
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
RET
TAB: DB 81H,0EDH,0C2H,92H,0B4H,98H,88H,0B3H,80H,90H,0FFH,88H,0BFH
;共阳段码表 "0""1""2" "3""4""5""6""7" "8""9""不亮"“A”“-”
END
文章评论(0条评论)
登录后参与讨论