日子过的飞快,眨眼间测评期就要结束了,收获还是满多的,从零积累到多种功能配置的灵活使用。 本次介绍的是使用串口来控制MP3播放模块,以选取歌曲的播放内容,其硬件构成包括: 1.双色OLED屏,以显示歌曲名称等; 2.MP3播放模块,及朋友送的T卡以存放MP3音乐; 3.扬声器以产生音箱效果; 4. NXP OKdo E1开发板,及其板载的小按键以选择播放内容; 5.以USB接口来提供电源支持。 图1 硬件构成
由于MP3播放模块的控制要用到串口,故先对串口的通讯功能进行了测试及功能修改。 在测试过程中,所用的串口为USART2,占用的引脚为PIO0_27和PIO1_24,见图2所示。 图2 USART2的引脚占用
经程序的修改及测试,串口能以字节的方式来发送MP3播放模块的控制指令,见图3所示。 有了串口的控制功能,设计的目标就基本实现了一半,接上MP3播放模块就已经能听音乐了! 图3 发送MP3控制指令
下面就该MP3播放模块上场了,该模块的引脚分别如图4所示。 图4 MP3 播放模块引脚图
其中,SPK_1和SPK_2连接扬声器,VCC和GND连接电源,RX和TX则交换连接串口的USART2。 MP3播放模块的指令集比较小,故可以将其存放在数组中以便调用。 其形式为: uint8_tcmd[10] = {0X7E, 0xFF, 0x06, 0X0D, 0x00,0x00, 0x00, 0xFE, 0xEE, 0XEF}; //play uint8_tcmd3[10] = {0x7E, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x01, 0xFE, 0xF7, 0XEF}; //*play index uint8_tcmd6[10] = {0X7E, 0xFF, 0x06, 0X06, 0x00, 0x00, 0x10, 0xFE, 0xE5, 0XEF}; //*set Volume 指令测试的主程序为: - int main(void)
- {
- POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv, kPOWER_BodHystLevel50mv, false);
- BOARD_BootClockFROHF96M();
- CLOCK_EnableClock(kCLOCK_Iocon);
- //FC2_RXD PIO1_24
- IOCON->PIO[1][24] = (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGITAL_EN );
- //FC2_TXD PIO0_27
- IOCON->PIO[0][27] = (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGITAL_EN );
- CLOCK_DisableClock(kCLOCK_Iocon);
- usart_config_t s_UARTConfig;
- CLOCK_AttachClk(kFRO12M_to_FLEXCOMM2);
- USART_GetDefaultConfig(&s_UARTConfig);
- s_UARTConfig.baudRate_Bps = 9600;
- s_UARTConfig.enableTx = true;
- s_UARTConfig.enableRx = false;
- USART_Init(USART2, &s_UARTConfig, 12000000);
- USART_WriteBlocking(USART2, g_WelcomeBuffer, strlen((const char *)g_WelcomeBuffer));
- USART_WriteBlocking(USART2, cmd, 10);
- while (1)
- {
- }
- }
复制代码
实现了播放功能后,我们还要为它配上中文的歌单选择界面,并由OLED屏来显示,其效果如图5所示。 图5 歌曲播放及选择界面
在板载按键的配合下,歌单的处理程序如下: - while (1)
- {
- if(key_read()== KEY3_NUM) // WAKE
- {
- while(key_read()== KEY3_NUM);
- num++;
- if(num >= 6) num=0;
- }
- if(key_read()== KEY1_NUM) // USER
- {
- while(key_read()== KEY1_NUM);
- if(num >0) num--;
- }
- if(key_read()== KEY2_NUM) // ISP
- {
- playn(num); //play index
- USART_WriteBlocking(USART2, cmd3, 10);
- }
- }
- OLED_ShowNum(0,4,num,1,16);
- if(num== 0)
- {
- OLED_ShowString(24,4," ",16);
- OLED_ShowCHinese(24,4,0);
- OLED_ShowCHinese(40,4,1);
- }
- if(num== 1)
- {
- OLED_ShowString(24,4," ",16);
- OLED_ShowCHinese(24,4,2);
- OLED_ShowCHinese(40,4,3);
- }
- if(num== 2)
- {
- OLED_ShowCHinese(24,4,4);
- OLED_ShowCHinese(40,4,5);
- OLED_ShowCHinese(56,4,6);
- }
- 。。。
- SysTick_DelayTicks(200U);
- }
复制代码 在按键的功能分配上,其功能划分为: WAKE键:向下选取歌曲; USER键:向上选取歌曲; ISP键: 控制歌曲的播放 此外,若使用I/O来读取MP3的运行状态,还能对MP3的播放音量加以调节。
尽管试用有期限,但对NXP OKdo E1发板的探索之路还会继续,在此再次对活动的组织者及开发板的资助方表示感谢,并祝大家事业兴旺发达!
|