新闻中心

联系方式

广东速佑半导体有限公司
电  话:0755-81796865  

      400-160-3880
传  真:0755-28171850
手  机:13823368981
      15889550163
Q   Q:1321386535点击这里给我发消息
邮  编:518109
Email:stchip@stchip.com
网  址:
 www.stchip.com
 

当前位置: 首页 > 新闻中心 > 行业知识
行业知识

单片机如何加语音芯片做语音菜单提示功能 

现在产品说明书动则好几页,看起来不胜其烦。而且刚买来时想到并不是每样功能都会用到,所以不会去学习所有操作或问题解答。但时间长了偶尔想要用到某功能时却束手无策,急忙去找说明书却又不知去向。 现在的智能电饭煲、智能电压力锅、智能洗衣机,虽然智能了操作反而复杂了。就像某电热水器有了定时预约功能后,操作起来却很麻烦,有时也会忘记操作步骤。若有语音提示和闪烁的文字配合或与闪烁的LED 灯配合就能很好演示某些功能的操作,或者引导用户如何操作。 

在产品开发中可以用单片机语音芯片语音菜单提示功能,首先我们在开发产品时需要确定语音总时长度和多少条语音地址选择相应型号如选一般常用语音芯片SC5180B支持语音总时长180秒,支持255段地址,一线串行控制模式16级的音量控制另外相同系列型号有支持20秒-1000秒语单长度方便产品以后添加更多语音。首先把一些重复使用的语音先分好段编好地址尽量精简。然后用单机片程序组合成我们需要的语句。如“1-9”,“十”,“百”,“米“。现在我们要发“100米”的语音,我们先发一个“1”再发“百”为再发“米”就可以了,

 


参加电路:


TB2i94Ndo5O.eBjSZFxXXaaJFXa_!!2465732066_proc.jpg



控制时序图:

fe766eb2021fadb26a3102d442e7215b_20150403_155653.JPG 


 SDA发送2ms-8ms低电平再发送高低电平3:1或1:3信号且数据低位先送。时序范围为200us:600us到500us:1500us。如上图发送的是56H。

6.3、数据与语音的对应关系

地址

功能

01H

播放第1段语音

02H

播放第2段语音

XXH

播放第xx段语音

DFH

播放第223段语音

E0H~EFH

控制16级音量,E0H音量最小,EFH音量最大,默认最大 

F2H

循环播放:第N语音地址+F2H,即循环播放第N地址语音

F3H

退出循环播放

FCH

打开功放

FDH

关闭功放

FEH

停止播放

 

 

单片机一线控制语音芯片音量程序
/****************************************************
;http://www.stchip.com
;OTP语音芯片串行一线串口模式组合语音测试程序
;主芯片:MPC82L52(1T)
;工作频率:6MHz
;适用型号:SC5008M ,SC5340B ,SC5180B ,SC5080B ,SC5040B, SC5020B
;速佑半导体400-160-3880
****************************************************/

include "REG_MPC82L52.H"
 #include


void delay_ms(unsigned int count) ;
void delay_us(unsigned int count);
void SC_Speech(unsigned char cnt);
void SC_WBusy(void);
void SC_Speechs(void);

/**************端口定义*****************/
sbit SC_DATA=P3^1;     //P3.1是脉冲数据脚
sbit SC_BUSY=P3^2;     //P3.2是放音BUSY脚

unsigned int sp[3];    //定义一个组合语音用的数组变量

/*************主程序****************/
main (void)
{
  SC_DATA=1;
  sp[0]=0X00;
  sp[1]=0X00;
  sp[2]=0X00;
  while(1)
  {
 
        sp[0]=0X08; 
        sp[1]=0X05;
        sp[2]=0X09;
        SC_Speechs();      //组合8,5,9地址段放音
 //delay_ms(5000);    //延时放音时间5秒
   }
}
/**************************************
;延时X毫秒
;不同的工作环境,需要调整此函数
;入口参数:count
;出口参数:无
**************************************/
void delay_ms(unsigned int count)    
{
 unsigned int i,j;
 for(i=0;i<count;i++)
 {
    for(j=0;j<500;j++);
 }
}
/**************************************
;延时X微秒
;不同的工作环境,需要调整此函数
;入口参数:count
;出口参数:无
**************************************/
void delay_us(unsigned int count)
{
 unsigned int i,j;
 for(i=0;i<count;i++)
 {
    for(j=0;j<2;j++);
 }
}
/**************************************
;控制命令
;入口参数:data;
;出口参数:无
**************************************/
void SC_Speech(unsigned char data)
{   
     unsigned char i;  
   
     SC_DATA=0;
     delay_ms(5);           
     for(i=0;i < 8;i++)
     { 
        SC_DATA = 1;
        if(data&0x01)
        {
           delay_us(1500); 
           SC_DATA  = 0;
           delay_us(500); 
        }
        else
        {
           delay_us(500); 
           SC_DATA  = 0;
           delay_us(1500); 
        }
        data >>= 1;
     }
      SC_DATA =1; 
      delay_ms(30);
}
/**************************************
;控制地址段组合放音
;入口参数:无
;出口参数:无
**************************************/
void SC_Speechs(void)
{   
    SC_Speech(sp[0]);
    SC_WBusy();      //等待BUSY信号变高
    SC_Speech(sp[1]);
    SC_WBusy();
    SC_Speech(sp[2]);
    sp[0]=0X00;
    sp[1]=0X00;
    sp[2]=0X00;
}

/**************************************
;等待BUSY信号变高;
;入口参数:无
;出口参数:无
**************************************/
void SC_WBusy(void)
{
    unsigned int times;
    for(times=0;times<50;times++)        //等待超过5秒最长语音段自动退出;
    {
       delay_ms(100);                    //调节组合语音间隔
       if(SC_BUSY==1) break;
    }   
}


分享到:
点击次数:  更新时间:2024-05-25 12:05:09  【打印此页】  【关闭
上一篇:没有了  下一篇:倒车语音喇叭电路图