搜索
bottom↓
回复: 13

怎么用89c52控制ISD1730播音~菜鸟求帮助

[复制链接]

出0入0汤圆

发表于 2013-8-20 09:38:50 | 显示全部楼层 |阅读模式
我录了4段录音,怎么通过单片机来控制它播音,比如我想直接播第三段录音什么的。
虽然如上市1700,但是我拿1730按这个图焊接的也能按键控制录音播音,现在想单片机控制,求助

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2013-8-20 09:40:13 | 显示全部楼层
在线等~

出0入0汤圆

 楼主| 发表于 2013-8-20 11:06:31 | 显示全部楼层
来人额~

出0入0汤圆

发表于 2013-8-20 11:21:50 | 显示全部楼层
需要知道第三段语音的地址,然后发指定地址播放指令

出0入0汤圆

 楼主| 发表于 2013-8-20 11:29:58 | 显示全部楼层
athena_min 发表于 2013-8-20 11:21
需要知道第三段语音的地址,然后发指定地址播放指令

恩恩,我知道这个,但是我单片机不是很熟悉,网上说能自己算出,我也找到程序说可以自动检测到,可是真到不会用啊
拙计啊,没好好学单片机,后悔啦...
能帮忙看看么,先谢过啦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-8-20 11:32:01 | 显示全部楼层
你这个录音IC多少米啊?

出0入0汤圆

 楼主| 发表于 2013-8-20 11:54:56 | 显示全部楼层
本帖最后由 暧鱼_的猫 于 2013-8-20 11:56 编辑
gprs_new 发表于 2013-8-20 11:32
你这个录音IC多少米啊?


ROSC阻值  100k   

是不是问这个,我小白

出0入0汤圆

发表于 2013-8-20 11:58:59 | 显示全部楼层
暧鱼_的猫 发表于 2013-8-20 11:54
ROSC阻值  100k   

是不是问这个,我小白

多少钱一片这个

出0入0汤圆

 楼主| 发表于 2013-8-20 12:04:49 | 显示全部楼层
gprs_new 发表于 2013-8-20 11:58
多少钱一片这个

老师给的,让我自己琢磨,真心弄不懂。

补充一句:你到签名不错额

出0入0汤圆

发表于 2013-8-20 13:33:52 | 显示全部楼层
暧鱼_的猫 发表于 2013-8-20 11:29
恩恩,我知道这个,但是我单片机不是很熟悉,网上说能自己算出,我也找到程序说可以自动检测到,可是真到 ...

根据采样率和录音时间,可以估算出地址,但是不精准。比如ISD1730,8K采样率是30S,其录音地址是从0x0010~0x00ff,共239个地址单元,每个地址单元的语音长度为30/239=0.125 秒,如果第一段录音时长是2S,则其占用2/0.125=16,地址为0x0010~0x001F。其它语音段依次类推。
想方便使用,建议买个语音烧录器,有专门的上位机,可在线录音,读取地址等功能。

出0入0汤圆

 楼主| 发表于 2013-8-20 13:52:27 | 显示全部楼层
athena_min 发表于 2013-8-20 13:33
根据采样率和录音时间,可以估算出地址,但是不精准。比如ISD1730,8K采样率是30S,其录音地址是从0x0010 ...

谢谢,亲。我在努力努力
谢谢你的帮助,太菜鸟啦我

出0入0汤圆

发表于 2013-8-26 16:24:46 | 显示全部楼层
哎  我也是用430搞语音ISD1730 搞不出来。。。

出0入0汤圆

 楼主| 发表于 2013-8-27 00:20:17 | 显示全部楼层
ljc2012 发表于 2013-8-26 16:24
哎  我也是用430搞语音ISD1730 搞不出来。。。

我的51搞出来啦,朋友用的430,也弄出来啦~

出0入0汤圆

发表于 2013-8-27 13:28:52 | 显示全部楼层
暧鱼_的猫 发表于 2013-8-27 00:20
我的51搞出来啦,朋友用的430,也弄出来啦~

