|
该方案采用T5L智能屏,使用modbus的T5L 自定义程序,通过串口连接解码板和屏幕,支持播放U盘歌曲,屏幕实时显示歌词。
视频效果如下:
界面显示如下:
- 屏幕代码如下:
- 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();
- }
- }
- 图形剪切函数
- 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);
- }
- STM32 代码如下:
- 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();//更新歌曲名称
- }
- 歌词显示
- void MusicPlayLysic(void)
- {
- staticu16 counttime=0;
- staticu8 nolrc=0;
- staticu16 crc1=0,crc2=0;
- u16crcb1=0,crcb2=0;
- // staticu8 updataLysci=0;
- u8ReadBufout1[64][2];
- u8ReadBufout2[64][2];
- u8ReadBufin1[32][2];
- u8ReadBufin2[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),"无"," ");
- }
- }
- 解码板代码如下:
- 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;
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|