打印

新手求助:语音放不出声音

[复制链接]
2409|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fover|  楼主 | 2009-10-24 15:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fover 于 2009-10-24 15:27 编辑

各位大哥大姐,小弟最近在搞语音,遇到了点问题,用的是WTV080
下面是它的时序图:

一线串口模式可以利用MCU 通过DATA 线给WTV 诧音芯片发送数据以达到控制的目的。可以实现控制诧音播放、停止、循环等。
数据以电平占空比的形式计算,高电平与低电平数据占空比1:3 即代表数据位0,高电平与低电平数据位占空比为3:1 代表数据位1,高电平在前,低电平在后。数据信号先发低位再发高位。在发送数据旪,无需先发送命令码再发送指令.

小弟我根据他的说明书提供的程序,再加上自己对芯片的理解,编了完整的程序,但出来的声音就是和以前的电报机那样“嘟嘟....嘟嘟嘟.....”一样
不知道是不是我把程序编错了
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P1^0;
sbit rst=P1^1;
sbit LED=P1^7;
/* 延时1ms */
void delayms(uint x)
{ uint i;
           while(x--)
            {
                for(i=0;i<74;i++);
             }
}

void delayus(uint x)
{
          uint i;
          for(i=0;i<x;i++)
          {
          _nop_();
           }
}


unsigned char SendData(unsigned char sda)
{     uint i;
      rst=0;
      delayms(5);
      rst=1;
      delayms(7);
      sda=0;
      delayms(5);
      for(i=0;i<8;i++)
      {
             sda=1;
             if(sda&0x01)
             {
                   delayus(20); //延时300us  (299)
                  sda=0;
                  delayus(6);//延时100us (102)
            }
              else
             {
                  delayus(6);
                  sda=0;
                  delayus(20);
               }
               sda>>=1;
              }
               sda=1;
              // return(sda);
}

void main()
{
sda=1;
rst=1;
LED=1;
while(1)
{
  delayms(1000);
  LED=0;
  SendData(0xf1);
  SendData(0x00);
  delayms(1000);
  SendData(0x01);
  }
}

相关帖子

沙发
fover|  楼主 | 2009-10-26 08:11 | 只看该作者
一天下来也没人回一句
:L

使用特权

评论回复
板凳
古道热肠| | 2009-10-26 10:45 | 只看该作者
WTV是专用芯片,您得联系厂家提供相关的测试可行的代码作为样板.

使用特权

评论回复
地板
zhaoyu2005| | 2009-10-26 11:10 | 只看该作者
芯片里录过音没?

使用特权

评论回复
5
fover|  楼主 | 2009-10-26 15:15 | 只看该作者
本帖最后由 fover 于 2009-10-26 15:29 编辑

谢谢楼上的回答
我刚刚改了一下,确实犯了几个错误
一,定义SendData时 改为(unsigned char addr)
   { .......
     if(addr&1)
      ........
    }

二,在while()循环中么有给语音播放留时间,我当时只是测试,没有想到那么多,最后改了一下,用按键触发的,能播放出来。
while(1)
{
        LED=0;
         if(key1==0)
       {
         delayms(10);
          if(key1==0)
              {
                SendData(0xf1);//开内部功放
                SendData(0x00);//播放第一段语音
                  while(key1==0);
                }
          }
          if(key2==0)
            {
                  delayms(10);
                  if(key2==0)
                 {
                     SendData(0xf1);
                      SendData(0x01);
                     while(key2==0);
                    }
            }

  }
三,这个问题以前我没注意到,电源不稳定
     我弄了半天都是不行,最后经理来看了看,用示波器测了下工作时候的电源,就说加一个220u的滤波电容,果然声音一下子就出来了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

231

帖子

2

粉丝