[开发工具] 【新定义MCU开发板测评】 +触控式MP3播放器的实现

[复制链接]
 楼主| jinglixixi 发表于 2022-11-19 00:10 | 显示全部楼层 |阅读模式
#申请原创#
为了充分利用新定义MCU开发板的资源,尤其是发挥触控板的特色而制作了该触控式MP3播放器。
它通过滑条来控制音量,以滑环来选择乐曲,以触控键来改变播放。此外,为了能更显示出歌曲名称,还为它配置了0.96寸的OLED屏。MP3播放模块则是由UART1来控制,其整体构成如图1所示。
其中:
OLED_SCL连接P44
OLED-SDA连接P45
MP3_RX  连接P13
1.jpg
1 整体构成


为实现中文歌单的显示,特配置了相应的中文字库,其结构如下:
  1. unsigned char Hzk[][32]={
  2. {0x20,0xC2,0x0C,0x80,0x04,0xA4,0xA4,0xBF,0xA4,0xA4,0x04,0x08,0x84,0x63,0x00,0x00},
  3. {0x04,0x04,0x7E,0x01,0x40,0xCF,0x54,0x44,0x34,0x2F,0xA0,0x41,0x20,0x18,0x06,0x00},

  4. {0x10,0x60,0x02,0x8C,0x00,0x88,0x88,0xFF,0x88,0x88,0x00,0xFE,0x22,0x22,0xFE,0x00},
  5. {0x04,0x04,0x7E,0x01,0x00,0x1F,0x08,0x08,0x08,0x9F,0x60,0x1F,0x42,0x82,0x7F,0x00},

  6. {0x10,0x60,0x02,0x8C,0x24,0x94,0x84,0xBD,0x86,0x84,0xBC,0x84,0x14,0x24,0x00,0x00},
  7. {0x04,0x04,0x7E,0x01,0x00,0x0E,0x0A,0x0A,0x0A,0x4A,0x8A,0x4B,0x38,0x00,0x00,0x00},

  8. ....

  9. };

对于该字库其汉字显示函数为:
  1. void OLED_ShowCHinese(u8 x,u8 y,u8 no)
  2. {
  3.         u8 t,adder=0;
  4.         OLED_Set_Pos(x,y);       
  5.     for(t=0;t<16;t++)
  6.         {
  7.                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
  8.                 adder+=1;
  9.     }
  10.         OLED_Set_Pos(x,y+1);
  11.     for(t=0;t<16;t++)
  12.         {
  13.                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
  14.                 adder+=1;
  15.     }
  16. }


为便于在播放乐曲的时候及时显示出歌曲名称,特配置了一个供OLED屏来显示的菜单函数,其内容如下:
  1. void  Menu(int m)
  2. {
  3.         OLED_ShowNum(0,2,m-3,2,16);
  4.         OLED_ShowChar(16,2,'-',16);
  5.         OLED_ShowString(30,2,"           ",16);
  6.         OLED_ShowString(30,4,"           ",16);
  7.         if(m==1)
  8.         {
  9.         OLED_ShowCHinese(30,2,0);
  10.         OLED_ShowCHinese(46,2,1);
  11.         OLED_ShowCHinese(62,2,2);
  12.         }
  13.         if(m==2)
  14.         {
  15.         OLED_ShowCHinese(30,2,3);
  16.         OLED_ShowCHinese(46,2,4);
  17.         OLED_ShowCHinese(62,2,5);
  18.         OLED_ShowCHinese(78,2,6);
  19.         }
  20.        
  21.         if(m==3)
  22.         {
  23.         OLED_ShowCHinese(30,2,7);
  24.         OLED_ShowCHinese(46,2,8);
  25.         }
  26.        
  27.         if(m==4)
  28.         {
  29.         OLED_ShowCHinese(30,2,9);
  30.         OLED_ShowCHinese(46,2,10);
  31.         }
  32.        
  33.         if(m==5)
  34.         {
  35.         OLED_ShowCHinese(30,2,11);
  36.         OLED_ShowCHinese(46,2,12);
  37.         OLED_ShowCHinese(62,2,13);
  38.         OLED_ShowCHinese(78,2,14);
  39.         }
  40.        
  41.         if(m==6)
  42.         {
  43.         OLED_ShowCHinese(30,2,15);
  44.         OLED_ShowCHinese(46,2,16);
  45.         OLED_ShowCHinese(62,2,17);
  46.         OLED_ShowCHinese(78,2,18);
  47.         OLED_ShowCHinese(94,2,19);
  48.         }
  49.        
  50.         if(m==7)
  51.         {
  52.         OLED_ShowCHinese(30,2,20);
  53.         OLED_ShowCHinese(46,2,21);
  54.         }       
  55.         if(m==8)
  56.         {
  57.         OLED_ShowCHinese(30,2,22);
  58.         OLED_ShowCHinese(46,2,23);
  59.         OLED_ShowCHinese(62,2,24);
  60.         OLED_ShowCHinese(78,2,25);
  61.         OLED_ShowCHinese(94,2,26);
  62.         OLED_ShowCHinese(30,4,27);
  63.         OLED_ShowCHinese(46,4,28);
  64.         }
  65.         if(m==9)
  66.         {
  67.         OLED_ShowCHinese(30,2,20);
  68.         OLED_ShowCHinese(46,2,21);
  69.         }
  70.         if(m==10)
  71.         {
  72.         OLED_ShowCHinese(30,2,29);
  73.         OLED_ShowCHinese(46,2,30);
  74.         OLED_ShowCHinese(62,2,31);
  75.         OLED_ShowCHinese(78,2,32);
  76.         OLED_ShowCHinese(94,2,33);
  77.         }
  78. }

