当前位置:文档之家› C语音单片机通开发板电路图相关程序

C语音单片机通开发板电路图相关程序

89C51-ISD4000语音单片机通用开发板本板采用国内最常用的MCS-51语言单片机89C51,与最新的ISD4000系列语音芯片结合,可供用户开发各种最新的智能型数码语音产品。

一、结构板上已装配好:89C51--单片机,8031内核,4K可反复擦写的程序存储器,32条I/O口,5V工作ISD4003-08--语音芯片,音质优异的模拟存储技术,可反复录放,8分钟,可分1200段,SPI接口方式,3V供电LM386--功率放大器,0.5W驱动24C01(选配件)--I2C总线串行存储器。

还有驻极体话筒(MIC)、话筒放大器、音量电位器、发光管等部件。

二、性能参数外接电源电压:5V(稳压)外接喇叭:4-16欧姆,0 .5W工作电流:25~30mA ( 录音),50~80mA (放音)静态电流:13mA随板提供的演示程序功能:1、录音跳线插在"REC"一侧是录音状态,按住"AN"键不放,指示灯亮即可对着板上话筒讲话录音,松键时录音停止并形成一段。

再按则录下一段。

按"STOP"键为复位,再录音时又从第一段开始。

2、放音跳线插在"PLAY"一侧是放音状态,按一下"AN"键即播放一段,一段结束后自动停止放音,再按"AN"则播放下一段按"STOP"键为复位,再放音时又从第一段开始。

89C51-ISD4000语音电路程序AT89C51单片机89C51单片机12MHz注:本程序为ISD4002、4003的控制程序,ISD4004的程序须加些改动,请注意程序后边的注释。

