找个广州唯创的数据书册,里面有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的代码 ,将就看下吧.
|