3。4 设计结构图
系统整体结构模块图,如图3-3所示。
图3-3乐曲演奏电路的结构
接下来我们就对各个子模块进行单独的分析。
4 系统软件设计
4。1 音调发生器模块
下图4-1所示:
4。1。1 ydfsq的功能
图4-1音调发生器模块
首先,在该模块中给输入信号一个4Hz的频率,然后二进制计数器(计数最大值为107)接收到信号后开始计数,这样一来每计数一次便会停留0。25s,即一拍的持续时间是0。25秒,一小节四拍,它所停留的时间就是1s。生日歌能够开始自然连续的播放,是因为当给音调发生器模块一个4Hz的时钟输入信号时,计数器便会开始做加法计数,乐谱就这样依次被选进去,达到播放的效果。
4。1。2 ydfsq的主要源程序
casecounteris
when0to3|8to11|24to27|32to35|48to51=>toneindex<=5;when4to7|28to31|68to75=>toneindex<=6;
when16to23|64to67=>toneindex<=7;
when12to15|40to47|60to63|92to95|100to107=>toneindex<=8;when96to99=>toneindex<=9;
when56to59|88to91=>toneindex<=10;when84to87=>toneindex<=11;
when52to55=>toneindex<=12;when76to83=>toneindex<=0;
whenothers=>NULL;4。2 手动/自动选择模块
选择模块如下图4-2所示:
4。2。1 bmux的功能
图4-2选择模块
选择模块是对乐曲的播放形式进行一个选择。我们设置了一个cs按钮来控制自动和手动播放。当我们想让乐曲自动播放时就按下cs键;否则,乐曲就为手动播放。rst表示一个复位输入信号,当rst为高电平时,乐曲是无法播放的。所以上述能够实现音乐播放都是在rst为低电平的情况下。