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