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