一、前言
第一次使用瑞薩的板子和RTT studio開發環境,跟著瑞薩活動的實踐步驟,從最初的不適應,到慢慢熟悉,現在覺得RTT studio的IDE做得非常方便,瑞薩的教程也做的十分詳細。但是因為工作原因,空閑時間有限,只跑了相關的幾個外設實驗,做了一個簡易的音樂播放器,用按鈕進行歌曲切換。后續將繼續研究其他的外設應用。
二、硬件連接
用到的硬件資源:
1、UART9: P109/P110
2、按鍵輸入(P004)
3、PWM輸出:P500
4、SPI0
三、軟件工具
1、環境搭建
? rt-thread studio 安裝;
? 靈活配置軟件包(FSP)
? CPK-RA2L1板級支持包安裝
? usb轉串口工具
(具體的步驟可參考瑞薩RA2L1開發實踐指南,圖文并茂,十分詳細)
2、另外用到軟件:
(1)中景園電子1.8寸顯示屏自帶漢字編碼軟件
(2)音樂編碼軟件Music Encode,通過手動輸入簡譜進行轉換,如下圖所示。
四、關鍵代碼:
play.c
int player_next(player_t player)
{
uint16_t len;
rt_uint32_t level;
/* 關閉全局中斷 /
level = rt_hw_interrupt_disable();
/ 將當前播放歌曲的序號 加一 /
if (player->song_current < player->song_num)
{
player->song_current ++;
}
else
{
player->song_current = 1;
}
g_songnum = player->song_current;
/ 更新播放器的當前歌曲的播放時間以及總時間 /
player->song_time_pass = 0;
/ 打開全局中斷 /
rt_hw_interrupt_enable(level);
player->decode->control(player->song_sheet[player->song_current - 1], DECODE_OPS_CMD_GET_LEN, &len);
/ 關閉全局中斷 /
level = rt_hw_interrupt_disable();
player->song_time_all = len;
/ 打開全局中斷 */
rt_hw_interrupt_enable(level);
if (player->status != PLAYER_RUNNING)
{
player_play(player);
}
return 0;
}
LCD.c
void lcd_thread_handler(void *parameter)
{
rt_uint8_t temp = 0;
rt_kprintf("lcd thread handler!");
LCD_Init();
LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
lcd_show_menu();
while(1)
{
rt_kprintf("lcd thread running!");
if(temp != g_songnum)
{
rt_kprintf("lcd,temp = %d,g_songnum = %d",temp,g_songnum);
temp = g_songnum;
LCD_Fill(1,128+8,LCD_W,LCD_H,WHITE);
}
lcd_show_pic1();
rt_thread_mdelay(500);
}
}
void lcd_show_menu(void)
{
LCD_ShowPicture(0,0,127,128,gImage_music);
LCD_ShowChinese(30,128-10,"正在播放",RED,WHITE,16,0);
LCD_ShowChinese(1,128+8,"快樂父子倆",RED,WHITE,16,0);
}
void lcd_show_pic1(void)
{
switch (g_songnum){
case 1 :LCD_ShowChinese(1,128+8,"快樂父子倆",RED,WHITE,16,0);break;
case 2 :LCD_ShowChinese(1,128+8,"葫蘆娃",RED,WHITE,16,0);break;
case 3 :LCD_ShowChinese(1,128+8,"送別",RED,WHITE,16,0);break;
case 4 :LCD_ShowChinese(1,128+8,"兩只老虎",RED,WHITE,16,0);break;
default: break;
}
}
key.h
#define KEY_NEXT_PIN 4
key.c
int key_init(void)
{
btn_last.press_logic_level = KEY_PRESS_LEVEL;
btn_last.hold_cyc_period = 100;
btn_last.cb = (my_button_callback)btn_cb;
btn_next = btn_play = btn_last;
btn_last.pin = KEY_PLAY_PIN;
btn_play.pin = KEY_LAST_PIN;
btn_next.pin = KEY_NEXT_PIN;
my_button_register(&btn_last);
my_button_register(&btn_play);
my_button_register(&btn_next);
my_button_start();
return 0;
}
-
LCD屏
+關注
關注
0文章
122瀏覽量
15397 -
音樂播放器
+關注
關注
0文章
67瀏覽量
15762 -
UART接口
+關注
關注
0文章
124瀏覽量
15267 -
PWM輸出
+關注
關注
1文章
66瀏覽量
5121 -
RTThread
+關注
關注
8文章
132瀏覽量
40810
發布評論請先 登錄
相關推薦
評論