王大為 黨世紅
摘要:設計了用單片機AT89C51作為主控制器,附帶鍵盤、功放、揚聲器的簡易電子琴系統(tǒng),給出了相關軟硬件,經(jīng)試驗表明,該系統(tǒng)具有結構簡單,運行可靠,抗擾能力強,有較好參考價值。
關鍵詞:AT89C51單片機;音色;電子琴系統(tǒng)
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2014)23-5548-03
單片微型計算機是大規(guī)模集成電路技術發(fā)展的產(chǎn)物,具有體積小、運算快、性能優(yōu)良、應用廣泛的特點。電子琴在現(xiàn)代音樂中扮演著重要的角色,是現(xiàn)代電子技術與音樂結合的新型的鍵盤樂器。該文采用單片機AT89C51作為主控制器,附帶鍵盤、功放、揚聲器等模塊,設計了簡易電子琴系統(tǒng)。
1 設計任務及要求
設計電子琴,能實現(xiàn)基本音級和音程,具有一般演奏功能;按鍵不同,音調(diào)不同;具有手動演奏,能手動演奏四個八度音的樂音,音色純正,音長由按鍵按下持續(xù)時間控制;能自動演奏。能存儲播放6首以上的不同曲目,每首曲長度(即音符個數(shù))不少于50個,音調(diào)、音色優(yōu)美;可選曲重復演奏;功能開關(手動,自動切換)可由硬件撥動開關構成,也可由鍵盤完成手動/自動切換;功率≤500mW ,音質(zhì)悅耳,無失真。
2 系統(tǒng)設計
2.1 設計分析
1) 樂音產(chǎn)生的原理分析
音的物理屬性有高低、長短、強弱和音色四個方面。音調(diào)反映聲音振動的頻率,聲音振動越快,頻率越高,音調(diào)就越高,反之,頻率低,音調(diào)就低;音強反映的是聲音的振動幅度,聲音振動幅度越大,聲音越強,振幅小,音強??;音長指的是聲音持續(xù)時間的長短,聲音持續(xù)時間長,音長就長,聲音持續(xù)時間短,音長則短;音色指發(fā)聲體的特色,由發(fā)聲體本身的結構、材質(zhì)等固有性質(zhì)決定,不同的發(fā)聲體,音色不同。
兩個音的音高的距離叫做音程,度是音程的最小單位;音階是由一系列向上或向下逐級進行的音構成,各音之間具備一定的音程關系。
十二平均律是將一組音(八度)分成十二個半音音程的方法;頻率決定音樂的音高(音調(diào))。樂音有八十四音階,八十四音階中最低音頻率為21.827Hz,每高八度則頻率加倍。
一個八度音音程內(nèi)分為十二個半音,每相鄰半音比值相等而構成十二平均律,其中任何兩相鄰半音頻率的比值為K= =1.0595,據(jù)此可得所有八十四音的頻率。
2) 簡易電子琴設計模型的分析
本設計中,驅動揚聲器的脈沖頻率和持續(xù)時間是產(chǎn)生音樂的關鍵,是本系統(tǒng)設計的切入點。
位觸發(fā)方式(位控法)產(chǎn)生音樂:位觸發(fā)方式是根據(jù)音調(diào)頻率算出周期從而確定初值,使單片機的定時器每1/2周期中斷一次,并在中斷服務程序中將某一指定的I/O口取反,即可在該端口輸出該頻率的方波,接到揚聲器即可產(chǎn)生對應于該音調(diào)的樂音。實際設計中因方波含有高次諧波,若直接驅動揚聲器,音質(zhì)較差,應采用平滑濾波處理。
3) 簡易電子琴設計的難點分析
音調(diào)的控制 設音頻為 fM,一個半波(脈寬)所需時間為1/(2× fM)s,用這個時間來控制端口輸出脈沖的延時時間,也就控制了脈沖頻率,從而驅動揚聲器產(chǎn)生給定頻率的樂音。因此,在設計中應計算出音頻、音長及定時器初值之間的對應關系。
定時時間常數(shù)(初值)算法如下:置定時器T1為工作方式1,即TH1 和TL1構成16位定時器,根據(jù)t=1/(2× fM),計算出脈沖信號的周期;再由下式(2-1)即可求出定時器初值。
按照每個音階對應的頻率,分別計算出對應的定時器初值,在片內(nèi)ROM中形成一個4×7的矩陣,這就是音階表。
音長的控制 音長控制可以采用延時程序定時或者定時器中斷的方式控制節(jié)拍來實現(xiàn)。 采用延時程序定時的方法,給定延時初值控制循環(huán)次數(shù)來實現(xiàn)各種節(jié)拍的控制。此方案避免了中斷嵌套使程序結構簡單,但缺點是使用延時程序定時效率低下。 采用定時器中斷的方式控制節(jié)拍,根據(jù)音符節(jié)拍所對應的時間常數(shù),向定時器寫入相應初值,通過變換中斷的循環(huán)次數(shù),得到音樂的節(jié)拍數(shù)。此方案程序運行效率高,并且在中斷服務程序中加入控制子程序便于控制其他功能;但缺點是使用中斷嵌套,增加了程序的復雜程度。
手動演奏 在手動演奏過程中,音階由按鍵決定,音長由彈奏者按鍵時間的長短決定。程序不斷查詢鍵盤狀態(tài),一旦有鍵按下立刻算出鍵值,查頻率表取出初值,給定時器T1送初值,啟動計數(shù),開始發(fā)聲;然后繼續(xù)監(jiān)視鍵盤。一旦鍵盤釋放,立即停止計數(shù),返回查詢,等待下一次按鍵。在手動演奏中,音高的選擇可由硬件開關或者鍵盤定義,其控制方式在原理上是相同的。手動演奏和自動演奏由開關控制切換,控制邏輯由設計者確定。
自動演奏 在自動演奏中,音長由音長代碼決定,對一首歌曲的樂譜編碼后形成一段連續(xù)的數(shù)據(jù),而樂譜中的每一個音符具有音階、音高和音長三種屬性,所以編程中將樂譜每一個音符的音階、音高和音長定義為三個數(shù)據(jù)表。程序根據(jù)樂譜表中每個音符的音階及音高來確定音符對應的頻率,同時根據(jù)音長取出相應的節(jié)拍計數(shù)初值以控制這一音調(diào)的長短。
樂譜代碼 考慮到常用音樂節(jié)拍4種,音高4種和音階7個,因此可以把每個音樂代碼存在同一個字節(jié)內(nèi),將音階存低三位,音高存四五位,音長存六七位,最高位為結束符。這樣雖然譯碼相對麻煩,但音樂代碼占用空間較小,每個樂譜代碼比前一方案可節(jié)省2/3的空間。可達4個八度音的樂譜代碼如下:
2.2 系統(tǒng)設計
1) 系統(tǒng)硬件設計
(1) 矩陣鍵盤設計。手動演奏需要用到低音、中音、高音和高高音分別對應的7個音階鍵以及功能切換鍵;自動演奏需要用到曲目選擇鍵、暫停鍵、曲目切換鍵和功能切換鍵??紤]到音階鍵和曲目選擇鍵可以復用,系統(tǒng)總共需要至少29個按鍵。鍵盤設計可以采用8×4的矩陣鍵盤方案,這樣按鍵一目了然,軟件控制比較簡單。
(2) 獨立式按鍵設計。采用7個單獨鍵以及2個控制鍵的4個狀態(tài)實現(xiàn)28個音階,音階鍵和曲目選擇鍵復用,1個單獨鍵作為功能切換鍵(手動、自動切換),這樣可以節(jié)省系統(tǒng)硬件資源,同時也便于系統(tǒng)的擴展,但軟件設計相對復雜。
(3) 揚聲器。揚聲器是一種能把電信號轉換為聲音信號的電聲換能器件。揚聲器的好壞直接影響聲音的播放效果,本設計選用電磁式揚聲器。
(4) 系統(tǒng)硬件電路的總體設計
2) 系統(tǒng)軟件設計
將程序導入AT89C51芯片,調(diào)試成功后,再放到電路板中,按下按鍵可任意彈奏自己想要的旋律。
3 結論
本文通過分析音階與頻率的關系,利用單片機的定時/計數(shù)器T0來產(chǎn)生方波頻率信號,按音階對應頻率關系組合,構成想要表達的音樂,再利用功放電路來將音樂聲音放大,通過顯示模塊來確知自己所彈的音符,就制作成簡易琴了。
參考文獻:
[1] 劉樂喜.微機計算機接口技術及應用[M].北京:華中科技大學出版社,2005.
[2] 石東海.單片機數(shù)據(jù)通信技術從入門到精通[M].西安:西安電子科技大學出版社,2002.
[3] 長德,李華,李東.MC51/98系列單片機原理與應用[M].北京:機械工業(yè)出版社,1997.