ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:1.18MB ,
资源ID:16690144      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16690144.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(isd4004电路图和程序Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

isd4004电路图和程序Word文档下载推荐.docx

1、 /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) ; TF0=0; TR0=0;/*/ISD4002 spi串行发送子程序,8位数据void spi_send(unsigned char isdx) unsigned char isx_counter; SS=0; /ss=

2、0,打开spi通信端 SCLK=0; for(isx_counter=0;isx_counter1; SCLK=1; delay(2); SCLK=0;/*/发送stop指令void isd_stop(void) delay(10); spi_send(0x30); SS=1; delayms(50);/发送上电指令,并延迟50msvoid isd_pu(void) spi_send(0x20);/*发送掉电指令,并延迟50msvoid isd_pd(void) spi_send(0x10);/发送play指令void isd_play(void) LED=0; spi_send(0xf0);

3、/发送rec指令void isd_rec(void) spi_send(0xb0);/发送setplay指令void isd_setplay(unsigned char adl,unsigned char adh) spi_send(adl); /发送放音起始地址低位 adh=adh|0xe0; spi_send(adh); /发送放音起始地址高位/发送setrec指令void isd_setrec(unsigned char adl,unsigned char adh) spi_send(adl); adh=adh|0xa0;/芯片溢出,LED闪烁提醒停止录音void isd_overflo

4、w(void) while(AN=0) LED=1; delayms(300); LED=0;/检查芯片是否溢出(读OVF,并返回OVF值)unsigned char chk_isdovf(void) delay(2); SCLK=1; if (MISO=1) SCLK=0; SS =1; /关闭spi通信端 isd_stop(); /发送stop指令 return 1; /OVF为1,返回1 else return 0; /OVF为0,返回0/*/主程序/功能:1.录音时,按住AN键,LED点亮开始录音,松开AN即可停止录音/ 再次按下AN键,LED点亮开始录第二段音,依次类推,直到芯片溢出

5、。/ 按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上电并延迟50ms isd_pd(); if (PR=1) /如果PR=1则转入录音部分 delayms(500); /延迟录音 isd_setrec(0x00,0x00); /发送0x0000h地址的setplay指

6、令 do isd_rec(); /发送rec指令 delay(20); 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); while(AN=0); els

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

8、放下一段语音 isd_stop(); isd_pd();/*注意:与ISD4002/03不同的是,由于ISD4004芯片的语音地址是16位,/ISD4004芯片在发送带地址指令(如setplay,setrec,setmc)时,/需要先发送两个字节的地址信息,再发送一个字节的命令字,ISD4004的程序编写与ISD4002/03的区别/例如,ISD4004的setplay指令程序应为: delayms(1); spi_send(0xe0); /发送setplay指令字节*/ISD4004语音播放部分/当按下P3.5键时,从指定地址开始录音/ 当按下P3.6键时,从指定地址开始放音/ 当按下P3.

9、7键时,停止当前的操作/ 程序中的录放停部分已做成子函数,可以直接调用, 只需要输入录音的地址就行/录音地址的设定与芯片型号有关系,以ISD4004-16为例,ISD40044-16录音时间为16/ 分钟,即16*60=960S, 根据4004的资料,960秒可分为2400段,也就是10S的段数为/ 25段,即从,00000019H的内容为10S,/作者:长沙致望科技电子公司WWW.CSMCU.COM/版本:V1.0(2008.12.1)/实验使用注意,按录音键,要切换到放音时,可按停止再放音,也可以先按一下放音键,再按一次放音键,那可/原因:本程序在放音前,没有做停止和下电处理,感兴趣的朋友

10、可以直接到停止部分加到放音子函数中。intrins.h#define uchar unsigned char#define uint unsigned int/定义放音命令,定义常量/#define ISDPOWERUP 0X20 /ISD4004上电#define ISDSTOP 0X10 /ISD4004下电#define OPERSTOP 0X30 /ISD4004停止当前操作#define PLAYSET 0XE0 /ISD4004从指定地址开始放音#define PLAYCUR 0XF0 /ISD4004从当前地址开始放音#define RECSET 0XA0 /ISD4004从指定

11、地址开始录音#define RECCUR 0XB0 /ISD4004从当前地址开始录音sbit SS=P00; /LOW IS ACTIVELYsbit MOSI=P01;sbit MISO=P02;sbit SCLK=P03;/sbit INT=P12;sbit K1=P31; /用串口烧写程序时会用到sbit K2=P32;sbit K3=P33;sbit LED1=P10;sbit LED2=P11;sbit LED3=P12;void delayms(uchar ms);uint addr;/全局变量/ 放音地址 /放音部分子程序,放音地址由ADDR决定/void play() uin

12、t y; MOSI=0;/发送开始 for(y=0;yy)&0x01)MOSI=1; /发送上电命令,从低位往高位发 else MOSI=0; _nop_(); /发送结束/上电结束 delayms(25); /MOSI=0;/发送地址 /SCLK=0;16; if(addr/放音 if(0xE0 if(0xF0 /lu音部分子程序,地址由ADDR决定/void rec() uint y; /delayms(50);/ MOSI=0; /发送地址结束*/ SCLK=0; if(0xA0 if(0xB0/void stop() uchar y; if(0x30/void Dstop() if(0

13、x10/void press_key() void delayms(uchar ms) / 延时子程序 uchar j; while(ms-) for(j =0;j125;j+);void main() P1=0xFF; P2=0XFF; P3=0XFF; if(K1=0) delayms(10); while(K1=0); /松手判断 LED1=0; LED2=1; LED3=1; addr=0X00;/从0X50单元开始 delayms(500); rec(); delayms(10); /if(INT=0) / stop(); if(K2=0) while(K2=0); LED1=1; LED2=0; play(); /addr=0x50; / play(); if(K3=0) while(K3=0); LED1=1; L

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1