——文档转载自电子发烧友
想要完成对触摸式MP3音乐播放器的制作,需要制作一个有中文歌单的界面和相应的键值发送处理,其它的则是交由外部的 开发板来处理。 迪文智能屏的界面形式如图1所示,通过翻页处理可以选取更多页的歌单。
图1界面形式
在功能设计方面,主要使用了数据变量显示控件、基础触控控件及增量调节控件,其中数据变量显示控件则用于显示选择值,基础触控控件用于页面切换及歌曲选择,增量调节控件用于音量调节,其设计界面见图2所示。
图2设计界面
由于要区分选取歌曲的编号和调节的音量值,故设2个变量地址来分别存放,其中0X1000用于歌曲选择,而0X1002则用于音量调节(0-32)。对于增量调节属性的设置,见图3所示。
图3增量调节的属性设置
音量调节变量的属性设置,见图4所示。歌单基础触控控件的属性设置,见图5所示。
图4音量调节变量属性设置 图5歌单基础触控控件属性设置
在完成界面制作后,其配置文件按图6所示进行设置。
图6配置文件设置
在程序下载后,通过触摸操作其输出如图7所示,说明在触控操作能正确发送信息。
图7触控测试
在使用gd32L233开发板的情况下,其信息转换测试如图8所示,即下载歌曲编号2时,可转换为MP3的对应播放指令。
图8转换测试
经测试,触控的播放操作还是顺手和方便的。
二、结构简洁的MP3音乐播放器
以智能屏和MP3音乐播放模块构成音乐播放器前面已经介绍过,当时由于对智能屏的知识储备还不够充足,因此是采用 开发板作为中介,通过对数据的转换处理来实现的。在掌握了C语言开发之后,这种转换机制就完全成了一种多余,它不但可以省去开发板的参与,减少协议转换的中间环节,还能节省不必要的能耗,可谓是受益多多。
简化后的硬件构成如图1所示,即将MP3模块的电源接到智能屏的5V电源上,而模块的串口接收引脚则接到转接板的TX2。可见只需一个MP3播放模块就使智能屏增添了音频播放的功能,使其在多媒体的性能上又增添了一抹色彩。
图1硬件构成 图2原硬件构成
图3MP3引脚分配
在界面的设计上,则无需进行调整和效果,见图4所示,所需控件见图5所示。
图4界面设计 图5界面所用控件
省去开发板的成本只需添加一段C51的程序,其程序代码如下: void play_a(void) { u8 i; for(i=0;i<10;i++) { UART2_Sendbyte(cmd3); delay_us(2); } } void play_b(void) { u8 i; for(i=0;i<10;i++) { UART2_Sendbyte(cmd6); delay_us(2); } } // 发送暂停指令 void play_c(void) { u8 i; u8 cmd4[10] = {0X7E, 0xFF, 0x06, 0X0E, 0x00, 0x00, 0x00, 0xFE, 0xED, 0XEF}; //pause for(i=0;i<10;i++) { UART2_Sendbyte(cmd4); delay_us(2); } } // 发送播放指令 void play_d(void) { u8 i; u8 cmd[10] = {0X7E, 0xFF, 0x06, 0X0D, 0x00, 0x00, 0x00, 0xFE, 0xEE, 0XEF}; //play for(i=0;i<10;i++) { UART2_Sendbyte(cmd); delay_us(2); } } // 生成播放指令 void playn(int index) //play index { int i; unsigned char checksum = 0; cmd3[5] = (unsigned char)(index >> 8); cmd3[6] = (unsigned char)(index); for (i=2; i<8; i++) { checksum += cmd3; } cmd3[8] = (unsigned char)~checksum; } // 生成音量调节指令 void setVolume(unsigned char index) //setVolume index { unsigned char checksum = 0; int i; cmd6[6] = (unsigned char)(index); for (i=2; i<8; i++) { checksum += cmd6; } cmd6[8] = (unsigned char)~checksum; } void main(void) { u16 u,up,ud; InitCPU(); // 9600BPS ud=10; setVolume(10); play_b(); up=0; p=0; while(1) { Communication_CMD(2); u=Read_Dgus(0x1000); { if(u==17) play_c(); // pause if(u==18) play_d(); // play if(u<17) { playn(u); //play index play_a(); } up=u; } u=Read_Dgus(0x1002); if(u!=ud) { setVolume(u); play_b(); ud=u; } } } 该程序的处理机制就是,开机后先指定一个中间程度的音量,然后轮巡是否有按键被触摸,若有键按下并修改了相应变量的内容则加以分析处理,否则不予处理。
根据操作的性质,指令分为3类,即播放指定的歌曲、调节音量和控制播放进程,并分别由函数play_a()~play_d()来完成。
由于播放歌曲和音量调节都涉及数值的变化,所相应函数playn()和setVolume来生成相应的指令。
经编译和格式转换后,只需将生成的文件“T5L51.bin”,下载到智能屏即可。真可谓是成本极低,收获极大。
|