題目 : 迷你電子琴

11
1 題題 : 題題題題題 題題 :4980D005 題題題 4980D061 題題題 題題題題 : 題題題

Upload: fletcher-hampton

Post on 03-Jan-2016

121 views

Category:

Documents


1 download

DESCRIPTION

題目 : 迷你電子琴. 微處理機應用暨實習報告. 組員 :4980D005 楊仁緯 4980D061 林家鵬 指導老師 : 郭晉魁. 目錄. 凌陽 SPCE061A 晶片模組 ----------------------3 副板模組 ----------------------------------4 電子琴簡介 --------------------------------5 迷你電子琴 --------------------------------6 流程圖 ------------------------------------7 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 題目 : 迷你電子琴

1

題目 :迷你電子琴

組員 :4980D005 楊仁緯 4980D061 林家鵬 指導老師 :郭晉魁

Page 2: 題目 : 迷你電子琴

2

目錄 凌陽 SPCE061A 晶片模組 ----------------------3

副板模組 ----------------------------------4

電子琴簡介 --------------------------------5

迷你電子琴 --------------------------------6

流程圖 ------------------------------------7

程式碼 ----------------------------------8~10

成品展示 ---------------------------------11

Page 3: 題目 : 迷你電子琴

3

凌陽 SPCE061A 晶片模組

Page 4: 題目 : 迷你電子琴

4

副板模組

Page 5: 題目 : 迷你電子琴

5

電子琴簡介 基本功能 標準鍵盤( 49 鍵、 54 鍵、 61 鍵、 76 鍵、 78 鍵、 88 鍵),少於 61 鍵者,大多為玩具 音色切換(切換演奏的樂器) 節奏切換 音量控制 自動伴奏(和弦) 詳細介紹 電子琴,以鍵盤形態出現的一種樂器。由音色、自動節奏,自動和弦三大部分組成。 電子琴有模擬各種樂器的豐富的音色庫,我們可以根據樂曲的需要,選用合適的音色,來訓

練各種演奏法。 電子琴的自動節奏部分,為老師給學生進行節奏感的教學提供了有利條件。老師可讓學生合

著自動節奏反覆打拍子,甚至可以運動身體,比如合著節奏踏步、走步等,從中用心和身體去領略各種節奏的律動。

電子琴的演奏有較大一部分是通過自動和弦伴奏來配合完成的,在音樂中和弦的連接推動了旋律地進行,不同的和聲連接,形成了不同的音樂色彩。

Page 6: 題目 : 迷你電子琴

6

迷你電子琴

利用 1~8 的按鍵,發出 DO、 RE 、 MI 、

FA 、 SO 、 LA 、 SI 、 DO 聲音,並且對應的

LED 燈會發光。

Page 7: 題目 : 迷你電子琴

7

開始

讀取A_Prot的值

判斷A_Prot的值為何,撥放對應音

樂。

結束

無窮迴圈撥放完音樂等待下一個A-Port的值

i nt key; / /按鍵值I ni t_A_Port(); / /規劃 A/ B Port I ni t_B_Port(); / / I O初始化完成 whi l e (1)/ /無窮迥圈{key = *P_I OA_Data; / /讀取A Port值key = ~key; / /輸入為負邏輯,所以將位元反向成正邏輯key &= 0x00ff ; / /保留I OA0-7共8 bi t*P_I OB_Data = key | 0x4000; / /輸出至B Portfi nd(key);}

voi d fi nd(unsi gned i nt r2){ unsi gned i nt i ; f or ( i =0; i <8; i ++){ i f (tabl e2[i ] == r2) { pl aysound(i ) ; / /播放聲音}}}

char tabl e2[8]={1, 2, 4, 8, 16, 32, 64, 128}; voi d pl aysound(i nt SPEECH_1){ SACM_A2000_I ni t i al (1); / /自動方式播放初始化 SACM_A2000_Pl ay(SPEECH_1, DAC1, Ramp_UpDn_On); / /定義語音索引號、播放通道、允許音量增/減調節 whi l e(SACM_A2000_Status()&01) SACM_A2000_Servi ceLoop(); / /獲取語音資料並將其填入解碼佇列 }

Page 8: 題目 : 迷你電子琴

8

程式碼 #1 #include "SPCE061A.H" #define DAC1 1 #define DAC2 2 #define Ramp_UpDn_Off 0 #define Ramp_Up_On 1 #define Ramp_Dn_On 2 #define Ramp_UpDn_On 3 void delay(); void Init_B_Port(); char table2[8]={1,2,4,8,16,32,64,128}; void playsound(int SPEECH_1) { SACM_A2000_Initial(1); // 自動方式播放初始化 SACM_A2000_Play(SPEECH_1,DAC1,Ramp_UpDn_On); // 定義語音索引號、播放通道、允許音量增 /減調節 while(SACM_A2000_Status()&01) SACM_A2000_ServiceLoop();//獲取語音資料並將其填入解碼佇列 }

Page 9: 題目 : 迷你電子琴

9

程式碼 #2 int main() { int key;// 按鍵值 Init_A_Port();//規劃 A/B Port Init_B_Port();//IO 初始化完成 while (1) {//無窮迥圈 key = *P_IOA_Data;//讀取 A Port值 key = ~key;//輸入為負邏輯 , 所以將位元反向成正邏輯 key &= 0x00ff;//保留 IOA0-7共 8 bit *P_IOB_Data = key | 0x4000;//輸出至 B Port find(key);} // while(1) } void find(unsigned int r2) { unsigned int i; for (i=0; i<8; i++) { if (table2[i] == r2) { playsound(i); // 播放聲音 } } } //======================================================

Page 10: 題目 : 迷你電子琴

10

程式碼 #3 void delay(unsigned int n) { int i; for (i=0; i<n; i++) ; *P_Watchdog_Clear = 0x0001;//清除看門狗計數器 } void Init_B_Port() { *P_IOB_Dir = 0xffff;//規劃 IOB0~7 為同相的低電位輸出 *P_IOB_Attrib = 0xffff;//規劃 IOB8~15 為反相的低電位輸出 *P_IOB_Data = 0xffff; } void Init_A_Port() { *P_IOA_Dir = 0x0000;//規劃 IOA0~7上拉電阻輸入 , IOA8~15沒用到 *P_IOA_Attrib = 0x0000; *P_IOA_Data = 0x00ff; }

Page 11: 題目 : 迷你電子琴

11

成品展示