迪文科技论坛

 找回密码
 立即注册
搜索
查看: 23|回复: 0

【2025.03.14获奖项目】U盘播放器-歌词显示

[复制链接]

584

主题

172

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12865
发表于 4 天前 | 显示全部楼层 |阅读模式
【开源】U盘播放器-歌词显示

该方案采用T5L智能屏,使用modbus的T5L 自定义程序,通过串口连接解码板和屏幕,支持播放U盘歌曲,屏幕实时显示歌词。

视频效果如下:

界面显示如下:











  1. 屏幕代码如下:
  2.        INIT_CPU();  //系统初始化
  3.        PORT_Init();//IO口初始化

  4.        T0_Init();//定时器0初始化
  5. //     T1_Init();
  6.        T2_Init();//定时器2初始化
  7. //     WDT_ON();           //打开开门狗 喂狗在定时器T2中      
  8.        my_UART4_Init(115200);
  9.        uart_init();//串口初始化

  10. void MainMachineHandle(void)
  11. {
  12.        if(UartDataHandle)
  13.        {
  14.               uartHandle(Uart4_Rx,uart4_rx_count);
  15.               CLR_UartMp3();
  16.        }
  17. }

  18. 图形剪切函数
  19. void VolCutDisp(VolCutDispLog_Para_s *Para)
  20. {
  21.        u8data WriteBuff[10][2];
  22.        u8VolC=0;
  23.        u16Endaddrx=0;

  24.        VolC=Para->Vol;
  25.        memset(WriteBuff,0,sizeof(WriteBuff));
  26.        WriteBuff[0][1]=6;//固定
  27.        WriteBuff[1][1]=1;//固定
  28.        WriteBuff[2][1]=Para->CutPage;//音量条所在页面

  29.        WriteBuff[3][0]=Para->CutbegXY[0]>>8;//开始地址 X
  30.        WriteBuff[3][1]=Para->CutbegXY[0]&0xff;//X
  31.        WriteBuff[4][0]=Para->CutbegXY[1]>>8;//Y
  32.        WriteBuff[4][1]=Para->CutbegXY[1]&0xff;//Y

  33.        Endaddrx=Para->CutbegXY[0]+VolC*0.01*Para->LogoLen;//结束地址
  34.        WriteBuff[5][0]=Endaddrx>>8;//X
  35.        WriteBuff[5][1]=Endaddrx&0xff;//X
  36.        WriteBuff[6][0]=Para->CutendXY[1]>>8;//Y
  37.        WriteBuff[6][1]=Para->CutendXY[1]&0xff;//Y

  38.        WriteBuff[7][0]=Para->localPageXY[0]>>8;
  39.        WriteBuff[7][1]=Para->localPageXY[0]&0xff;
  40.        WriteBuff[8][0]=Para->localPageXY[1]>>8;
  41.        WriteBuff[8][1]=Para->localPageXY[1]&0xff;
  42.        WriteBuff[9][1]=0XFF;

  43.        write_dgusii_vp(Para->CutDispaddr,WriteBuff[0],10);
  44. }

  45. void UpanPlaySliderLogo(void)
  46. {
  47.        staticu8 VolC=102;
  48.        u8data Readdtata[2];
  49.        VolCutDispLog_Para_sUpanPlayLog;

  50.        if(NowPage[1]!=4)
  51.        {
  52.               VolC=0x102;
  53.               return;
  54.        }

  55.        Read_Dgusii_Vp(0x17B8,Readdtata,1);
  56.        if(VolC==Readdtata[1])
  57.               return;
  58.        VolC=Readdtata[1];

  59.        UpanPlayLog.LogoLen=459;//长度
  60.        UpanPlayLog.CutPage=13;//剪切图形所在页面
  61.        UpanPlayLog.CutDispaddr=0x8000;//基本图形地址
  62.        UpanPlayLog.Vol=VolC;//0~100音量值
  63.        UpanPlayLog.CutbegXY[0]=160;//剪切图形左上角开始地址X
  64.        UpanPlayLog.CutbegXY[1]=386;//剪切图形左上角开始地址Y
  65.        UpanPlayLog.CutendXY[0]=619;//剪切图形右下角开始地址X
  66.        UpanPlayLog.CutendXY[1]=398;//剪切图形右下角结束地址Y
  67.        UpanPlayLog.localPageXY[0]=160;
  68.        UpanPlayLog.localPageXY[1]=386;

  69.        VolCutDisp(&UpanPlayLog);
  70. }

  71. STM32 代码如下:
  72. void LoopHandle_task(void *p_arg)
  73. {
  74.        delay_ms(1000);
  75.        Init_Mp3data();
  76.        DMT_ChangePage(1);

  77.        while(1)
  78.        {
  79.               LCD_Handle();
  80.               Mp3PlayProcess();                 
  81.               UdiskDisInOut();                         vTaskDelay(LoopHandle_ms/portTICK_PERIOD_MS);
  82.        }
  83. }

  84. void LCD_Handle(void)
  85. {
  86.        DMT_Action1();                                  //循环检测屏幕上是否有数据发生改变

  87.        Mp3SongSchedUp();             //MP3播放的进度条
  88.        USB_PlayDispSongName();//歌曲名称更新
  89.        MusicPlayLysic();//更新歌曲名称
  90. }

  91. 歌词显示
  92. void MusicPlayLysic(void)
  93. {
  94.        staticu16 counttime=0;
  95.        staticu8 nolrc=0;
  96.        staticu16 crc1=0,crc2=0;
  97.        u16crcb1=0,crcb2=0;
  98. //     staticu8 updataLysci=0;
  99.        u8ReadBufout1[64][2];
  100.        u8ReadBufout2[64][2];
  101.        u8ReadBufin1[32][2];
  102.        u8ReadBufin2[32][2];

  103.        if(DmtDataBuf[MPageid][1]!=4)
  104.        {
  105.               counttime=0;
  106.               crc1=0;
  107.               crcb2=0;
  108.               nolrc=0;
  109.               return;
  110.        }

  111.        if(DmtDataBuf[MMp3Lrcaddr][1])
  112.        {
  113.               nolrc=0;
  114.               crcb1=CalcCrcAll(0xffff,DmtDataBuf[MMp3LrcReadaddr],64);
  115.               crcb2=CalcCrcAll(0xffff,DmtDataBuf[MMp3LrcReadaddr+32],64);

  116.               if(crcb1!=crc1||crc2!=crcb2)
  117.               {
  118.                      crc1=crcb1;
  119.                      crc2=crcb2;
  120.                      memset(ReadBufout1,0,sizeof(ReadBufout1));
  121.                      memset(ReadBufout2,0,sizeof(ReadBufout2));
  122.                      memset(ReadBufin1,0,sizeof(ReadBufin1));
  123.                      memset(ReadBufin2,0,sizeof(ReadBufin2));

  124.                      memcpy(ReadBufin1,DmtDataBuf[MMp3LrcReadaddr],64);
  125.                      memcpy(ReadBufin2,DmtDataBuf[MMp3LrcReadaddr+32],64);

  126. //                   All_unicodeToUtf(ReadBufin1,
  127. //                                               (u8 *)ReadBufout1,MusicLysicDoubleNULL(ReadBufin1,64));
  128. //                   All_unicodeToUtf(ReadBufin2,
  129. //                                               (u8 *)ReadBufout2,MusicLysicDoubleNULL(ReadBufin2,64));
  130.                      UnicodeToGbk((u16*)ReadBufin1,
  131.                                                   (u16 *)ReadBufout1,MusicLysicDoubleNULL((char*)ReadBufin1,64));
  132.                      UnicodeToGbk((u16*)ReadBufin2,
  133.                                                   (u16 *)ReadBufout2,MusicLysicDoubleNULL((char*)ReadBufin2,64));

  134. //                   ShuangYu_UTF_DispLysic(lv_label_get_text(lv_SY_UTF_top->songname),ReadBufout1,ReadBufout2);                    
  135.                      DMT_WriteLen(0x7100,ReadBufout1[0],32,1);
  136.                      DMT_WriteLen(0x7120,ReadBufout2[0],32,1);
  137.               }
  138.        }
  139.        elseif(nolrc==0)
  140.        {
  141.               nolrc=1;
  142.               crc1=0;
  143.               crcb2=0;

  144.               DMT_WriteLen(0x7100,"无",2,1);
  145.               ClearDGUSIIMemory(32,0x7120);
  146. //            ShuangYu_UTF_DispLysic(lv_label_get_text(lv_SY_UTF_top->songname),"无"," ");              
  147.        }
  148. }

  149. 解码板代码如下:
  150. void WritecmdHandle(void)
  151. {
  152.    ChangeModeTask();
  153.    SysVolSetting();     
  154.    BT_PlayPreNextPPSong();   
  155.    PlayModeFun();     
  156.    DirsclustReadSong();
  157.    PlaySclustSong();
  158.        UserTWS_Oper();
  159.        BreakSavePlay();
  160.        ClearTwsTransData();
  161.        TwsTransData();
  162.        BtLinkOper();
  163.        SYS_Reset();   
  164. }

  165. bool lrc_ui_show(int text_id, u8encode_type, u8 *buf, int len, u8 lrc_show_flag, u8 lrc_update)
  166. {
  167. #if 1//(CONFIG_UI_STYLE ==STYLE_JL_SOUNDBOX)
  168.               staticint disp_len = 0;
  169.               staticu8 lrc_showbytes = 0;
  170.               staticu8 offset = 0;
  171.               if(lrc_update) {
  172.                      disp_len= len;
  173.                      lrc_showbytes= 0;
  174.                      offset= 0;
  175.        //             ui_text_set_text_by_id(LRC_TEXT_ID_SEC, "", 16, FONT_DEFAULT);
  176.               }
  177.               if(lrc_show_flag == 1) {
  178.                      printf("encode_type:%d\r\n",encode_type);
  179.                      printf("id:%02d,%s\r\n",text_id,buf);//这里是显示歌曲 gbk编码

  180.                      ModReadReg[RD_SongLysicOn][0]=encode_type;

  181.                      if(text_id<2)
  182.                      {
  183.                             memset(ModReadReg[RD_MusicLy1+text_id*32],0,64);
  184.                             GbkToUnicode(buf,ModReadReg[RD_MusicLy1+text_id*32],32);
  185.                             //strcpy(ModReadReg[RD_MusicLy1+text_id],buf);
  186.                      }

  187.                      //log_info_hexdump(buf,len);
  188.               }
  189. #endif
  190.               returntrue;

  191. }


复制代码













本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-4-8 06:01 , Processed in 0.041694 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表