2.jpg
2 播放控制

实现图2所示控制功能的主程序为:
  1. void main(void)
  2. {
  3.    USCI1_HandleInfoDef USCI1_HandleInfo;
  4.    SC_Init();
  5.    Sys_Init();
  6.    TouchKeyInit();
  7.    P4CON = 0xFF;
  8.    P4PH  = 0x01;
  9.    GPIO_Init(GPIO4, GPIO_PIN_4|GPIO_PIN_5,GPIO_MODE_OUT_PP);
  10.    OLED_Init();
  11.    OLED_Clear();
  12.    OLED_ShowString(20,0,"MP3 Player",16);
  13.    setVolume(20);
  14.    USCI1_HandleInfo.TxState = USCI1_STATE_READY;
  15.    USCI1_UART_Transmit(&USCI1_HandleInfo, cmd6, 10, 0xFFFF);
  16.    while(1)
  17.    {
  18.        Sys_Scan();
  19.   }
  20. }

演示视频:
https://www.bilibili.com/video/BV1rM411C7oh/?vd_source=f302fc0cc3a0425328db53a3b92082ca

相关链接:
1. MDM_2802屏中文菜单的MP3播放器
https://bbs.21ic.com/icview-3266358-1-1.html
2. 触摸控制及数值显示
https://bbs.21ic.com/icview-3265578-1-1.html
3. 双色OLED屏显示驱动
https://bbs.21ic.com/icview-3263564-1-1.html


nomomy 发表于 2023-3-10 16:41 | 显示全部楼层
非常棒的设计,后期可以用在实际生产和应用中。
cemaj 发表于 2023-3-10 17:08 | 显示全部楼层
可以做触摸功能的设计吗?              
juliestephen 发表于 2023-3-10 17:25 | 显示全部楼层
51内核的单片机性价比可以吗?              
xiaoyaodz 发表于 2023-3-10 17:30 | 显示全部楼层
评估板带的触摸的性能真是强大。              
bestwell 发表于 2023-3-10 17:35 | 显示全部楼层
这个触摸库会占用多大的内存              
 楼主| jinglixixi 发表于 2023-3-10 22:03 | 显示全部楼层
cemaj 发表于 2023-3-10 17:08
可以做触摸功能的设计吗?

肯定呀!
janewood 发表于 2023-3-11 19:52 | 显示全部楼层
mp3怎么使用DAC输出数据?              
 楼主| jinglixixi 发表于 2023-3-12 11:13 | 显示全部楼层
janewood 发表于 2023-3-11 19:52
mp3怎么使用DAC输出数据?

MP3模块把这些都解决了,串口发指令控制即可。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2934

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部