部落客福利:100G+電子設計學習資源包!
http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect --------------------------------------------------------------------------------------------------------------------------
本設計主要研究基于AT89C52單片機的簡易電子琴設計。它是以單片機作為主要核心,設定鍵盤、蜂鳴器等外圍器件;另外還用到一些簡單器件如:兩位數位管,和NPN型三極管及電阻等。利用按鍵實作音符和音調的輸入;兩位的數位管進行被操作的按鍵顯示;用NPN型三極管8550實作低音頻功率放大;最後用蜂鳴器自動播放《送别》。

本設計硬體部分主要由最小系統,按鍵系統子產品、數位管顯示子產品和蜂鳴器子產品組成。其軟體部分主要有主程式子產品、定時中斷程式、定時計數程式、顯示程式。
1)最小系統:它是單片機應用系統的設計基礎。它包括單片機的選擇、時鐘系統設計、複位電路設計、簡單的I/O口擴充、掉電保護等。
2)按鍵系統子產品:采用10個按鍵,其中7個按鍵用來顯示7個音調,其它3個按鍵可以進行高低中音的切換,并自動播放已存歌曲。
3)數位管顯示子產品:SM420562段選端接在單片機的P0口,兩個位選端分别接在P2^0和P2^1。
4)蜂鳴器子產品:此電子琴發音電路是通過三極管驅動蜂鳴器發音,經過上拉電阻提高驅動能力。
本系統有主要晶片89C52、發音單元、顯示子產品、按鍵子產品組成。
顯示電路設計
本次課程設計的顯示電路采用兩位數位管進行顯示,由于此設計采用的是共陰極的,使用時不加限流電阻。
為了顯示字元,要為 LED 顯示器段碼,除了組成8字形的字元的 7段,另加上1個小數點位,共計8段, 是以提供給 LED 顯示器的顯示段碼為1個位元組。
按鍵電路設計
獨立式按鍵是直接用I/O口線構成的單個按鍵電路,其特點是每個按鍵單獨占用一根I/O口線,每個按鍵的工作不會影響其它I/O口線的狀态。獨立式按鍵電路配置靈活,軟體結構簡單,但每個按鍵必須占用一根I/O口線,然而,在按鍵較多時,I/O口線浪費較大,不宜采用。
獨立式按鍵軟體常采用查詢式結構。先逐位查詢每根I/O口線的輸入狀态,如某一根I/O口線輸入為低電平,則可确認該I/O口線所對應的按鍵已按下,然後,再轉向該鍵的功能處理程式。由于本程式較為簡單,為了使用友善及節省資源,選擇獨立式鍵盤。
發音電路設計
如下圖所示,發音電路是由蜂鳴器、三極管、上拉電阻構成。由三極管來驅動揚聲器發音的,同時加上拉電阻增強驅動電流,提高驅動能力。
系統軟體程式設計
1)鍵盤掃描程式:檢測是否有按鍵按下,有按鍵按下則記錄按下鍵的鍵值,并跳轉至功能轉移程式;無按鍵按下,則傳回鍵盤掃描程式繼續檢測。
2)功能轉移程式:對檢測到的按鍵值進行判斷,是琴鍵則跳轉至琴鍵處理程式,是功能鍵則跳轉至相應的功能程式,我們設計的功能程式有兩種,即音色調節功能和自動播放樂曲的功能。
3)琴鍵處理程式:根據檢測到的按鍵值,查詢音調表,給計時器指派,使發出相應頻率的聲音。
4)自動播放歌曲程式:檢測到按鍵按下的是自動播放歌曲功能鍵後執行該程式,電子琴會自動播放事先已經存放的歌曲,歌曲播放完畢之後自動傳回至鍵盤掃描程式,繼續等待是否有按鍵按下。
發音原理:若要産生音頻脈沖,隻要算出某一音頻的周期(1/頻率),再将此周期除以2,即為半周期的時間。利用定時器計時半周期時間,每當計時終止後就将P1.0反相,然後重複計時再反相。就可在P1.0引腳上得到此頻率的脈沖。利用AT89C51的内部定時器使其工作計數器模式(MODE1)下,改變計數值TH0及TL0以産生不同頻率的方法産生不同音階。
音階判斷程式設計
播放程式設計(自動播放&按鍵發音)