完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
8个回答
|
|
#include
***it SS = P1^1; //片选 ***it SCLK = P1^0; //ISD4003时钟 ***it MOSI = P1^2; //数据输入 ***it MISO = P1^3; //数据输出 ***it LED = P1^7; //指示灯 ***it ISD_INT= P3^2; //中断 ***it AN = P1^4; //执行 ***it STOP = P1^6; //复位 ***it PR = P1^5; //PR=1录音 PR=0放音 ***it LED1=P1^6; 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++) //先发低位再发高位,依次发送。 { if ((isdx&0x01)==1) MOSI=1; else MOSI=0; isdx=isdx>>1; 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(void) { 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,unsigned 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; 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,返回1 } else { SCLK=0; SS =1; //关闭spi通信端 isd_stop(); //发送stop指令 return 0; //OVF为0,返回0 } } //************************************************************************ //主程序 //功能:1.录音时,按住AN键,LED点亮开始录音,松开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上电并延迟50ms isd_pd(); isd_pu(); if (PR==1) //如果PR=1则转入录音部分 { delayms(500); //延迟录音 isd_setrec(0x00,0x00); //发送0x0000h地址的setplay指令 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); } else //如果PR==0则转入放音部分 { while(AN==0){;} isd_setplay(0x00,0x00); //发送setplay指令,从0x0000地址开始放音 do { LED1=0; 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) delayms(20); if (STOP==0) break; if(AN==0) delayms(20); } LED=0; }while(AN==0); // AN键再次按下,播放下一段语音 } isd_stop(); isd_pd(); } } |
|
|
|
回帖奖励 +1 分积分
恕我冒昧,没有看到图中的选择按钮
|
|
|
|
|
|
|
|
已经解决了
|
|
|
|
老铁,怎么解决的,可以加个qq探讨一下吗
|
|
|
|
老铁,怎么解决的呀??
|
|
|
|
|
|
|
|
大佬怎么解决的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
imx6ull裸机编程,使用宏定义无法驱动,使用指针就可以驱动
434 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十二章 音频FFT实验
297 浏览 0 评论
飞凌嵌入式ElfBoard EL 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用
1266 浏览 0 评论
stc15f2k60s2利用串口传输字模存储到eeprom并进行点阵显示
1603 浏览 1 评论
1589 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11617 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 22:08 , Processed in 0.723523 second(s), Total 87, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号