我的WAV播放器 自己可以說是一個資深的、水平十分有限的真正音樂愛好者,尤其對古典音樂以及國內(nèi)經(jīng)典歌曲和樂曲十分喜愛,對于目前流行歌壇則比較陌生。憑借自己的自控專業(yè),從80年代的單板機(jī)(現(xiàn)在好多人沒見過和聽說過)、8位單片機(jī)、PLC、到現(xiàn)在的DCS都開發(fā)過,因此動手制作WAV播放器的想法由來已久。雖說原先使用過單片機(jī)編程,對C語言也比較熟悉,但比較論壇中的各種方案,認(rèn)為一般的單片機(jī)難以處理和傳送WAV的龐大數(shù)據(jù)量。因此,選用了STM32F103RBT6為主控芯片、VS1053B作為解碼芯片、LCD1602為顯示器、SD卡(8G)。 為加快項(xiàng)目的進(jìn)度,先采用模塊拼接,在春節(jié)后開始動工,終于在“五一”前夕初步完成各項(xiàng)軟件的調(diào)試。 下圖為各個模塊: 下圖為各模塊之間的接線表 各個模塊組裝后放入機(jī)箱中,接線比較亂。因第一階段的工作主要是軟件調(diào)試,因此未安裝DA解碼板(采用與VS1053B的I2S接口匹配的PCM1793解碼器和運(yùn)放組成)。 面板按上、下、左、右、中布置了5個按鍵,這5個按鍵的功能在不同的界面上是不同的。 下圖為VS1053B的測試畫面。 各項(xiàng)功能測試完成后,表明模塊功能完好。RAM測試結(jié)果為“0x83ff”,確定了解碼芯片確實(shí)是VS1053B。為減少程序的字節(jié)數(shù),測試完成后,將今后編程不再需要的測試函數(shù)和定義全部刪除(當(dāng)然要做好備份)。 進(jìn)行完整的程序設(shè)計(jì)……,最終完成。 下圖為開機(jī)畫面。 按下中間按鍵后,進(jìn)入“菜單”界面,有3個選項(xiàng): 1、next:進(jìn)入下一級畫面; 2、音效調(diào)整:默認(rèn)關(guān)閉; 3、高低音調(diào)整:默認(rèn)高低音增益均為最大值。 采用按動左按鍵,閃爍光標(biāo)在3個選項(xiàng)上循環(huán)移動。按下中間按鍵后,選定光標(biāo)所在的選項(xiàng)。 采用默認(rèn)值,可直接進(jìn)入下一級畫面。 下圖為“音效調(diào)整”畫面。共有“關(guān)閉、最小、中等和最大”4個選項(xiàng),通過左右按鍵,各個選項(xiàng)分別顯示,按下中間按鍵后進(jìn)行確認(rèn),回到“菜單”界面。 下圖為“音調(diào)調(diào)整”畫面。通過按動左右鍵,閃爍光標(biāo)在“低音”和“高音”之間移動,按上下鍵可以改變光標(biāo)坐在選項(xiàng)的數(shù)值,按下中間按鍵后進(jìn)行確認(rèn),回到“菜單”界面。 在“菜單”界面中,按下中間按鍵后進(jìn)入到“選曲”界面。顯示SD卡的根目錄中存放的可播放的WAN文件總數(shù)。在設(shè)計(jì)上,最大數(shù)目為99首。通過上下按鍵可快速(±10)循環(huán)選曲,左右按鍵可逐個(±1)循環(huán)選曲,按下中間按鍵后進(jìn)行確認(rèn),進(jìn)入到“播放”界面 下圖為“播放”界面。 1、界面第一行分別顯示的是:正在播放的曲號、播放的剩余時間以及當(dāng)前的音量值。在播放時按動上下鍵可改變音量(音量值為0~30),按動左右按鍵可進(jìn)行前后換曲。 2、界面第二行分別顯示“傳輸速率”和“采樣頻率”。因1602的顯示量有限,程序設(shè)計(jì)時這些數(shù)據(jù)均使用整數(shù)定義,顯示中未包含小數(shù)。如下圖中的“采樣頻率”實(shí)際值應(yīng)為“44.1kHz”。 播放時,從VS1053B模塊的耳機(jī)插孔傳出的聲音十分流暢,沒有卡頓現(xiàn)象。主要在播放程序上開辟了4096字節(jié)的緩沖區(qū)。首先從SD卡中一次讀出4096個字節(jié)的數(shù)據(jù),存放在緩沖區(qū)中;再由緩沖區(qū)向VS1053B傳送數(shù)據(jù),按照要求每次傳送32個字節(jié)。詳細(xì)指令網(wǎng)上都有。注意:SPI的讀寫操作一定要采用寄存器指令方式進(jìn)行,生成的代碼量小,可加快程序的實(shí)時性;如果采用庫函數(shù)指令方式操作,由于代碼量較大,非常容易出現(xiàn)卡頓現(xiàn)象。 在程序設(shè)計(jì)中,為方便編寫,對大部分實(shí)時性要求不高的代碼,應(yīng)采用庫函數(shù)指令。 在播放當(dāng)中,按下中間按鍵時,退出播放。在畫面上閃爍的“>”的字符,提示關(guān)閉電源。 主要功能就介紹到這里。項(xiàng)目中使用程序大部分借鑒網(wǎng)上,自己主要在菜單和畫面顯示上進(jìn)行了程序設(shè)計(jì)。 說實(shí)在的,第一次使用STM32,程序調(diào)試中出現(xiàn)了不少問題,逐一解決,終于完成全部程序的編寫和調(diào)試。 下一步,自己設(shè)計(jì)電路,將各個模塊(包含DA和功放)設(shè)計(jì)在一塊線路板上,電源部分為±15V,最終實(shí)現(xiàn)用高保真耳機(jī)欣賞無損WAV音樂。 |