| 找个广州唯创的数据书册,里面有demo 
  
/*--------------------------------------
;模块名称:Line_1A_WT(u08 SB_DATA)
;功能:实现一线串口通信函数
;入参: SB_DATA 为发送数据
;出参:
;P_DATA 为数据口
;-------------------------------------*/
#define Delay_1ms _delay_ms
void Delay_N10us( u08 n_us)
{
    u08 i=0;
    for(i=0;i<n_us;i++)
    {
        CLK_SysTickDelay(10);
    }
}
void Line_1A_WTN( u08 ddata)
{
    u08 S_DATA;
    u08 B_DATA;
    u08 j;
    S_DATA = ddata;
    P_DATA = 1;
    _delay_us(1);
    P_DATA = 0;
    Delay_1ms(5); //延时5ms
    B_DATA = S_DATA&0X01;
    
    for(j=0;j<8;j++)
    {
        if(B_DATA )
        {
            P_DATA = 1;
            Delay_N10us(60); //延时600us
            P_DATA = 0;
            Delay_N10us(20); //延时200us
        }
        else
        {
            P_DATA = 1;
            Delay_N10us(20); //延时200us
            P_DATA = 0;
            Delay_N10us(60); //延时600us
        }
        
        S_DATA = S_DATA>>1;
        B_DATA = S_DATA&0X01;
    }
    
    P_DATA = 1;
}
/**
 * [url=home.php?mod=space&uid=247401]@brief[/url]    播放某个编号的声音文件
 *
 * @param    声音文件编号
 *
 * [url=home.php?mod=space&uid=266161]@return[/url]   None
 *
 * [url=home.php?mod=space&uid=1543424]@Details[/url]   
 *            
 */
void Audio_playsong( u16 song)
{
    /* 本语音芯片只有160段语音: 0-0x9F*/
    if(song<= 0x9F)
    {
        Line_1A_WTN(song);
        //_delay_ms(5);
    }
}
/* 定义0-21km/h速度对应的音量 */
u08 speed2volume_tab[21] =
{
    40, //速度0
    40, //速度1
    40, //速度2
    39, //速度3
    38, //速度4
    37, //速度5
    36, //速度6
    35, //速度7
    34, //速度8
    33, //速度9
    32, //速度10
    30, //速度11
    29, //速度12
    28, //速度13
    27, //速度14
    26, //速度15
    25, //速度16
    24, //速度17
    23, //速度18
    22, //速度19
    20 //速度20    
};
void Audio_proc(void)
{
    /* 0- VSP处理:根据当前的速度,查表,获取到对应的频率和音量  */
    if(SYS_msg1_data5_speed<=20)
    {
        /*0.1查表获取音量 */
        SYS_msg1_data6_vol = speed2volume_tab[20-SYS_msg1_data5_speed] ;
        /*0.2系统音量转化为唯创WTV600语音IC的音量
        *     系统为0-40,唯创为0-15; 因此系数为15/40,也即3/8   
        */
        SYS_vol = SYS_msg1_data6_vol *3/8 +0xE0;
        SYS_vol_last = SYS_vol -1;//产生音量刷新的条件
    }
    else
    {
        //刷新成最小音量
        SYS_vol         = 0xE0;
        SYS_vol_last    = 0xE1;
    }
    
    /* 1- 根据速度发出提示音: 在2-20km/h区间,其余静音*/
    if( SYS_msg1_data5_speed<2 )
    {
        SYS_song = SONG9_SILENT;
        SYS_song_last = SONG0_DIDIDI;
    }
    else if(SYS_msg1_data5_speed>=2 && SYS_msg1_data5_speed<=20 )
    {
        SYS_song = SONG0_DIDIDI;
        SYS_song_last = SONG9_SILENT;
        
        
    }
    else if(SYS_msg1_data5_speed>20 )
    {
        SYS_song = SONG9_SILENT;
        SYS_song_last = SONG0_DIDIDI;
    }
     //1- 传统控制思路: 有不同的控制值 ,就更新 
    /* 1-声源更新处理 */
    if(SYS_song != SYS_song_last)
    {
        SYS_song_last = SYS_song;//把当前SYS_song清除
        Audio_playsong(SYS_song_last);//播放当前song,播放完
    }
    /* 2-声源频率更新处理 */
    if(SYS_tune != SYS_tune_last)
    {
        SYS_tune_last = SYS_tune;//把当前SYS_song清除
        _delay_ms(5);
        Line_1A_WTN(SYS_tune_last);//播放当前song,播放完
    }
    /* 2-声源音量更新处理 */
    if(SYS_vol != SYS_vol_last)
    {
        SYS_vol_last = SYS_vol;//把当前SYS_song清除
        _delay_ms(5);
        Line_1A_WTN(SYS_vol_last);//播放当前song,播放完
    }
//2- 定时更新策略,间隔40ms,保证芯片不在忙状态;
//    if(f40ms == true)
//    {
//        f40ms = false;
//        /* 1-依次发出声音 */
//        Audio_playsong(SYS_song); 
//        _delay_ms(5);
//        /* 2-频率 */
//        Line_1A_WTN(SYS_tune); 
//        _delay_ms(5);
//        /* 3-音量 */
//        Audio_playsong(SYS_vol); 
//        
//    }
    
    
}
 送上一个新唐M0的代码 ,将就看下吧.
 
 |