通过控制不同EQ的增益,达到控制不同场景的效果 效果视频如下: https://v.youku.com/v_show/id_XNjQ4NTc2NjQzMg==.html 界面如下:
界面代码如下: void main(){ INIT_CPU(); //系统初始化 PORT_Init();//IO口初始化
T0_Init();//定时器0初始化 T2_Init();//定时器2初始化 my_UART4_Init(115200); uart_init();//串口初始化
ws2812_writ_byte(8); //LED初始化 resetEQValue(); delay_ms(1000); ChangePage(1); delay_ms(1000); updateScreenEQPage(Nature_screen);
while(1){ Uart_Handle_all(); OneMsHandle();//1Ms一次 TenMsHandle();
Read_0xF00();//数据自动上传 // data_change_sava();//数据改变自动保存 } }
void updateScreenEQPage(EQ_Screen_e screen) { u8send[10*2][2]; u8i=0;
if(screen>=EQ_MaxScreen) return;
for(i=0;i<10;i++) { EQv.Gain=ScreenGain[screen]+8; UserReadEQ[1]=ScreenGain[screen]+8; }
//更改上面显示的增益 memset(send,0,sizeof(send)); for(i=0;i<10;i++) { sprintf(send[i*2],"%d",ScreenGain[screen]); } write_dgusii_vp(0x1300,send,20);
//更改滑条内容显示 memset(send,0,sizeof(send)); for(i=0;i<10;i++) { send[1]=EQv.Gain; } write_dgusii_vp(0x1000,send,10);
//更改显示场景文本 memset(send,0,sizeof(send)); switch(screen) { case Nature_screen: sprintf(send,"自然"); break;
case YaoGun_screen: sprintf(send,"摇滚"); break;
case LiuXing_screen: sprintf(send,"流行"); break;
case JingDian_screen: sprintf(send,"经典"); break; } write_dgusii_vp(0x1500,send,3);
//更新从机的增益 updateAllEQGain(); }
void EQChangeSend(void) { u8Read[10][2]; u8send[10][2]; u8i=0; intgain=0;
memset(Read,0,sizeof(Read)); Read_Dgusii_Vp(0x1000,Read,10);
for(i=0;i<10;i++) { if(UserReadEQ[1]!=Read[1]) { UserReadEQ[1]=Read[1];
//更改上面显示的增益 gain=Read[1]-8; memset(send,0,sizeof(send)); sprintf(send,"%d",gain); write_dgusii_vp(0x1300+2*i,send,2); EQSenddata(i,Read[1]); break; } } }
解码板子代码如下:
voidUserUartRecHandle(const uart_bus_t *uart_bus,u8 *data,u16 len) { u8 retdata[30]; u8 i=0; struct eq_seg_info*tar_seg1; u32 eq_name = 7;
if(data[0]!=DwinLocal_addr) return;
switch(data[1]) { case 1://设置音量 app_audio_direct_set_volume(data[2]); retdata[i++]=0x15; memcpy(&retdata[1],&data[1],len-1); UserUartRetRec(uart_bus,retdata,len); break;
case 0x0b://更新EQ值 if(data[2]>9) break; tar_seg1=&music_mode.eq_parm.seg[data[2]]; u16 fre1=data[3]<<8|data[4]; float gain1=((data[5]&0x7f)*100+data[6]); gain1/=100; if(data[5]>=0X80) gain1=-gain1; float Q1=(data[7]*100+data[8]); Q1/=100; tar_seg1->freq=fre1; tar_seg1->gain=gain1; tar_seg1->q=Q1;
cur_eq_set_update(eq_name, tar_seg1,get_eq_nsection(eq_name), 0); #if 1 int gain=tar_seg1->gain*100; int q=tar_seg1->q*100; log_info("fre:%d,gain:%d.%d,Q/S:%d.%d",tar_seg1->freq, gain/100,gain%100, q/100,q%100); #endif break;
case 0x1b://更新指定增益 if(data[2]>9) break; tar_seg1=&music_mode.eq_parm.seg[data[2]]; tar_seg1->gain=data[3]-8;
cur_eq_set_update(eq_name, tar_seg1,get_eq_nsection(eq_name), 0); #if 1 gain=tar_seg1->gain*100; q=tar_seg1->q*100; log_info("fre:%d,gain:%d.%d,Q/S:%d.%d",tar_seg1->freq, gain/100,gain%100, q/100,q%100); #endif break;
case 0x1C://更新指定增益 int k=0;
for(k=0;k<10;k++) { tar_seg1=&music_mode.eq_parm.seg[k]; tar_seg1->gain=data[2+k]-8; cur_eq_set_update(eq_name, tar_seg1,get_eq_nsection(eq_name), 0); #if 1 gain=tar_seg1->gain*100; q=tar_seg1->q*100; log_info("fre:%d,gain:%d.%d,Q/S:%d.%d",tar_seg1->freq, gain/100,gain%100, q/100,q%100); #endif } break;
} }
|