迪文智能屏
直播中

jinglixixi

8年用户 1640经验值
擅长:嵌入式技术 光电显示 接口/总线/驱动 控制/MCU
私信 关注
[经验]

【迪文COF结构智能屏试用体验】+结构简洁的MP3音乐播放器

以智能屏和MP3音乐播放模块构成音乐播放器前面已经介绍过,当时由于对智能屏的知识储备还不够充足,因此是采用开发板作为中介,通过对数据的转换处理来实现的。在掌握了C语音开发之后,这种转换机制就完全此外了一种多余,它不但可以省去开发板的参与,减少协议转换的中间环节,还能节省不必要的能耗,可谓是收益多多。

简化后的硬件构成如图1所示,即将MP3模块的电源接到智能屏的5V电源上,而模块的串口接收引脚则接到转接板的TX2。

可见只需一个MP3播放模块就使智能屏增添了音频播放的功能,使其在多媒体的性能上又增添了一抹色彩。
1.jpg
图1硬件构成
2.jpg
图2原硬件构成
3.jpg
图3MP3引脚分配
在界面的设计上,则无需进行调整和效果,见图4所示,所需控件见图5所示。
4.jpg
图4界面设计
5.jpg
图5界面所用控件
省去开发板的成本只需添加一段C51的程序,其程序代码如下:
  1. // 发送播放指令
  2. void play_a(void)
  3. {
  4. u8 i;
  5. for(i=0;i<10;i++)
  6. {
  7. UART2_Sendbyte(cmd3[i]);
  8. delay_us(2);
  9. }
  10. }
  11. // 发送音量指令
  12. void play_b(void)
  13. {
  14. u8 i;
  15. for(i=0;i<10;i++)
  16. {
  17. UART2_Sendbyte(cmd6[i]);
  18. delay_us(2);
  19. }
  20. }
  21. // 发送暂停指令
  22. void play_c(void)
  23. {
  24. u8 i;
  25. u8 cmd4[10] = {0X7E, 0xFF, 0x06, 0X0E, 0x00, 0x00, 0x00, 0xFE, 0xED, 0XEF}; //pause
  26. for(i=0;i<10;i++)
  27. {
  28. UART2_Sendbyte(cmd4[i]);
  29. delay_us(2);
  30. }
  31. }
  32. // 发送播放指令
  33. void play_d(void)
  34. {
  35. u8 i;
  36. u8 cmd[10] =  {0X7E, 0xFF, 0x06, 0X0D, 0x00, 0x00, 0x00, 0xFE, 0xEE, 0XEF};  //play
  37. for(i=0;i<10;i++)
  38. {
  39. UART2_Sendbyte(cmd[i]);
  40. delay_us(2);
  41. }
  42. }
  43. // 生成播放指令
  1. void playn(int index) //play index
  2. {
  3. int i;
  4. unsigned char checksum = 0;
  5. cmd3[5] = (unsigned char)(index >> 8);
  6. cmd3[6] = (unsigned char)(index);
  7. for (i=2; i<8; i++)
  8. {
  9. checksum += cmd3[i];
  10. }
  11. cmd3[8] = (unsigned char)~checksum;
  12. }
  13. // 生成音量调节指令
  14. void setVolume(unsigned char index)  //setVolume index
  15. {
  16. unsigned char checksum = 0;
  17. int i;
  18. cmd6[6] = (unsigned char)(index);
  19. for (i=2; i<8; i++)
  20. {
  21. checksum += cmd6[i];
  22. }
  23. cmd6[8] = (unsigned char)~checksum;
  24. }
  25. void main(void)
  26. {
  27. u16 u,up,ud;
  28. InitCPU();               //  9600BPS
  29. Starttimer(1,50);
  30. ud=10;
  31. setVolume(10);
  32. play_b();
  33. up=0;
  34. p=0;
  35. while(1)
  36. {
  37. Communication_CMD(2);
  38. u=Read_Dgus(0x1000);
  39. if(u!=up)
  40. {
  41. if(u==17) play_c();  // pause
  42. if(u==18) play_d();  // play
  43. if(u<17)
  44. {
  45. playn(u);      //play index
  46. play_a();
  47. }
  48. up=u;
  49. }
  50. u=Read_Dgus(0x1002);
  51. if(u!=ud)
  52. {
  53. setVolume(u);
  54. play_b();
  55. ud=u;
  56. }
  57. }
  58. }
该程序的处理机制就是,开机后先指定一个中间程度的音量,然后轮巡是否有按键被触摸,若有键按下并修改了相应变量的内容则加以分析处理,否则不予处理。

根据操作的性质,指令分为3类,即播放指定的歌曲、调节音量和控制播放进程,并分别由函数play_a()~play_d()来完成。

由于播放歌曲和音量调节都涉及数值的变化,所相应函数playn()和setVolume来生成相应的指令。

经编译和格式转换后,只需将生成的文件“T5L51.bin”,下载到智能屏即可。真可谓是成本极低,收获极大。

工程文件:
触摸式MP3播放器功能演示:
[media]https://www.bilibili.com/video/BV1Xi4y1k7mY/[/media]

回帖(3)

华仔stm32

2022-4-7 16:35:37
我就想问一下,屏上面开发,有哪里有教程吗?强大去了。
1 举报
  • jinglixixi: 不过这次活动后,会积累许多的案例,如果厂家有意的话可集成一本书出版。

jinglixixi

2022-4-7 23:16:42
好像只有厂家的使用资料,开发技术和经验目前还是大家探索的目标。
1 举报
  • 华仔stm32: 我是想如果是简单的工程能利用屏上的资源成本就会降下很多。

华仔stm32

2022-4-8 10:30:02
我是想如果是简单的工程能利用屏上的资源成品就会降下很多。
1 举报
  • jinglixixi: 没错,对于一般规模的应用一块迪文屏就可以解决问题,因为它是双核的,自身就带有一个51单片机。

更多回帖

发帖
×
20
完善资料,
赚取积分