历史上的今天
返回首页

历史上的今天

今天是: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;

推荐阅读

史海拾趣

EVER-WAY公司的发展小趣事

在电子产品制造行业,品质是企业的生命线。EVER-WAY公司一直高度重视品质管理,建立了完善的质量管理体系。公司从原材料采购、生产制造到产品检验等各个环节都严格把关,确保产品质量的稳定性和可靠性。同时,公司还加强了对员工的培训和教育,提高了员工的品质意识和操作技能。这些品质管理的提升不仅保证了公司产品的优良品质,也赢得了客户的信任和好评。

Focus公司的发展小趣事

Focus科技股份有限公司(此处假设为一家虚构的、与“焦点科技”类似的公司)自成立之初就专注于将传统制造业与互联网深度融合。随着电子商务的兴起,该公司于2005年推出了自己的外贸电商平台“GlobalFocus”,旨在帮助中国供应商直接触达全球买家。通过持续的技术创新和平台优化,“GlobalFocus”迅速成为国际市场上知名的B2B采购平台,吸引了大量海外采购商和国内优质供应商入驻。公司还积极拓展跨境物流、支付、金融等增值服务,为中小企业提供了全方位的外贸解决方案。

Asia Pacific Microsystems Inc公司的发展小趣事

APM在追求经济效益的同时,也积极履行社会责任,关注可持续发展。公司严格遵守环保法规,采用环保材料和生产工艺,减少对环境的影响。此外,APM还积极参与公益事业,通过捐赠和技术支持等方式回馈社会。这些举措不仅提升了公司的社会形象,也为其在电子行业中赢得了更多合作伙伴和客户的支持。

这五个故事展示了Asia Pacific Microsystems Inc公司在电子行业发展中面临的挑战、机遇以及所取得的成就。通过这些故事,我们可以看到APM是如何通过技术创新、市场拓展、产业链整合以及履行社会责任等方式,逐渐在电子行业中崭露头角的。

台湾稳态公司的发展小趣事

台湾稳态公司在创立之初,便明确了自身的技术发展方向和市场定位。公司创始人凭借在电子行业多年的技术积累和敏锐的市场洞察力,带领团队专注于某一特定领域的研发和生产。通过不断的技术创新和优化,稳态公司逐渐在市场中树立起了自己的技术优势和品牌形象。

Bliley Technologies Inc公司的发展小趣事

二战期间,Bliley迎来了其历史上的一个重要时刻。由于战争对通信设备的巨大需求,Bliley的产品成为军事通信领域的关键组件。政府的大量采购合同使得Bliley的销售额直线上升,员工数量也急剧增加。为了满足战争期间的巨大需求,Bliley不得不扩建工厂,并实行昼夜不停的生产制度。这段时期,Bliley不仅在军事通信领域取得了显著成就,同时也为其在战后的发展奠定了坚实基础。

Connor-Winfield公司的发展小趣事

在近年来,随着人们对环境保护意识的提高,电子行业也开始注重绿色环保和可持续发展。Connor-Winfield积极响应这一趋势,将绿色环保理念融入到产品设计和生产过程中。公司采用环保材料和节能技术,努力降低产品对环境的影响。同时,公司还积极参与各种环保活动,推动电子行业的绿色发展。

以上是关于Connor-Winfield在电子行业中的5个发展故事。这些故事虽然可能并不完全准确反映公司的实际发展历程,但从中我们可以看出,Connor-Winfield在发展过程中始终注重技术创新、品质提升、市场拓展和环保可持续发展等方面的工作,这些努力使得公司在激烈的市场竞争中保持了领先地位。

问答坊 | AI 解惑

Marvell Yukon系列网卡驱动10.66.4.3版

这款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 ...…

查看全部问答>

电动机的单片机控制

本帖最后由 paulhyde 于 2014-9-15 03:33 编辑 《电动机的单片机控制》一本很好的书,大家可以看看!    …

查看全部问答>

各位朋友。。为什么我用手放到电路板晶振电路上空附近。。系统出现混乱

。。数码管乱闪。。系统不正常。。。 肯定不是晶振的问题啊 来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)群主:wangkj…

查看全部问答>

ADC0809

哪位告诉我在ADC0809中disbuf[10,10,10,10,10,10,0,0]是做什么用的?转换来转换去实在是不知道他在干什么?…

查看全部问答>

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的cmd文件

我正在做dsp2407a的设计,遇到一个问题,请大家帮忙看看 程序可以编译,但是链接时候出现问题 _CAPCONA 说这个没有定义。 在头文件中已经定义过,但是我在.map文件中看到_CAPCONA 确实没有定义;怀疑是cmd文件定义出现问题,但是本人刚开始学习 ...…

查看全部问答>