- ///////////ISD4004语音播映部分/////////////////////////////
- ////当按下P3.5键时,从指定地址开端录音
- /// 当按下P3.6键时,从指定地址开端放音
- /// 当按下P3.7键时,中止当时的操作
- /// 程序中的录放停部分已做成子函数,能够直接调用, 只需要输入录音的地址就行
- // 录音地址的设定与芯片型号有联系,以ISD4004-16为例,ISD40044-16录音时刻为16
- // 分钟,即16*60=960S, 依据4004的材料,960秒可分为2400段,也便是1S的段数为
- // 25段,即从,0000-0019H的内容为1S,
- ///作者:长沙致望科技电子公司 WWW.CSMCU.COM
- ///版别:V1.0(2008.12.1)
- //试验运用留意,按录音键,要切换到放音时,可按中止再放音,也能够先按一下放音键,再按一次放音键,那可
- //原因:本程序在放音前,没有做中止和下电处理,感兴趣的朋友能够直接到中止部分加到放音子函数中。
- #include
- #include
- #defineucharunsignedchar
- #defineuintunsignedint
- ////////界说放音指令,界说常量//////
- #defineISDPOWERUP 0X20//ISD4004上电
- #defineISDSTOP 0X10//ISD4004下电
- #defineOPERSTOP 0X30//ISD4004中止当时操作
- #definePLAYSET 0XE0//ISD4004从指定地址开端放音
- #definePLAYCUR 0XF0//ISD4004从当时地址开端放音
- #defineRECSET 0XA0//ISD4004从指定地址开端录音
- #defineRECCUR 0XB0//ISD4004从当时地址开端录音
- sbit SS=P1^4;//LOW IS ACTIVELY
- sbit MOSI=P1^5;
- //sbit MISO=P1^7;
- sbit SCLK=P1^7;
- sbit K1=P3^5;
- sbit K2=P3^6;
- sbit K3=P3^7;
- sbitINT=P3^2;
- sbit LED1=P1^0;
- sbit LED2=P1^3;
- voiddelayms(uchar ms);
- uint addr;////全局变量//// 放音地址
- ////////////////放音部分子程序,放音地址由ADDR决议////
- voidplay()
- {
- uint y;
- SS=0;
- MOSI=0;//发送开端
- SCLK=0;
- for(y=0;y<8;y++)//上电
- {
- SCLK=0;
- if((0x20>>y)&0x01)MOSI=1;
- elseMOSI=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- }//发送完毕
- SS=1;//上电完毕
- delayms(50);
- SS=0;
- MOSI=0;//发送地址
- SCLK=0;
- for(y=0;y<16;y++)
- {
- SCLK=0;
- if((addr>>y)&0x01)MOSI=1;
- elseMOSI=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- }//发送地址完毕
- MOSI=0;//放音
- SCLK=0;
- for(y=0;y<8;y++)
- {
- SCLK=0;
- if((0xe0>>y)&0x01)MOSI=1;
- elseMOSI=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- }
- SS=1;
- SS=0;
- MOSI=0;//放音
- SCLK=0;
- for(y=0;y<8;y++)
- {
- SCLK=0;
- if((0xf0>>y)&0x01)MOSI=1;
- elseMOSI=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- }
- SS=1;
- }
- //////////////////////////lu音部分子程序,地址由ADDR决议/////////////////////////
- voidrec()
- {uint y;
- SS=0;
- MOSI=0;//发送开端
- SCLK=0;
- for(y=0;y<8;y++)
- {
- SCLK=0;
- if((0x20>>y)&0x01)MOSI=1;
- elseMOSI=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- }//发送完毕
- SS=1;//上电完毕
- delayms(50);
- SS=0;
- MOSI=0;//发送开端
- SCLK=0;
- for(y=0;y<8;y++)
- {
- SCLK=0;
- if((0x20>>y)&0x01)MOSI=1;
- elseMOSI=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- }//发送完毕
- SS=1;//上电完毕
- delayms(50);
- delayms(50);
- SS=0;
- MOSI=0;//发送地址
- SCLK=0;
- for(y=0;y<16;y++)
- {
- SCLK=0;
- if((addr>>y)&0x01)MOSI=1;
- elseMOSI=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- }//发送地址完毕
- MOSI=0;
- SCLK=0;
- for(y=0;y<8;y++)
- {
- SCLK=0;
- if((0xa0>>y)&0x01)MOSI=1;
- elseMOSI=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- }
- SS=1;
- SS=0;
- MOSI=0;
- SCLK=0;
- for(y=0;y<8;y++)
- {
- SCLK=0;
- if((0xb0>>y)&0x01)MOSI=1;
- elseMOSI=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- }
- SS=1;
- }
- ////////////////////////////////////
- ////////////////////////////////
- voidstop()
- {
- uchar y;
- SS=1;
- SS=0;
- MOSI=0;//放音
- SCLK=0;
- for(y=0;y<8;y++)
- {
- SCLK=0;
- if((0x30>>y)&0x01)MOSI=1;
- elseMOSI=0;
- _nop_();
- _nop_();
- _nop_();
- SCLK=1;
- _nop_();
- _nop_();
- _nop_();
- }
- SS=1;
- }
- ////////////////////////////////////
- ////////////////////////////////////void press_key()
- voiddelayms(uchar ms)
- // 延时子程序
- {
- uchar j;
- while(ms–)
- {
- for(j=0;j<120;j++);
- }
- }
- ////////////////////////////////
- ////////////////////////////////////
- voidmain()
- {
- P1=0xff;
- P2=0XFF;
- P3=0XFF;
- while(1)
- {
- LED1=INT;
- LED2=0;
- if(K1==0)
- {
- delayms(10);
- while(K1==0);///松手判别
- LED2=1;
- addr=0X05;/////从0X05单元开端
- rec();
- P1=0XFF;
- while(K1==1);
- delayms(10);
- while(K1==0);///松手判别
- }
- if(K2==0)
- {
- delayms(10);
- while(K2==0);
- addr=0X05;
- play();
- P1=0XFF;
- }
- if(K3==0)
- {
- delayms(10);
- while(K3==0);
- LED1=1;
- LED2=1;
- stop();
- P1=0XFF;
- }
- }
- }
ISD4004语音程序
///////////ISD4004语音播放部分/////////////////////////////////当按下P3.5键时,从指定地址开始录音///当按下P3.6键时,从指定地址开…
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/275278.html