本篇文章將介紹使用SPCE061A來做一個電子琴,并且提供源代碼。如果您有凌陽大學計劃的實驗箱,那將很好完成,就是接幾根線的問題,要是沒有也不用著急啦,拿一塊SPCE061A芯片,接個鍵盤和音頻放大電路就可解決問題,是不是很easy!
圖一 整體框圖
我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機某個端口的“高”電平或低電平,則在該端口上就能產生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調。樂曲中,每一音符對應著確定的頻率,這個小制做是采用凌陽SPCE061A的DAC輸出來實現,具體做法是,先建立一個有兩百個數據的音頻數據表,當按不同的按鍵即以不同的頻率往DAC上送數據,從而達到輸出不同音符的目的,為了達到電子琴的效果,當然還得在程序方面稍作修飾了,整體框圖如圖一所示。下面將就具體硬件電路和程序作一一說明。
硬件電路設計
鍵盤控制電路:
在這里采用矩陣式排列鍵盤,如圖二所示,這樣可以合理應用硬件資源,把16只按鍵排列成4*4矩陣形式,用一個8位I/O口控制如圖所示。把鍵盤上的行和列分別接在IOA0~IOA3和IOA4~IOA7上。
圖二 按鍵控制電路
先置IOA0~IOA3為帶數據緩存器的高電平輸出,置IOA4~IOA7為帶下拉電阻的輸管腳,此時若有鍵按下,取IOA4~IOA7的數據將得到一個值,把此值保存下來,再置IOA4~IOA7為帶數據反相器的高電平輸出,置IOA0~IOA3為帶下拉電阻的輸入管腳,此時若鍵仍沒彈起,取IOA0~IOA3的數據將得到另一個值,把這兩個值組合就可得知是哪個鍵按下了,再通過匹配得到鍵值,實際上在這個小設計中只用到了8個按鍵,但考慮到為廣大電子愛好者自由發(fā)揮預留了八個按鍵,您可以自己設計加入別的音符或是別的好玩的啊。
音頻放大電路:
凌陽SPCE061A 單片機 自帶雙通道DAC音頻輸出, DAC1、DAC2轉換輸出的模擬量電流信號分別通過AUD1和AUD2管腳輸出, DAC輸出為電流型輸出,經LM396音頻放大,即可驅動喇叭放音,放大電路如圖三(只列出了DAC1,DAC2類似)。在DAC1、DAC2后面接一個簡單的音頻放大電路和喇叭就能實現語音播報功能,這為單片機的音頻設計提供了極大方便,音頻的具體功能主要通過程序來實現。