恭喜啊  不知道能不能借鉴下你朋友的程序啊或者要他帮忙看下下面我写的程序。。。我总是那个isd初始化出错。。就是在读取状态时 SR0L和SR1总是为1,跳不出那个循环。。硬件可以用独立按键录放音的,感觉应该是程序的问题


#include<msp430f5525.h>
#include "isd1730.h"

#define uchar unsigned char
#define uint unsigned int


/*----------------------变量--------------------------------------------------------------------*/
uchar SR0L,SR0H,SR1,SR2;   //接收1730内部返回的数
/*------------------------------------------------
函数名:delayms(uint k)
功  能: 延时约k毫秒
参  数:k
返回值:无
-------------------------------------------------*/
void delay_ms(uint k)
{
        uint i,j;
        for(i=k;i>0;i--)
        for(j=125;j>0;j--);
}
/*------------------------------------------------
函数名:ISD_Spio(uchar dat)
功  能: spi发送接收一个字节
参  数:dat
返回值:无
备  注:发送和接收都是低位在前
-------------------------------------------------*/
uchar ISD_Spio(uchar BUF_ISD)
{
      uchar i,dat;
      dat=BUF_ISD;
      ISD_SCLK_H;
      ISD_SS_L; //开启spi模式
      for(i=0;i<8;i++)
      {
          ISD_SCLK_L;
          if(dat&0x01)
          {
              ISD_MOSI_H;
          }
          else
          {
              ISD_MOSI_L;
          }
          dat=dat>>1;
          if(ISD_MISO)
          {
              dat|=0x80;
          }
          ISD_SCLK_H;
      }
      ISD_MOSI_L;
      return(dat);
}

/*------------------------------------------------
函数名:ISD1730_PU()
功  能: 上电
参  数:无
返回值:无
-------------------------------------------------*/
void ISD1730_PU()
{
    ISD_SS_L;
    SR0L=ISD_Spio(PU|0x10);   //发送命令字节并点亮LED
    SR0H=ISD_Spio(0x00);      //发送数据字节1
    ISD_SS_H;
    delay_ms(30);
}

/*------------------------------------------------
函数名:ISD1730_PD()
功  能: 下电
参  数:无
返回值:无
-------------------------------------------------*/
void ISD1730_PD()
{
    ISD_SS_L;
    SR0L=ISD_Spio(PD|0x10);   //发送命令字节并点亮LED
    SR0H=ISD_Spio(0x00);      //发送数据字节1
    ISD_SS_H;
}

/**************************************************************************  
* 函数原型: void ISD_Reset(void);
* 功 能: 复位  
**************************************************************************/
void ISD1730_Reset()  
{  
    ISD_SS_L;
    SR0L=ISD_Spio(RESET|0x10);   //发送命令字节并点亮LED
    SR0H=ISD_Spio(0x00);      //发送数据字节1
    ISD_SS_H;
    delay_ms(30);
}

/*------------------------------------------------
函数名:ISD1730_clr_int()
功  能: 清除中断
参  数:无
返回值:无
-------------------------------------------------*/
void ISD1730_clr_int()
{
    ISD_SS_L;
    SR0L=ISD_Spio(CLR_INT|0x10); //发送命令字节并点亮LED
    SR0H=ISD_Spio(0x00);         //发送数据字节1
    ISD_SS_H;
    delay_ms(10);
}
/*------------------------------------------------
函数名:ISD_Write_APC1()
功  能: 写寄存器
参  数:无
返回值:无
-------------------------------------------------*/
void ISD_Write_APC1()
{
    ISD_SS_L;
    SR0L=ISD_Spio(WR_APC1|0x10);       //发送命令字节
    SR0H=ISD_Spio(0x40);               //发送数据字节1
    SR1=ISD_Spio(0x0c);             //发送数据字节2
    ISD_SS_H;
    delay_ms(10);
}

