本板采用国内最常用的MCS-51语言单片机89C51,与最新的ISD5116系列语音芯片结合,可供用户开发各种最新的智能型数码语音产品。如图 一、 结构 板上已装配好: 89C51--单片机,8031内核,4K可反复擦写的程序存储器,32条I/O口,5V工作 ISD5116--语音芯片,音质优异的模拟存储技术,可反复录放,录放采样频率为8KHZ~~4KHZ可选择(相应时间长度为8~16分钟),录音从MIC/线路可选择,可分2048段,I2C接口方式,3V供电 还有驻极体话筒(MIC)、话筒放大器、4位拨码开关、发光管等部件。 二、 性能参数 外接电源电压:5V(稳压) 外接喇叭:4-16欧姆,0 .5W 工作电流:25~30mA ( 录音),50~80mA (放音) 静态电流:13mA 随板提供的演示程序功能: 1、 录/放音采样频率、MIC/线路输入选择、全/半音量选择 由4位拨码开关选择,对应表为: (ON 为0,OFF为1)
2、录音 跳线插在"REC"一侧是录音状态,按住"AN"键不放,指示灯亮即可对着板上话筒讲话录音,松键时录音停止并形成一段。再按则录下一段。 按"STOP"键为复位,再录音时又从第一段开始。 3、放音 跳线插在"PLAY"一侧是放音状态,按一下"AN"键即播放一段,一段结束后自动停止放音,再按"AN"则播放下一段。 按"STOP"键为复位,再放音时又从第一段开始。 89C51-ISD5116通用开发板程序 AT89C51单片机12MHZ SDA EQU P1.0 ;I2C数据 SCL EQU P1.1 ;I2C时钟 LED EQU P1.7 ;指示灯 INT EQU INT0 ;中断 START EQU P1.6 ;执行 STOP EQU P1.5 ;复位 PR EQU P1.4 ;PR=1录音,=0放音 ;---------------------初始化 ORG 0000H AJMP MAIN MAIN: MOV SP,#10H MOV P1,#0FFH MOV P2,#0FFH MOV P3,#0FFH MOV P0,#0FFH CLR EA MAII: SETB LED ;关指示灯 ACALL DSTOP MAS0: MOV 3AH,#200 MAS1: JB START,MAS0 ;等待按下START键 DJNZ 3AH,MAS1 ACALL UP JNB PR,PLAY ;PR=0 放音 AJMP REC ;PR=1 录音 ;-------------------------SETPLAY 16位 ;-------------------------从指定地址放音 PLAY: JB P2.0,SELC_PSAM8A ;判断采样 JB P2.1,SELC_PSAM8A JB P2.2,SELC_PSAM8A JB P2.3,SELC_PSAM8A LCALL PSAMP8H AJMP PLAYP SELC_PSAM8A: JB P2.0,SELC_PSAM8B JB P2.1,SELC_PSAM8B JB P2.2,SELC_PSAM8B JNB P2.3,SELC_PSAM8B LCALL PSAMP8H JMP PLAYP SELC_PSAM8B: JB P2.0,SELC_PSAM6A JB P2.1,SELC_PSAM6A JNB P2.2,SELC_PSAM6A JB P2.3,SELC_PSAM6A LCALL PSAMP8L JMP PLAYP SELC_PSAM6A: JB P2.0,SELC_PSAM6B JNB P2.1,SELC_PSAM6B JB P2.2,SELC_PSAM6B JB P2.3,SELC_PSAM6B LCALL PSAMP6H JMP PLAYP SELC_PSAM6B: JB P2.0,SELC_PSAM6C JNB P2.1,SELC_PSAM6C JB P2.2,SELC_PSAM6C JNB P2.3,SELC_PSAM6C LCALL PSAMP6H JMP PLAYP SELC_PSAM6C: JB P2.0,SELC_PSAM4A JNB P2.1,SELC_PSAM4A JNB P2.2,SELC_PSAM4A JB P2.3,SELC_PSAM4A LCALL PSAMP6L JMP PLAYP SELC_PSAM4A: JNB P2.0,SELC_PSAM4B JB P2.1,SELC_PSAM4B JB P2.2,SELC_PSAM4B JB P2.3,SELC_PSAM4B LCALL PSAMP4H JMP PLAYP SELC_PSAM4B: JNB P2.0,SELC_PSAM4C JB P2.1,SELC_PSAM4C JB P2.2,SELC_PSAM4C JNB P2.3,SELC_PSAM4C LCALL PSAMP4H JMP PLAYP SELC_PSAM4C: JNB P2.0,PCHA1 JB P2.1,PCHA1 JNB P2.2,PCHA1 JB P2.3,PCHA1 LCALL PSAMP4L JMP PLAYP ;------------------------------------- PCHA1: AJMP MAII ;---------------------------------从当前地址放音 PLAYP: JNB START,PLAYP LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#0A9H ;发送放音地址指令 LCALL TB MOV A,#00H ;发送放音地址 高字节 LCALL TB MOV A,#00H ;发送放音地址 低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;------------------------PLAY 8位 ;------------------------ PLAY1: CLR LED LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#0A8H ;放音开始 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII PLAY2: JNB STOP,BK JB INT,PLAY2 SETB LED ACALL STOPP ;-----------------------检测OVF LCALL BEGN MOV A,#081H ;从地址10000001(读) LCALL TB ;发送从地址 LCALL RB ;接收状态内容到A中 CLR P1.1 SETB P1.0 ;主设备不响应 NOP NOP SETB P1.1 NOP NOP LCALL STOPII JB ACC.6,BK ACALL STOPP PLAY3: JNB STOP,BK JB START,PLAY3 ;等待START=0(按下) AJMP PLAY1 ;继续下一个 ;-------------------------回到开始 BK: ACALL STOPP ;停止当前操作 AJMP MAII ;回到开始MAII ;-----------------------停止当前操作《STOP》 8位 STOPP: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#080H ;停止,但在通电状态 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII LCALL YS50 LCALL YS50 RET ; ================================SETREC 16位 ;----------------------从指定地址录音 REC: JB P2.0,SELC_SAM8A ;判断采样 JB P2.1,SELC_SAM8A JB P2.2,SELC_SAM8A JB P2.3,SELC_SAM8A LCALL SAMP8A JMP RECR SELC_SAM8A: JB P2.0,SELC_SAM8B JB P2.1,SELC_SAM8B JB P2.2,SELC_SAM8B JNB P2.3,SELC_SAM8B LCALL SAMP8B JMP RECR SELC_SAM8B: JB P2.0,SELC_SAM6A JB P2.1,SELC_SAM6A JNB P2.2,SELC_SAM6A JB P2.3,SELC_SAM6A LCALL SAMP8A JMP RECR SELC_SAM6A: JB P2.0,SELC_SAM6B JNB P2.1,SELC_SAM6B JB P2.2,SELC_SAM6B JB P2.3,SELC_SAM6B LCALL SAMP6A JMP RECR SELC_SAM6B: JB P2.0,SELC_SAM6C JNB P2.1,SELC_SAM6C JB P2.2,SELC_SAM6C JNB P2.3,SELC_SAM6C LCALL SAMP6B JMP RECR SELC_SAM6C: JB P2.0,SELC_SAM4A JNB P2.1,SELC_SAM4A JNB P2.2,SELC_SAM4A JB P2.3,SELC_SAM4A LCALL SAMP6A JMP RECR SELC_SAM4A: JNB P2.0,SELC_SAM4B JB P2.1,SELC_SAM4B JB P2.2,SELC_SAM4B JB P2.3,SELC_SAM4B LCALL SAMP4A JMP RECR SELC_SAM4B: JNB P2.0,SELC_SAM4C JB P2.1,SELC_SAM4C JB P2.2,SELC_SAM4C JNB P2.3,SELC_SAM4C LCALL SAMP4B JMP RECR SELC_SAM4C: JNB P2.0,CHA1 JB P2.1,CHA1 JNB P2.2,CHA1 JB P2.3,CHA1 LCALL SAMP4A JMP RECR ;------------------------------------------- CHA1: AJMP MAII ;------------------------------------ RECR: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#091H ;发送录音地址指令 LCALL TB MOV A,#00H ;发送录音地址 高字节 LCALL TB MOV A,#00H ;发送录音地址 低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ----------------------------REC 8位 ;---------------------------从当前地址录音 REC1: MOV 36H,#10 ;延时2秒钟为开头 REC2: LCALL YS50 DJNZ 36H,REC2 CLR LED ;开指示灯 LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#90H ;录音开始 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII REC3: MOV 35H,#200 REC4: JNB INT,REC7 ;OVF=0芯片溢出 JNB START,REC3 DJNZ 35H,REC4 SETB LED ;关指示灯 ACALL STOPP ;停止当前操作 REC5: JNB STOP,REC6 ;按STOP=0,回到开始 JB START,REC5 ;等待,按START=0回到第二节录音 ACALL STOPP AJMP REC1 REC6: ACALL STOPP ;停止当前操作 AJMP MAII ;回到开始MAII REC7: SETB LED ;关指示灯 MOV 36H,#15 REC8: LCALL YS50 ;延时录音 JB START,REC6 ;等待START=1,回到开始MAII DJNZ 36H,REC8 ;继续按START,开始下一节 CLR LED MOV 36H,#15 REC9: LCALL YS50 ;延时录音 JB START,REC6 ;等待START=1,回到开始MAII DJNZ 36H,REC9 AJMP REC7 ;=================================ISD上电《POWERUP》 UP: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#080H ;发送POWER UP指令 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII LCALL YS50 LCALL YS50 RET ;-----------------------停止当前操作掉电《STOPPWRDN》 8位 DSTOP: LCALL BEGN MOV A,#080H ;发送5116的从地址10000000(写) LCALL TB MOV A,#000H ;发送POWER DOWN指令 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII LCALL YS50 LCALL YS50 RET ;====================================选择录音音质 SAMP8A: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#024H ;麦克风录音高字节 LCALL TB MOV A,#023H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#039H ;麦克风录音高字节 LCALL TB MOV A,#040H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;----------------------------- SAMP8B: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#03AH ;麦克风录音高字节 LCALL TB MOV A,#033H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#039H ;麦克风录音高字节 LCALL TB MOV A,#041H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;----------------------------------------- SAMP6A: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#024H ;麦克风录音高字节 LCALL TB MOV A,#023H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;---------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#039H ;麦克风录音高字节 LCALL TB MOV A,#044H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;------------------------------------- SAMP6B: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#03AH ;麦克风录音高字节 LCALL TB MOV A,#033H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;---------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#039H ;麦克风录音高字节 LCALL TB MOV A,#045H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;------------------------------------- SAMP4A: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#024H ;麦克风录音高字节 LCALL TB MOV A,#023H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;-------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#039H ;麦克风录音高字节 LCALL TB MOV A,#04CH ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;------------------------------ SAMP4B: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#03AH ;麦克风录音高字节 LCALL TB MOV A,#033H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;-------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#039H ;麦克风录音高字节 LCALL TB MOV A,#04DH ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;====================================选择高低放音音质 PSAMP8H: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#024H ;麦克风录音高字节 LCALL TB MOV A,#022H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#059H ;麦克风录音高字节 LCALL TB MOV A,#0D1H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;------------------------------------------------- PSAMP8L: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#024H ;麦克风录音高字节 LCALL TB MOV A,#022H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#079H ;麦克风录音高字节 LCALL TB MOV A,#0D1H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;----------------------------------------- PSAMP6H: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#024H ;麦克风录音高字节 LCALL TB MOV A,#022H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;---------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#059H ;麦克风录音高字节 LCALL TB MOV A,#0D5H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;----------------------------------------- PSAMP6L: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#024H ;麦克风录音高字节 LCALL TB MOV A,#022H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;---------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#079H ;麦克风录音高字节 LCALL TB MOV A,#0D5H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;------------------------------------- PSAMP4H: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#024H ;麦克风录音高字节 LCALL TB MOV A,#022H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;-------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#059H ;麦克风录音高字节 LCALL TB MOV A,#0DDH ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;------------------------------------- PSAMP4L: LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#082H ;命令CFG0 LCALL TB MOV A,#024H ;麦克风录音高字节 LCALL TB MOV A,#022H ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII ;-------------------------- LCALL BEGN MOV A,#080H ;从地址10000000(写) LCALL TB MOV A,#083H ;命令CFG1 LCALL TB MOV A,#059H ;麦克风录音高字节 LCALL TB MOV A,#0DDH ;麦克风录音低字节 LCALL TB NOP NOP SETB P1.1 NOP NOP LCALL STOPII RET ;==============================开始信号子程序 BEGN: SETB P1.1 SETB P1.0 CLR P1.0 NOP NOP CLR P1.1 RET ;------------------------结束信号子程序 STOPII: CLR P1.1 CLR P1.0 NOP NOP SETB P1.1 SETB P1.0 RET ;------------------------发送一字节子程序 TB: MOV R6,#08H TB1: CLR P1.1 NOP RLC A MOV P1.0,C SETB P1.1 NOP DJNZ R6,TB1 CLR P1.1 SETB P1.0 NOP NOP SETB P1.1 TB2: JB P1.0,TB2 RET ;-----------------------接收一字节子程序 RB: MOV R7,#08H CLR P1.1 SETB P1.0 NOP NOP RB1: SETB P1.1 NOP MOV C,P1.0 RLC A CLR P1.1 NOP DJNZ R7,RB1 RET ;--------------------10ms延时 YS1: MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#0F0H SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 RET ;--------------------50ms延时 YS50: MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 RET ;----------------------------- END |