——来自迪文开发者论坛
本期为大家推送迪文开发者论坛获奖开源案例——基于T5L智能屏的音乐播放与歌词显示方案。该方案通过T5L串口与通用开发板、解码板进行数据交互,将解析完成的音频和歌词通过串口发送给智能屏,实现音乐播放、歌词显示、歌曲播放进度控制等功能,为用户打造流畅的视听体验。
GUI工程设计

C51工程设计
(1)T5L智能屏代码如下:
INIT_CPU();//系统初始化PORT_Init();//IO口初始化T0_Init();//定时器0初始化// T1_Init();T2_Init();//定时器2初始化// WDT_ON();//打开开门狗 喂狗在定时器T2中my_UART4_Init(115200);uart_init();//串口初始化void MainMachineHandle(void){ if(UartDataHandle) { uartHandle(Uart4_Rx,uart4_rx_count); CLR_UartMp3(); }}
(2)图形剪切函数:
void VolCutDisp(VolCutDispLog_Para_s *Para){ u8data WriteBuff[10][2]; u8VolC=0; u16Endaddrx=0; VolC=Para->Vol; memset(WriteBuff,0,sizeof(WriteBuff)); WriteBuff[0][1]=6;//固定 WriteBuff[1][1]=1;//固定 WriteBuff[2][1]=Para->CutPage;//音量条所在页面 WriteBuff[3][0]=Para->CutbegXY[0]>>8;//开始地址 X WriteBuff[3][1]=Para->CutbegXY[0]&0xff;//X WriteBuff[4][0]=Para->CutbegXY[1]>>8;//Y WriteBuff[4][1]=Para->CutbegXY[1]&0xff;//Y Endaddrx=Para->CutbegXY[0]+VolC*0.01*Para->LogoLen;//结束地址 WriteBuff[5][0]=Endaddrx>>8;//X WriteBuff[5][1]=Endaddrx&0xff;//X WriteBuff[6][0]=Para->CutendXY[1]>>8;//Y WriteBuff[6][1]=Para->CutendXY[1]&0xff;//Y WriteBuff[7][0]=Para->localPageXY[0]>>8; WriteBuff[7][1]=Para->localPageXY[0]&0xff; WriteBuff[8][0]=Para->localPageXY[1]>>8; WriteBuff[8][1]=Para->localPageXY[1]&0xff; WriteBuff[9][1]=0XFF; write_dgusii_vp(Para->CutDispaddr,WriteBuff[0],10);}void UpanPlaySliderLogo(void){ staticu8 VolC=102; u8data Readdtata[2]; VolCutDispLog_Para_sUpanPlayLog; if(NowPage[1]!=4) { VolC=0x102; return; } Read_Dgusii_Vp(0x17B8,Readdtata,1); if(VolC==Readdtata[1]) return; VolC=Readdtata[1]; UpanPlayLog.LogoLen=459;//长度 UpanPlayLog.CutPage=13;//剪切图形所在页面 UpanPlayLog.CutDispaddr=0x8000;//基本图形地址 UpanPlayLog.Vol=VolC;//0~100音量值 UpanPlayLog.CutbegXY[0]=160;//剪切图形左上角开始地址X UpanPlayLog.CutbegXY[1]=386;//剪切图形左上角开始地址Y UpanPlayLog.CutendXY[0]=619;//剪切图形右下角开始地址X UpanPlayLog.CutendXY[1]=398;//剪切图形右下角结束地址Y UpanPlayLog.localPageXY[0]=160; UpanPlayLog.localPageXY[1]=386; VolCutDisp(&UpanPlayLog);}
(3)通用开发板代码如下:
void LoopHandle_task(void *p_arg){ delay_ms(1000); Init_Mp3data(); DMT_ChangePage(1); while (1) { LCD_Handle(); Mp3PlayProcess(); UdiskDisInOut(); vTaskDelay(LoopHandle_ms / portTICK_PERIOD_MS); }}void LCD_Handle(void){ DMT_Action1(); // 循环检测屏幕上是否有数据发生改变 Mp3SongSchedUp(); // MP3播放的进度条 USB_PlayDispSongName(); // 歌曲名称更新 MusicPlayLysic(); // 更新歌曲名称}
(4)歌词显示:
void MusicPlayLysic(void){ static u16 counttime = 0; static u8 nolrc = 0; static u16 crc1 = 0, crc2 = 0; u16 crcb1 = 0, crcb2 = 0; // static u8 updataLysci = 0; u8 ReadBufout1[64][2]; u8 ReadBufout2[64][2]; u8 ReadBufin1[32][2]; u8 ReadBufin2[32][2]; if (DmtDataBuf[MPageid][1] != 4) { counttime = 0; crc1 = 0; crcb2 = 0; nolrc = 0; return; } if (DmtDataBuf[MMp3Lrcaddr][1]) { nolrc = 0; crcb1 = CalcCrcAll(0xffff, DmtDataBuf[MMp3LrcReadaddr], 64); crcb2 = CalcCrcAll(0xffff, DmtDataBuf[MMp3LrcReadaddr + 32], 64); if (crcb1 != crc1 || crc2 != crcb2) { crc1 = crcb1; crc2 = crcb2; memset(ReadBufout1, 0, sizeof(ReadBufout1)); memset(ReadBufout2, 0, sizeof(ReadBufout2)); memset(ReadBufin1, 0, sizeof(ReadBufin1)); memset(ReadBufin2, 0, sizeof(ReadBufin2)); memcpy(ReadBufin1, DmtDataBuf[MMp3LrcReadaddr], 64); memcpy(ReadBufin2, DmtDataBuf[MMp3LrcReadaddr + 32], 64);// All_unicodeToUtf(ReadBufin1,// (u8 *)ReadBufout1,MusicLysicDoubleNULL(ReadBufin1,64));// All_unicodeToUtf(ReadBufin2,// (u8 *)ReadBufout2,MusicLysicDoubleNULL(ReadBufin2,64)); UnicodeToGbk((u16*)ReadBufin1, (u16 *)ReadBufout1,MusicLysicDoubleNULL((char*)ReadBufin1,64)); UnicodeToGbk((u16*)ReadBufin2, (u16 *)ReadBufout2,MusicLysicDoubleNULL((char*)ReadBufin2,64));// ShuangYu_UTF_DispLysic(lv_label_get_text(lv_SY_UTF_top->songname),ReadBufout1,ReadBufout2); DMT_WriteLen(0x7100, ReadBufout1[0], 32, 1); DMT_WriteLen(0x7120, ReadBufout2[0], 32, 1); } } elseif(nolrc==0) { nolrc=1; crc1=0; crcb2=0; DMT_WriteLen(0x7100,"无",2,1); ClearDGUSIIMemory(32,0x7120);// ShuangYu_UTF_DispLysic(lv_label_get_text(lv_SY_UTF_top->songname),"无"," "); }}
(5)解码板代码如下:
void WritecmdHandle(void){ ChangeModeTask(); SysVolSetting(); BT_PlayPreNextPPSong(); PlayModeFun(); DirsclustReadSong(); PlaySclustSong(); UserTWS_Oper(); BreakSavePlay(); ClearTwsTransData(); TwsTransData(); BtLinkOper(); SYS_Reset();}bool lrc_ui_show(int text_id, u8encode_type, u8 *buf, int len, u8 lrc_show_flag, u8 lrc_update){#if 1//(CONFIG_UI_STYLE ==STYLE_JL_SOUNDBOX) staticint disp_len = 0; staticu8 lrc_showbytes = 0; staticu8 offset = 0; if(lrc_update) { disp_len= len; lrc_showbytes= 0; offset= 0; //ui_text_set_text_by_id(LRC_TEXT_ID_SEC, "", 16, FONT_DEFAULT); } if(lrc_show_flag == 1) { printf("encode_type:%d\r\n",encode_type); printf("id:%02d,%s\r\n",text_id,buf);//这里是显示歌曲 gbk编码 ModReadReg[RD_SongLysicOn][0]=encode_type; if(text_id<2) { memset(ModReadReg[RD_MusicLy1+text_id*32],0,64); GbkToUnicode(buf,ModReadReg[RD_MusicLy1+text_id*32],32); //strcpy(ModReadReg[RD_MusicLy1+text_id],buf); } //log_info_hexdump(buf,len); }#endif returntrue;}
全部0条评论
快来发表一下你的评论吧 !