當前位置:編程學習大全網 - 編程語言 - 用單片機做電子琴,復音(合音)怎麽實現?

用單片機做電子琴,復音(合音)怎麽實現?

解析MIDI電子琴的設計用單片機是如何實現的

摘要:用單片機控制通用MIDI音源模塊制作制作出的電子琴,結構簡單,可靠性高,並且價格低廉,具有實用的價值。這種電子琴能夠支持單音和復音彈奏,如果與高品質的音源芯片連接,音質更可與高檔電子琴相媲美。我們在實驗過程中,也曾采用手機中通用的音樂芯片構成音源模塊,效果不錯,價格更低廉,如韓國產的QS6400 等,這些芯片的驅動要復雜壹些,需要對芯片進行初始化設置,詳細內容可參看國防工業出版社出版的《MIDI原理與開發應用》壹書中的相關章節。

關鍵字:電子琴,單片機,音源板,MD2064

1、電子琴的硬件設計方案

本電子琴包含48個按鍵鍵盤,即具有4個8度的音域,單片機AT89C51通過對所彈按鍵的識別,產生相應的MIDI消息。它支持單音彈奏和最多16個復音彈奏。電子琴結構示意圖和電路原理圖分別如圖1和圖2所示。AT89C51作為主控芯片,它使得鍵盤矩陣模塊、通道和音色選擇以及串口發送等各功能模塊協調工作。48按鍵行列式鍵盤矩陣構成MIDI電子琴的鍵盤掃描輸入端,由於89C51的P0口內部沒有上拉電阻,故這裏采用電阻R14——R21將列線拉至高電平,與六條行線組合完成48個琴鍵的掃描識別,在圖1中,單片機與鍵盤矩陣間的雙箭頭線表示單片機在掃描鍵盤矩陣時,P0口和P2口分別作為輸入/輸出口使用。人機接口電路則利用了單片機P1口的大部分口線,並通過或門向INT0發出中斷請求,該部分電路主要完成MIDI電子琴的通道設置和音色選擇等人機交互功能。鍵盤的彈奏信息以及通道、音色信息經CPU處理後,由串口將標準的MIDI數據發送給MIDI音源及放大器,推動揚聲器發聲。

圖1:MIDI電子琴結構示意圖

圖2:MIDI電子琴電路圖

音源模塊采用MD2064 套板,如圖3所示。它是壹種模塊化的MIDI音源產品,由得理電子公司開發,具有標準MIDI接口,該板能接受標準GM MIDI命令進行音樂播放,自帶3D, REVERB, CHORUS等效果處理。由於該套板的MIDI 接口采用了光耦合器,電流驅動,故設計了由Q1、Q2等器件組成的驅動電路,使單片機串口數據得以正常傳輸。在模塊的耳機輸出端取得信號後,經小功率放大即可推動揚聲器發聲。

2、電子琴的軟件設計特點

該電子琴軟件采用模塊化設計方法,程序也較簡單。軟件中各功能模塊都由相應的子程序完成,主要包含通道選擇模塊,音色選擇模塊,48按鍵鍵盤掃描模塊,串口發送模塊等,其中為了及時完成用戶命令,音色選擇模塊采用了中斷服務子程序,可以在演奏中快速響應使用者的請求。

主程序在完成串口初始化、相關變量的初始化以及設置通道後,即進入鍵盤掃描、發送音符消息流程,為了使按鍵識別準確可靠,還設置了兩個緩沖區BUFF1和BUFF2保存鍵盤掃描值。主程序流程圖如圖3。

圖3:MIDI電子琴程序的流程圖

以下是部分功能模塊的程序設計介紹。

2.1 音色選擇模塊的設計

該模塊的功能是使MIDI電子琴能按要求快速改變音色,所以采用了中斷服務子程序。當某個音色選擇按鍵壓下時,通過或門向單片機的INT0發出中斷請求,CPU響應後進入該中斷服務子程序。MIDI技術規範規定,標準MIDI含有128種音色,它們的編號範圍是0~127,為了能夠快速找到所需音色,硬件中設置3個按鍵,其中2個用於音色編號的單步增加和減小,每次增加或減小1個音色編號,另外壹個鍵用於音色快進,當快進鍵有效時,每次增加8個音色編號,選擇增加8個音色的原因是:標準MIDI的128種音色是按每8個音色壹組編排的,***包含16個樂器組。電子琴開機時默認的音色編號是0,即大鋼琴音色。

單片機的P1.2口線連接著音色增加按鍵,P1.3則連接音色減小按鍵,P1.4連接音色快進鍵。低電平時按鍵有效,這三個按鍵通過與門連接外部中斷INT0,以便實時響應音色設置。該外部中斷0的中斷服務子程序流程圖見圖4,(圖中省去了按鍵延時去抖動部分):

圖4:音色改變子程序流程圖

在該子程序中,變量TAMBER中存放當前音色,其值可在0~127間循環,當TAMBER是最大值127時,加1後又變為0;而當TAMBER為0時,減1則變為127;在邊界範圍加8取模後,剛好為其對應的音色值。

2.2 串口發送模塊

串口發送模塊主要用於發送產生的MIDI消息,串口采用的模式1,發送的波特率是31.25KBPS。串口通過驅動電路連接MIDI音源,發送MIDI消息。通道號存放在變量CHANNEL中,通過與90H相與,所得值就是當前所設置的通道號。

2.3 鍵盤掃描模塊

本電子琴提供了48個MIDI按鍵,即4個8度音的音域範圍,當按下單個鍵時,產生壹條MIDI消息,當按下多個鍵值時產生對應鍵值的多條MIDI音符開消息,當某個鍵值被釋放時,發送對應的音符關消息。這些MIDI消息通過串口發送給MIDI音源,產生MIDI音樂。音樂的時值由按鍵的時間長度控制,當按鍵被釋放,實時產生MIDI消息,關閉被釋放的鍵值音。

由P0口和P2口的P2.0~P2.5構成行列式鍵盤,也可繼續擴展鍵盤,例如改為常用的49鍵或64鍵。因為支持復音按鍵,鍵盤掃描程序必須掃描到行列式鍵盤的每個鍵值,掃描所得的鍵值存放在緩沖區BUFF1或BUFF2中。鍵盤掃描程序獲得的鍵盤編號範圍是0~47,還需將這個鍵盤編號值轉換為MIDI設備能夠識別的鋼琴鍵盤編號,這個功能由壹個子程序來完成,限於篇幅本文不再詳述。鍵盤掃描子程序流程如圖5。

圖5:鍵盤掃描子程序

  • 上一篇:電氣工程師個人年終工作總結範文2019
  • 下一篇:機器人工程專業 VS 郵政工程專業
  • copyright 2024編程學習大全網