ISD4004语音程序
时间:11-11
来源:互联网
点击:
- ///////////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)
- {
ISD4004语音程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)