基于FPGA的音樂流水燈控制系統(tǒng)的設(shè)計(jì)
按照樂譜,將音階對(duì)應(yīng)的索引值連續(xù)地存儲(chǔ)到ROM中。例如,樂譜上一個(gè)4分音符的中音3,在ROM存儲(chǔ)器中對(duì)應(yīng)的索引值是10,并且連續(xù)放置4次,而一個(gè)8分音符5也就是半拍的5,則是將對(duì)應(yīng)索引值5在ROM中連續(xù)存放兩次。播放時(shí)在播放時(shí)鐘(8 Hz)的驅(qū)動(dòng)下,索引值不斷地從ROM輸出。索引值送到音階分頻模塊中,轉(zhuǎn)換為計(jì)數(shù)初值輸出,再送到音階分頻產(chǎn)生模塊中,作為計(jì)數(shù)初值,產(chǎn)生音階頻率輸出驅(qū)動(dòng)蜂鳴器。這樣,就能在蜂鳴器上發(fā)出要播放的樂曲了。確定了樂譜后,即ROM的存儲(chǔ)內(nèi)容后,就可以定制ROM,將其初始化文件指定為.mif文件即可。
2.2 流水燈控制模塊設(shè)計(jì)
由于此設(shè)計(jì)是基于DE2.70開發(fā)板之上的,因此將對(duì)應(yīng)的音階輸出,應(yīng)用LED燈來顯示流水燈閃爍效果。根據(jù)音調(diào)“hight”的高低設(shè)置點(diǎn)亮燈的數(shù)量,當(dāng)“hight”為低時(shí)播放低音信號(hào),為高時(shí)播放中音信號(hào)。如果要用到高音信號(hào)可以將“hight”長度改為2bit。選取板上的oLEDR[6..0]前7盞燈與低音信號(hào)對(duì)應(yīng),oLEDR[13..7]與中音信號(hào)對(duì)應(yīng)。在本設(shè)計(jì)中,為了看到明顯的流水燈變化,當(dāng)發(fā)出中音音頻時(shí)低音顯示燈全亮。
2.3 LCD顯示模塊設(shè)計(jì)
首先需要在SOPC Builder中構(gòu)建SOPC系統(tǒng),按要求依次添加NioslI處理器,4 kB的片上RAM,LCD模塊,4位輸入口,給處理器分配復(fù)位向量地址和異常向量地址。
LCD顯示模塊用來實(shí)現(xiàn)樂譜和音頻強(qiáng)度的實(shí)時(shí)顯示,可以顯示16×2個(gè)字符,其軟件流程如圖2所示。
其中LCD初始化包括對(duì)LCD的功能設(shè)置,顯示開關(guān)設(shè)置和模式設(shè)置。LCD定位到首行首列是通過對(duì)LCD寫定位指令,將顯示位置確定到第一行第一列。寫字符“jian pu”到第一行是通過寫數(shù)據(jù)指令將字符jian pu:和實(shí)時(shí)變化的樂譜顯示在液晶屏的第一行。低、中、高音分別用L、M、H表示并且加上對(duì)應(yīng)的音階值進(jìn)行顯示。LCD顯示換行是通過定位指令來實(shí)現(xiàn)的。顯示音頻強(qiáng)度到第二行是用符號(hào)“>”的個(gè)數(shù)表示音調(diào)的高低,一個(gè)表示低音1,兩個(gè)表示低音2,依次類推。
在對(duì)LCD模塊進(jìn)行顯示控制時(shí),用到了寫控制命令和寫數(shù)據(jù)命令。這些命令是針對(duì)具體配置的硬件電路而編寫的.h頭文件。LCD模塊的頭文件如下
這樣編寫是為了和具體的硬件電路相對(duì)應(yīng),在LCD模塊的硬件描述語言中,液晶模塊RW和RS的地址分配如下:
評(píng)論