基于AVR單片機(jī)的U盤(pán)MP3設(shè)計(jì)與實(shí)現(xiàn)
4.3 VS1003的讀寫(xiě)控制
本文引用地址:http://m.butianyuan.cn/article/262816.htmVS1003的寄存器用下列順序讀出,如圖二。首先將XCS片選拉低以選擇芯片,再通過(guò)SI線發(fā)送8位的讀操作碼(0x03)和8位的地址。在地址被VS1003芯片讀入后,SI上的數(shù)據(jù)將被忽略。相應(yīng)地址的16位數(shù)據(jù)將從SO線移出。當(dāng)數(shù)據(jù)全被移出后XCS需拉高。
VS1003的寄存器須按以下的順序?qū)懭?,如圖三。首先將XCS片選拉低,再通過(guò)SI線發(fā)送8位的讀操作碼(0x02)和8位的地址。隨即發(fā)送16位的數(shù)據(jù)字。當(dāng)最后一位被移入且最后的時(shí)鐘已發(fā)送,必須將XCS拉高以完成寫(xiě)操作。
4.4 MP3的播放
當(dāng)執(zhí)行音樂(lè)播放程序時(shí),ATmega64芯片首先從U盤(pán)中預(yù)取標(biāo)簽信息,經(jīng)過(guò)分析,由Unicode到GBK編碼的轉(zhuǎn)換,再取字模,最終在LCD上顯示;之后開(kāi)始取音樂(lè)文件的數(shù)據(jù),送到VS1003芯片,VS1003開(kāi)始解碼并在音頻接口發(fā)出音頻信號(hào)。當(dāng)按下暫停鍵時(shí),暫停取數(shù)據(jù),上一曲、下一曲時(shí)跳出取數(shù)據(jù)循環(huán)。
4.5 其他軟件設(shè)計(jì)
1.音樂(lè)標(biāo)簽的軟件設(shè)計(jì)。本系統(tǒng)可以讀取的音樂(lè)的標(biāo)簽有ID3V1、ID3V2,當(dāng)要區(qū)分這兩個(gè)標(biāo)簽時(shí)可以用程序讀取音樂(lè)文件的開(kāi)頭和結(jié)尾,利用其標(biāo)志符“ID3”、“TAG”來(lái)區(qū)分其具有哪一個(gè)標(biāo)簽。但是標(biāo)簽中的文字編碼也包括UNICODE、GBK,具體的區(qū)分也要查找相關(guān)的標(biāo)志符。
2.文檔閱讀的軟件設(shè)計(jì)。GBK的編碼中會(huì)帶有ASC碼,而GBK碼占兩個(gè)字節(jié),ASC碼占一個(gè)字節(jié),如果在取文件過(guò)程中恰好取到GBK碼的每二個(gè)字節(jié),那么以后的內(nèi)容在LCD上的顯示將全部為亂碼,特別是在向上翻頁(yè)的時(shí)候(文檔內(nèi)容在LCD上的顯示還要判斷回車(chē)以及其它字符,這樣就會(huì)造成每一頁(yè)具體讀了多少字節(jié),顯示了多少字節(jié)都不一樣)。最終解決辦法是用一個(gè)數(shù)組記錄每一次翻頁(yè)共顯示了多少字節(jié)(不是讀取了多少字節(jié))。
3.在TFT上顯示字符和漢字。對(duì)于TFT液晶,沒(méi)有具體的字模存儲(chǔ)在控制芯片中,只能是整體系統(tǒng)的存儲(chǔ)。而且漢字的Unicode和GBK編碼并不相同。筆者把具體的字庫(kù)存儲(chǔ)在了要讀取的優(yōu)盤(pán)根目錄下(對(duì)應(yīng)的字模文件是ST16.BIN KT16.BIN)。對(duì)于Unicode到GBK的轉(zhuǎn)換,筆者把轉(zhuǎn)換文件也存儲(chǔ)在了優(yōu)盤(pán)的根目錄下面(對(duì)應(yīng)文件是UNITOGBK.SYS)。
5 結(jié)束語(yǔ)
經(jīng)測(cè)試,本設(shè)計(jì)能夠讀取并播放U盤(pán)中MP3文件,音質(zhì)清晰悅耳,無(wú)延時(shí)和跳幀現(xiàn)象。能夠讀取U盤(pán)中txt文檔以實(shí)現(xiàn)電子書(shū)功能。內(nèi)置的貪吃蛇游戲也可以順利實(shí)現(xiàn)。由于本設(shè)計(jì)采用播放器與存儲(chǔ)器分離的方式,因此存儲(chǔ)空間不受限制,自由度較大,這比一般MP3播放器更具有優(yōu)勢(shì)。
pa相關(guān)文章:pa是什么
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
評(píng)論