SS EQU P1.0 ;片选SCLK EQU P1.1 ;ISD4003时钟MOSI EQU P1.2 ;数据输入MISO EQU P1.3 ;数据输出LED EQU P1.7 ;指示灯INT EQU INT0 ;中断AN EQU P1.6 ;执行STOP EQU P1.5 ;复位PR EQU P1.4 ;PR=1录音 PR=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 ;ISD掉电MAS0: MOV 3AH,#200 ;MAS1: JB AN,MAS0 ;等按AN键DJNZ 3AH,MAS1 ;ACALL UP ;ISD上电MOV 20H,#00H ;ISD低位地址MOV 21H,#00H ;ISD高位地址JB PR,REC ;PR=1 录音AJMP PLAY ;PR=0 放音;SETREC 16位;从指定地址录音 10100 <X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 >REC: MOV A,20H ;发地址 A7-A0ACALL ISDX ;MOV A,21H ;发地址 A9-A8SETB ACC.7 ;CLR ACC.6 ;SETB ACC.5 ;CLR ACC.4 ;CLR ACC.3 ;ACALL ISDX ;SETB SS ;关片选;REC 8位;从当前地址录音 10110 <X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 > REC1: MOV 36H,#10 ;REC2: ACALL YS50 ;延时录音DJNZ 36H,REC2 ;CLR LED ;开指示灯MOV A,#0B0H ;发 1011 0XXXACALL ISDX ;SETB SS ;关片选REC3: MOV 35H,#200 ;REC4: JNB INT,REC7 ;OVF=0芯片溢出JNB AN,REC3 ;DJNZ 35H,REC4 ;SETB LED ;关指示灯ACALL STOPP ;停止当前操作REC5: JNB STOP,REC6 ;中断RESETJB AN,REC5 ;等待AN=0ACALL STOPP ;停止当前操作AJMP REC1 ;REC6: CLR SCLK ;时钟SCLK=0SETB SS ;关片选ACALL STOPP ;停止当前操作AJMP MAII ;REC7: SETB LED ;关指示灯MOV 36H,#15 ;REC8: ACALL YS50 ;延时录音JB AN,REC6 ;等待AN=1DJNZ 36H,REC8 ;CLR LED ;MOV 36H,#15 ;REC9: ACALL YS50 ;延时录音JB AN,REC6 ;等待AN=1DJNZ 36H,REC9 ;AJMP REC7 ;;SETPLAY 16位;从指定地址放音 11100 <X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 > PLAY: JNB AN,PLAY ;等待AN=1MOV A,20H ;发地址 A7-A0ACALL ISDX ;MOV A,21H ;发地址 A9-A8SETB ACC.7 ;SETB ACC.6 ;SETB ACC.5 ;CLR ACC.4 ;CLR ACC.3 ;ACALL ISDX ;SETB SS ;关片选;PLAY 8位;从当前地址放音 11110 <X A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 > PLAY1: CLR LED ;LED开指示灯MOV A,#0F0H ;发 11110 XXXXXXXXACALL ISDX ;发 << SETPLAY >>SETB SS ;关片选PLAY2: JNB STOP,REC6 ;STOP=0停止放音JB INT,PLAY2 ;无OVF EOM继续放音SETB LED ;关指示灯ACALL STOPP ;停止当前操作;检测OVFCLR SS ;开片选CLR SCLK ;时钟SCLK=0SETB SCLK ;时钟SCLK=1JB MISO,REC6 ;芯片到未CLR SCLK ;时钟SCLK=0SETB SS ;关片选ACALL STOPP ;停止当前操作PLAY3: JNB STOP,REC6 ;中断放音JB AN,PLAY3 ;等待AN=0AJMP PLAY1 ;顺序放音;ISD上电 << POWERUP >>UP: MOV A,#20H ;发00100 XXXXXXXXXXXACALL ISDX ;SETB SS ;关片选ACALL YS50 ;50mS延时ACALL YS50 ;50mS延时RET ;;停止当前操作<< STOP >> 8位STOPP: MOV A,#30H ;发 0X11 0XXXACALL ISDX ;SETB SS ;关片选ACALL YS50 ;50mS延时ACALL YS50 ;50mS延时RET ;;停止当前操作掉电<< STOPPWRDN >> 8位DSTOP: MOV A,#10H ;发0X010 XXXXXXXXXX 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=0ISD1: MOV C,ACC.0 ;MOV MOSI,C ;数据写 MOSISETB SCLK ;时钟SCLK=1RR A ;CLR SCLK ;时钟SCLK=0DJNZ R6,ISD1 ;RET ;;**** 10mS延时 ****YS1: MOV TMOD,#01H ;MOV TH0,#0D8H ;10mS延时初值置入MOV TL0,#0F0H ;(65536-X)*1=10MSSETB TR0 ;65536-(10000/1)=D8F0HJNB TF0,$ ;CLR TF0 ;CLR TR0 ;RET ;;**** 50mS延时 ****YS50: MOV TMOD,#01H ;MOV TH0,#3CH ;50mS延时初值置入MOV TL0,#0B0H ;(65536-X)*1=50MSSETB TR0 ;65536-(50000/1)JNB TF0,$ ;CLR TF0 ;CLR TR0 ;RET ;END ;附:ISD4004的程序改动注明:SETREC:;指定地址录音MOV 20H,#00H ;低八为地址MOV 21H,#00H ;高八位地址MOV 22H,#0a0H ;操作码MOV A,20HACALL ISDXMOV A,21HACALL ISDXMOV A,22HACALL ISDXSETB SS指定地址录音(SETPLAY)和指定地址快进(SETMC)的改动与上述相同ISD4000-89c51开发板C程序示例//*****************************************************// ISD4002-89c51开发板演示例程 C51版本 *// 作者:中青世纪 Lell *// 2008.2.27 *// *// 更多ISD4000使用心得请登陆中青世纪论坛 *// /bbs *// *//*****************************************************#include <reg51.h>sbit SS = P1^0; //片选sbit SCLK = P1^1; //ISD4003时钟sbit MOSI = P1^2; //数据输入sbit MISO = P1^3; //数据输出sbit LED = P1^7; //指示灯sbit ISD_INT= P3^2; //中断sbit AN = P1^6; //执行sbit STOP = P1^5; //复位sbit PR = P1^4; //PR=1录音? PR=0放音void delay(unsigned int time) //延迟n微秒{while(time!=0){time-- ;}}void delayms(unsigned int time) //延迟n毫秒{ TMOD=0x01;for(time;time>0;time--){TH0=0xfc;TL0=0x18;TR0=1;while(TF0!=1){;}TF0=0;TR0=0;}}//************************************//ISD4002 spi串行发送子程序,8位数据//************************************void spi_send(unsigned char isdx){ unsigned char isx_counter;SS=0; //ss=0,打开spi通信端SCLK=0;for(isx_counter=0;isx_counter<8;isx_counter++) //先发低位再发高位,依次发送。

相关主题