完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这个芯片无论录音还是放音都只有一声轻微的“啪”声,连噪音都没有,是不是坏的,求助
程序: 【isd4002驱动】 #include #include #define uchar unsigned char #define uint unsigned int ***it SS = P2^0; //ISD4000片选端 ***it SCLK = P2^2; //ISD4000时钟端 ***it MOSI = P2^1; //ISD4000数据输入 ***it MISO = P2^5; //ISD4000数据输出 ***it ISD_INT= P2^3; //中断 ***it LED = P0^0; //指示灯 /********以下是yus微秒延时函数********/ void delay(uint yus) { while(--yus !=0){_nop_();} } /********以下是xms毫秒延时函数********/ void Delay_ms(uint xms) //@22.1184MHz { while(xms-- != 0) { unsigned char i, j; _nop_(); i = 4; j = 146; do { while (--j); } while (--i); } } /********以下是SPI串行发送函数********/ void spi_send(uchar isdx) { uchar isd_count; SS=0; //ss=0,打开SPI通信端 SCLK=0; for(isd_count=0;isd_count<8;isd_count++) //先发低位再发高位,依次发送 { if ((isdx&0x01)==1) MOSI=1; else MOSI=0; isdx=isdx>>1; SCLK=1; delay(2); SCLK=0; delay(2); } } /********以下是发送上电指令********/ void isd_powerup(void) { delay(10); SS=0; spi_send(0x20); SS=1; Delay_ms(50); } /********以下是发送掉电指令函数********/ void isd_poweroff(void) { delay(10); spi_send(0x10); SS=1; Delay_ms(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; } /********以下是发送stop(停止)指令函数********/ void isd_stop(void) { delay(10); spi_send(0x30); SS=1; Delay_ms(50); } /********以下是发送setplay(放音起始地址)指令函数********/ void isd_setplay(uchar adl,uchar adh) { spi_send(adl); //发送起始地址低位 adh=adh|0xe0; spi_send(adh); //发送起始地址高位 SS=1; } /********以下是发送setrec(录音起始地址)指令函数********/ void isd_setrec(uchar adl,uchar adh) { spi_send(adl); //发送起始地址低位 adh=adh|0xa0; spi_send(adh); //发送起始地址高位 SS=1; } /********以下是检查芯片是否溢出函数(读OVF,并返回OVF值)********/ uchar check_ovf(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 } } 【主程序】 #include #include "ISD4002_drive.h" #define uchar unsigned char #define uint unsigned int ***it K1 = P3^6; //K1键 ***it K2 = P3^7; //K2键 ***it PR = P3^2; //录放控制端,PR=1录音, PR=0放音 void flash(void) { LED=1; Delay_ms(100); LED=0; Delay_ms(100); } /********以下是录音函数********/ void Record() { while(!K1); isd_setrec(0x00,0x00); //发送0x0000h地址的setplay指令 isd_rec(); //发送rec指令 LED = 1; Delay_ms(4000); LED = 0; //录音完毕,LED熄灭 isd_stop(); //发送停止命令 } /********以下是放音函数********/ void Play() { while(K1==0){;} isd_setplay(0x00,0x00); //发送setplay指令,从0x0000地址开始放音 isd_play(); //发送放音指令 LED = 1; delay(20); while(ISD_INT==1) //等待放音完毕的EOM中断信号 {flash();} LED=0; isd_stop(); //放音完毕,发送stop指令 } /********以下是主函数********/ void main(void) { while(1) { if(K1 == 0) { Delay_ms(50); if(K1 == 0) { isd_powerup(); //K1键按下,ISD上电 isd_poweroff(); //掉电 isd_powerup(); //上电 if(PR == 0) Record(); else Play(); } } } } |
|
相关推荐
1个回答
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
770 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
544 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
677 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
904 浏览 2 评论
649 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11990 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 17:06 , Processed in 0.540241 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号