C51语音单片机通用开发板电路图和相关程序.doc

上传人:豆**** 文档编号:17409868 上传时间:2022-05-23 格式:DOC 页数:12 大小:186.50KB
返回 下载 相关 举报
C51语音单片机通用开发板电路图和相关程序.doc_第1页
第1页 / 共12页
C51语音单片机通用开发板电路图和相关程序.doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《C51语音单片机通用开发板电路图和相关程序.doc》由会员分享,可在线阅读,更多相关《C51语音单片机通用开发板电路图和相关程序.doc(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流C51语音单片机通用开发板电路图和相关程序.精品文档.89C51-ISD4000语音单片机通用开发板本板采用国内最常用的MCS-51语言单片机89C51,与最新的ISD4000系列语音芯片结合,可供用户开发各种最新的智能型数码语音产品。一、 结构板上已装配好:89C51-单片机,8031内核,4K可反复擦写的程序存储器,32条I/O口,5V工作ISD4003-08-语音芯片,音质优异的模拟存储技术,可反复录放,8分钟,可分1200段,SPI接口方式,3V供电LM386-功率放大器,0.5W驱动24C01(选配件)-I2C总线串行存储器。还有驻

2、极体话筒(MIC)、话筒放大器、音量电位器、发光管等部件。 二、 性能参数外接电源电压:5V(稳压)外接喇叭:4-16欧姆,0 .5W工作电流:2530mA ( 录音),5080mA (放音)静态电流:13mA随板提供的演示程序功能:1、录音跳线插在REC一侧是录音状态,按住AN键不放,指示灯亮即可对着板上话筒讲话录音,松键时录音停止并形成一段。再按则录下一段。按STOP键为复位,再录音时又从第一段开始。2、放音跳线插在PLAY一侧是放音状态,按一下AN键即播放一段,一段结束后自动停止放音,再按AN则播放下一段按STOP键为复位,再放音时又从第一段开始。 89C51-ISD4000语音电路程序

3、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

4、 ;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 REC: MOV A,20H ;发地址 A7-A0ACALL IS

5、DX ;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 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

6、,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 36

7、H,#15 ;REC9: ACALL YS50 ;延时录音JB AN,REC6 ;等待AN=1DJNZ 36H,REC9 ;AJMP REC7 ;SETPLAY 16位;从指定地址放音 11100 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 PLAY1: CLR LED ;LED

8、开指示灯MOV A,#0F0H ;发 11110 XXXXXXXXACALL ISDX ;发 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

9、 AN,PLAY3 ;等待AN=0AJMP PLAY1 ;顺序放音;ISD上电 UP: MOV A,#20H ;发00100 XXXXXXXXXXXACALL ISDX ;SETB SS ;关片选ACALL YS50 ;50mS延时ACALL YS50 ;50mS延时RET ;停止当前操作 8位STOPP: MOV A,#30H ;发 0X11 0XXXACALL ISDX ;SETB SS ;关片选ACALL YS50 ;50mS延时ACALL YS50 ;50mS延时RET ;停止当前操作掉电 8位DSTOP: MOV A,#10H ;发0X010 XXXXXXXXXXACALL ISDX

10、 ;SETB SS ;关片选ACALL YS50 ;50mS延时ACALL YS50 ;50mS延时RET ;ISD3300,4003 SPI写入程序 8位 数据在AISDX: 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 ;

11、(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 ;高八位

12、地址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使用心得请登陆中青世纪论坛 */ * #include sbit SS = P10; /片选sbit SCLK = P11; /ISD4003时钟sbit MOSI = P12

13、; /数据输入sbit MISO = P13; /数据输出sbit LED = P17; /指示灯sbit ISD_INT= P32; /中断sbit AN = P16; /执行sbit STOP = P15;/复位sbit PR = P14; /PR=1录音? PR=0放音void delay(unsigned int time) /延迟n微秒while(time!=0)time- ;void delayms(unsigned int time)/延迟n毫秒TMOD=0x01;for(time;time0;time-)TH0=0xfc;TL0=0x18;TR0=1;while(TF0!=1)

14、;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_counter1;SCLK=1;delay(2); SCLK=0;delay(2);/*/发送stop指令/*void isd_stop(void) delay(10);spi_send(0x30);SS=1;delayms(50);/*/发送上电指令,并延迟50ms/*void isd_pu(vo

15、id) delay(10);SS=0;spi_send(0x20);SS=1;delayms(50);/*/发送掉电指令,并延迟50ms/*void isd_pd(void)delay(10); spi_send(0x10);SS=1;delayms(50);/*/发送play指令/*void isd_play(void)LED=0;spi_send(0xf0);SS=1;/*/发送rec指令/*void isd_rec(void)LED=0;spi_send(0xb0);SS=1;/*/发送setplay指令/*void isd_setplay(unsigned char adl,unsig

16、ned char adh)spi_send(adl); /发送放音起始地址低位adh=adh|0xe0;spi_send(adh); /发送放音起始地址高位SS=1;/*/发送setrec指令/*void isd_setrec(unsigned char adl,unsigned char adh)spi_send(adl); /发送放音起始地址低位adh=adh|0xa0;spi_send(adh); /发送放音起始地址高位SS=1;/*/芯片溢出,LED闪烁提醒停止录音/*void isd_overflow(void)while(AN=0)LED=1;delayms(300);LED=0;

17、delayms(300);/*/检查芯片是否溢出(读OVF,并返回OVF值)/*unsigned char chk_isdovf(void)SS=0;delay(2);SCLK=0;delay(2);SCLK=1;SCLK=0;delay(2);if (MISO=1) SCLK=0;SS =1; /关闭spi通信端isd_stop(); /发送stop指令return 1; /OVF为1,返回1else SCLK=0;SS =1; /关闭spi通信端isd_stop(); /发送stop指令return 0; /OVF为0,返回0/*/主程序/功能:1.录音时,按住AN键,LED点亮开始录音,

18、松开AN即可停止录音/再次按下AN键,LED点亮开始录第二段音,依次类推,直到芯片溢出。/ 按stop键芯片复位/ 2.放音时,按一下AN键,即播放一段语音。 按stop键芯片复位。/*void main(void)unsigned char ovflog;while(1)P0=P1=P2=P3=0xff; /初始化while (AN=1) /等待AN键按下if (AN=0) /按键防抖动delayms(20);isd_pu(); /AN键按下,ISD上电并延迟50msisd_pd();isd_pu();if (PR=1) /如果PR=1则转入录音部分delayms(500); /延迟录音 i

19、sd_setrec(0x00,0x00); /发送0x0000h地址的setplay指令do isd_rec();/发送rec指令while(AN=0)/等待录音完毕if (ISD_INT=0) /如果芯片溢出,进行LED闪烁提示,isd_overflow();/如果取消录音(松开AN键)则停止录音,芯片复位 if (ISD_INT=0) break;LED=1; /录音完毕,LED熄灭isd_stop(); /发送停止命令while(AN=1) /如果AN再次按下,开始录制下一段语音if(STOP=0)/如果按下STOP按键,则芯片复位break;if (AN=0)delayms(500);

20、while(AN=0);else /如果PR=0则转入放音部分while(AN=0);isd_setplay(0x00,0x00); /发送setplay指令,从0x0000地址开始放音do isd_play(); /发送放音指令delay(20);while(ISD_INT=1) /等待放音完毕的EOM中断信号;LED=1;isd_stop(); /放音完毕,发送stop指令 if (ovflog=chk_isdovf() /检查芯片是否溢出 ,如溢出则停止放音,芯片复位break;while(AN=1) /等待AN键再次按下if (STOP=0)break;if(AN=0)delayms(

21、20);while(AN=0); / AN键再次按下,播放下一段语音isd_stop();isd_pd();注意:与ISD4002/03不同的是,由于ISD4004芯片的语音地址是16位,在发送带地址指令(如setplay,setrec,setmc)时,需要先发送两个字节的地址信息,再发送一个字节的命令字,ISD4004的程序编写与ISD4002/03的区别,仅此而已。例如,ISD4004的setplay指令程序应为:void isd_setplay(unsigned char adl,unsigned char adh)delayms(1);spi_send(adl); /发送放音起始地址低位delay(2);spi_send(adh);/发送放音起始地址高位delay(2);spi_send(0xe0);/发送setplay指令字节SS=1;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