/**************************************************************************  
*    函数原型: void RdStatus(void);  
*    功    能: 读取状态  
**************************************************************************/  
void RdStatus()
{  
    ISD_SS_L;
    SR0L=ISD_Spio(RD_STATUS);  
    SR0H=ISD_Spio(0x00);  
    SR1=ISD_Spio(0x00);
    ISD_SS_H;
    delay_ms(10);
}  
/*------------------------------------------------
函数名:init_spi()
功  能: spi初始化
参  数:无
返回值:无
-------------------------------------------------*/
void init_spi()
{
    ISD1730_Reset();
    delay_ms(200);
    do
    {  
        RdStatus();  
    }
    while((SR0L&0x01)||(!(SR1&0x01)));//if(SR0_L^0==1){system Err}<CMD_E
    /*状态寄存器SR第一位MD_ERR 此位置1表示上一个SPI命令无效
    状态寄存器SR1第一位,RDY=1时表示空闲,可以接收SPI命令;RDY=0
    时为忙,不接受新的命令*/   
    ISD1730_clr_int();
    ISD_Write_APC1();
    ISD1730_PU();
}
/*------------------------------------------------
功 能: 取出当前语音的首末地址
地址可以自己估算出来。
-------------------------------------------------*/
void GetToneAdd(uchar NUM, uint * ipStartAdd, uint * ipEndAdd)
{
    uint caToneAdd[]=
    {
        0x10,0x21,//警报("写0")
        0x45,//欢迎使用 模拟路灯控制系统。本系统由荆楚理工 电信学院设计。("写1")
        0x52,//1号灯出现故障。("写2")
        0x60 //2号灯出现故障。("写3")
    };
    *ipStartAdd=caToneAdd[NUM];
    *ipEndAdd=caToneAdd[NUM+1];
}
/*------------------------------------------------
函数名:ISD_Set_Play()
功  能: 设置放音
参  数:无
返回值:无
-------------------------------------------------*/
void ISD_Set_Play(uchar cNum)
{
    uint Add_ST, Add_ED;
    uchar Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L;
    do
    {  
        RdStatus();  
    }
    while((SR0L&0x01)||(!(SR1&0x01)));//if(SR0_L^0==1){system Err}<CMD_E
    /*状态寄存器SR第一位MD_ERR 此位置1表示上一个SPI命令无效
    状态寄存器SR1第一位,RDY=1时表示空闲,可以接收SPI命令;RDY=0
    时为忙,不接受新的命令*/   
    ISD1730_clr_int();
    ISD_SS_L;
    delay_ms(30);
    GetToneAdd(cNum, &Add_ST, &Add_ED);
    Add_ST_L=(uchar)(Add_ST&0x00ff);
    Add_ST_H=(uchar)((Add_ST>>8)&0x00ff);
    Add_ED_L=(uchar)(Add_ED&0x00ff);
    Add_ED_H=(uchar)((Add_ED>>8)&0x00ff);
    SR0L=ISD_Spio(SET_PLAY);//发送命令字节
    SR0H=ISD_Spio(0x00);//发送数据字节1
    SR1=ISD_Spio(Add_ST_L); //发送数据字节2,放音起始地址低8位<S7:S0>
    SR2=ISD_Spio(Add_ST_H);//发送数据字节3,放音起始地址高3位<S10:S8>,ISD1730不用
    SR0H=ISD_Spio(Add_ED_L);//发送数据字节4,放音结束地址低8位<E7:E0>
    SR0H=ISD_Spio(Add_ED_H);//发送数据字节5,放音结束地址低8位<E10:E8>,ISD1730不用
    SR0H=ISD_Spio(0x00);//发送数据字节6
    ISD_SS_H;
    delay_ms(30);
    do
    {  
        RdStatus();  
    }
    while((SR0L&0x01)||((SR1&0x04)));//if(SR0_L^0==1){system Err}<CMD_Err==1>
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 05:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表