以智能屏和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[i]);
- delay_us(2);
- }
- }
- // 发送音量指令
- void play_b(void)
- {
- u8 i;
- for(i=0;i<10;i++)
- {
- UART2_Sendbyte(cmd6[i]);
- 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[i]);
- 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[i]);
- 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[i];
- }
- 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[i];
- }
- cmd6[8] = (unsigned char)~checksum;
- }
- void main(void)
- {
- u16 u,up,ud;
- InitCPU(); // 9600BPS
- Starttimer(1,50);
- ud=10;
- setVolume(10);
- play_b();
- up=0;
- p=0;
- while(1)
- {
- Communication_CMD(2);
- u=Read_Dgus(0x1000);
- if(u!=up)
- {
- 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”,下载到智能屏即可。真可谓是成本极低,收获极大。
工程文件:
触摸式MP3播放器功能演示:
[media]https://www.bilibili.com/video/BV1Xi4y1k7mY/[/media]