丁磊
摘要:基于AT89S51單片機(jī)的多功能音樂(lè)播放器的設(shè)計(jì)是高職院?!皢纹瑱C(jī)原理及應(yīng)用”課程教學(xué)中可以選用的很好教學(xué)案例之一,本文給出了該教學(xué)案例的具體設(shè)計(jì)思路與實(shí)現(xiàn)的方法。
關(guān)鍵詞:AT89S51單片機(jī);多功能;音樂(lè)播放器
中圖分類(lèi)號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)23-0169-02
1 任務(wù)設(shè)計(jì)要求及方案確定
1.1 設(shè)計(jì)要求
音樂(lè)播放器是現(xiàn)在非常流行的電子產(chǎn)品。本文所要設(shè)計(jì)的多功能音樂(lè)播放器,要求如下:
1)可以播放多首歌曲;
2)可以通過(guò)按鍵選擇需要播放的歌曲;
3)選擇需要播放的歌曲時(shí),歌曲名稱(chēng)要在LCD屏幕上顯示;
4)播放的歌曲聲音要清晰。
1.2 方案確定
由設(shè)計(jì)要求可知,總體設(shè)計(jì)中,包括主控單片機(jī),LCD顯示器模塊以及歌曲選擇按鈕模塊。多功能音樂(lè)播放器設(shè)計(jì)如圖1所示。
2 具體實(shí)現(xiàn)過(guò)程
2.1 硬件電路設(shè)計(jì)
本設(shè)計(jì)中的硬件電路設(shè)計(jì)關(guān)鍵的控制器件是LCD顯示器、揚(yáng)聲器以及按鍵。多功能音樂(lè)播放器硬件電路,如下圖2所示。
本設(shè)計(jì)中控制電路在精度上要求不高,所以我們選用帶4K字節(jié)FLASH存儲(chǔ)器的AT89S51單片機(jī)就可以滿足設(shè)計(jì)要求。
本設(shè)計(jì)中我們通過(guò)AT89S51單片機(jī)的P2.7引腳端口來(lái)傳送出各種頻率的信號(hào)源,再通過(guò)放大之后傳送至喇叭處,P2.7引腳端口發(fā)送出的頻率控制喇叭發(fā)出聲音。
LCD是使用12864LCD顯示器,顯示數(shù)據(jù)通過(guò)單片機(jī)的P0引腳來(lái)傳送。
本設(shè)計(jì)可實(shí)現(xiàn)10首歌曲的播放,因此,按鍵應(yīng)有10個(gè)。由于涉及的電路元件及I/O引腳都比較少,因此,這里采用10個(gè)I/O引腳分別連接一個(gè)按鍵的方式來(lái)實(shí)現(xiàn)設(shè)計(jì)要求。本設(shè)計(jì)中,P1口的P1.0-P1.7以及P2.0、P2.1引腳分別連接按鍵K1-K10。按鍵未與I/O引腳連接的一端是與地相連的,因此,當(dāng)有按鍵動(dòng)作時(shí),低電平就會(huì)送入I/O引腳中。
揚(yáng)聲器只有兩根連接線,一端連接系統(tǒng)正電源,另一端與單片機(jī)的P2.7相連。當(dāng)P2.7輸出低電平時(shí),揚(yáng)聲器將導(dǎo)通;當(dāng)P2.7輸出高電平時(shí),揚(yáng)聲器將關(guān)閉。如此反復(fù),就可以產(chǎn)生一定頻率的歌曲了。
2.2 軟件編程及調(diào)試
本設(shè)計(jì)中主要是必須處理好音樂(lè)歌曲碼以及LCD顯示器的字符顯示碼。程序流程圖如圖3所示。
音符的產(chǎn)生過(guò)程:
1)要讓單片機(jī)發(fā)出聲音頻率的脈沖信號(hào),就必須要計(jì)算得出這一聲音頻率的時(shí)間周期。然后我們利用AT89S51單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器對(duì)這一聲音頻率的半周期進(jìn)行計(jì)時(shí),每當(dāng)這個(gè)半周期計(jì)時(shí)完成后就將輸出脈沖的I/O反相,接下來(lái)我們重復(fù)此操作,就能夠在I/O引腳上得到此聲音頻率的脈沖。
2)我們利用AT89S51單片機(jī)內(nèi)部定時(shí)/計(jì)數(shù)器,使其在計(jì)數(shù)器工作方式0下,通過(guò)定時(shí)/計(jì)數(shù)器計(jì)數(shù)初值THO、TLO的改變,用以產(chǎn)生不同的聲音頻率的方法。
3)其計(jì)數(shù)值的計(jì)算方法如下:
編寫(xiě)音樂(lè)代碼過(guò)程:
根據(jù)簡(jiǎn)譜,依次找出每個(gè)音符代碼及節(jié)拍碼,按照把音符碼放在高4位節(jié)拍碼放在低4位的方法組合成一個(gè)字節(jié),并建立一個(gè)表格按順序存放,則通過(guò)順序查表的方式,就能獲得音符及節(jié)拍的信息。
歌曲方面應(yīng)先找到歌曲的簡(jiǎn)譜,然后對(duì)照每個(gè)音符的頻率值計(jì)算出初值,再在程序中列出節(jié)拍和音調(diào)值。這樣程序運(yùn)行時(shí)只需檢查這些值即可實(shí)現(xiàn)歌曲要求的聲音播放。
LCD顯示的字符碼方面,本設(shè)計(jì)中要求在音樂(lè)播放的同時(shí),在LCD上顯示歌曲的名稱(chēng)。歌曲名都是漢字,可以通過(guò)LCD自帶的漢字字符碼轉(zhuǎn)化程序,獲取歌曲名稱(chēng)對(duì)應(yīng)的字符碼,然后再將LCD字符顯示的相關(guān)程序作為子程序添加到源程序中,供主程序調(diào)用即可完成這部分的設(shè)計(jì)。
主程序主要先進(jìn)行LCD顯示器的初始化,然后檢測(cè)是否有按鍵的動(dòng)作,若有動(dòng)作,則播放相應(yīng)按鍵對(duì)應(yīng)的歌曲,并將對(duì)應(yīng)的歌曲名顯示于LCD上。播放歌曲過(guò)程中,若有新的按鍵動(dòng)作,則停止播放,轉(zhuǎn)而播放新按鍵對(duì)應(yīng)的歌曲,并將新的歌曲名稱(chēng)顯示于LCD上。當(dāng)播放遇到結(jié)束音符時(shí),播放停止,程序等待下一次的按鍵動(dòng)作。