历史上的今天
今天是:2024年11月28日(星期四)
2020年11月28日 | 单片机89C52 控制ISD4004语音芯片,多段录放音源码
2020-11-28 来源:51hei
单片机89C52 控制ISD4004语音芯片,多段录放音
单片机源程序如下:
//AT89c52,ISD4004
//录制k1键要按2次,led1亮,才可以K2播放。
//录制并播放后,地址变为下一个,可以进行第二段语音的录放。
#include #include #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从指定地址开始录音 #define RECCUR 0XB0 //ISD4004从当前地址开始录音 sbit SS=P1^0; sbit MOSI=P1^1; sbit SCLK=P1^3; sbit INT = P1^4; sbit k1=P3^1; ////k1键,录音 sbit k2=P3^2; /// k2键,放音 sbit k3=P3^3; /// k3键,停止 sbit LED1=P0^0; sbit LED2=P0^1; uint addr;////全局变量,录放音地址 void delay10ms(uint c) //延时 { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } ////////////////放音部分子程序,放音地址由ADDR决定//// void play() { uint y; SS=0; MOSI=0;//发送开始 SCLK=0; for(y=0;y<8;y++) //上电 { SCLK=0; if((0x20>>y)&0x01) MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); }//发送结束 SS=1;//上电结束 delay10ms(5); SS=0; MOSI=0;//发送地址 SCLK=0; for(y=0;y<16;y++) { SCLK=0; if((addr>>y)&0x01) MOSI=1; else MOSI=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; else MOSI=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; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); } SS=1; } //////////////////////////录音部分子程序,地址由ADDR决定///////////////////////// void rec() { uint y; SS=0; MOSI=0;//发送开始 SCLK=0; for(y=0;y<8;y++) { SCLK=0; if((0x20>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); } //发送结束 SS=1; //上电结束 delay10ms(5); SS=0; MOSI=0; //发送开始 SCLK=0; for(y=0;y<8;y++) { SCLK=0; if((0x20>>y)&0x01)MOSI=1; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); } //发送结束 SS=1; //上电结束 delay10ms(5); SS=0; MOSI=0; //发送地址 SCLK=0; for(y=0;y<16;y++) { SCLK=0; if((addr>>y)&0x01)MOSI=1; else MOSI=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; else MOSI=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; else MOSI=0; _nop_(); _nop_(); _nop_(); SCLK=1; _nop_(); _nop_(); _nop_(); } SS=1; } void stop() { uchar y; SS=1; SS=0; MOSI=0;//放音 SCLK=0; for(y=0;y<8;y++) { SCLK=0;
史海拾趣
|
这款10.66.4.3版驱动是Marvell Yukon系列网卡最新最全的网卡驱动,驱动编译于2008年12月9日,多国语言版,支持Win2000/XP/2003/WinXP-64/2003-64/Vista/Vista-64/2008/2008-64 12/09/2008, 10.66.4.3 支持以下硬件ID: 3Com 3C2000-T Gigabit A ...… 查看全部问答> |
|
各位朋友。。为什么我用手放到电路板晶振电路上空附近。。系统出现混乱 。。数码管乱闪。。系统不正常。。。 肯定不是晶振的问题啊 来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)群主:wangkj… 查看全部问答> |
|
WINCE的COMMON目录下某个驱动,怎样才能让它生成DLL? 最近在折腾SDIO驱动,发现发现别人给的BSP里用的sdmemory.dll的他们自己做的,没有源码。 我想用系统自带的,想把 WINCE500\\PUBLIC\\COMMON\\OAK\\DRIVERS\\SDCARD\\SDCLIENTDRIVERS\\SDMEMORY 目录下的文件编译成sdmemory.dll, 它的sources文 ...… 查看全部问答> |
|
WinCE系统中如何实现对基于I2C总线的EEPROM存储器(24C16)的文件读写及复制 刚接触WinCE不久,需要在EVC中写一个程序,实现对基于I2C总线的EEPROM存储器(24C16)的文件复制,具体说就是能通过IIC总线把一个文件复制到EEPROM中,或者从EEPROM中把文件拷贝出来,硬件系统是自己开发的,主要是Intel Xscale PXA255,EEPROM是FM2 ...… 查看全部问答> |
|
版主,能否提供STM32全系列的orcad和allegro封装 如题 最近改用allegro,可是封装方面需要重新建立。 本来想去官网下,但是网速极慢,五分钟了连一个FLASH也没有打开,真纠结。 手册倒是有,可是真懒的弄,我看到TI的CM3有这方面的资料,不知STM这边有没有? 若有,请版主提供一个下载。… 查看全部问答> |
|
我正在做dsp2407a的设计,遇到一个问题,请大家帮忙看看 程序可以编译,但是链接时候出现问题 _CAPCONA 说这个没有定义。 在头文件中已经定义过,但是我在.map文件中看到_CAPCONA 确实没有定义;怀疑是cmd文件定义出现问题,但是本人刚开始学习 ...… 查看全部问答> |




