基于FPGA的音乐流水灯控制系统的设计
按照乐谱,将音阶对应的索引值连续地存储到ROM中。例如,乐谱上一个4分音符的中音3,在ROM存储器中对应的索引值是10,并且连续放置4次,而一个8分音符5也就是半拍的5,则是将对应索引值5在ROM中连续存放两次。播放时在播放时钟(8 Hz)的驱动下,索引值不断地从ROM输出。索引值送到音阶分频模块中,转换为计数初值输出,再送到音阶分频产生模块中,作为计数初值,产生音阶频率输出驱动蜂鸣器。这样,就能在蜂鸣器上发出要播放的乐曲了。确定了乐谱后,即ROM的存储内容后,就可以定制ROM,将其初始化文件指定为.mif文件即可。
2.2 流水灯控制模块设计
由于此设计是基于DE2.70开发板之上的,因此将对应的音阶输出,应用LED灯来显示流水灯闪烁效果。根据音调“hight”的高低设置点亮灯的数量,当“hight”为低时播放低音信号,为高时播放中音信号。如果要用到高音信号可以将“hight”长度改为2bit。选取板上的oLEDR[6..0]前7盏灯与低音信号对应,oLEDR[13..7]与中音信号对应。在本设计中,为了看到明显的流水灯变化,当发出中音音频时低音显示灯全亮。
2.3 LCD显示模块设计
首先需要在SOPC Builder中构建SOPC系统,按要求依次添加NioslI处理器,4 kB的片上RAM,LCD模块,4位输入口,给处理器分配复位向量地址和异常向量地址。
LCD显示模块用来实现乐谱和音频强度的实时显示,可以显示16×2个字符,其软件流程如图2所示。
其中LCD初始化包括对LCD的功能设置,显示开关设置和模式设置。LCD定位到首行首列是通过对LCD写定位指令,将显示位置确定到第一行第一列。写字符“jian pu”到第一行是通过写数据指令将字符jian pu:和实时变化的乐谱显示在液晶屏的第一行。低、中、高音分别用L、M、H表示并且加上对应的音阶值进行显示。LCD显示换行是通过定位指令来实现的。显示音频强度到第二行是用符号“>”的个数表示音调的高低,一个表示低音1,两个表示低音2,依次类推。
在对LCD模块进行显示控制时,用到了写控制命令和写数据命令。这些命令是针对具体配置的硬件电路而编写的.h头文件。LCD模块的头文件如下
这样编写是为了和具体的硬件电路相对应,在LCD模块的硬件描述语言中,液晶模块RW和RS的地址分配如下:
评论