日期:2023-01-12 阅读量:0次 所属栏目:音乐舞蹈
一、系统设计方案
(一)设计要求
本设计是在武汉创维特信息技术有限公司的ARM9教学实验箱上完成,模拟了简单的音乐播放器。利用Timer0产生PWM脉冲控制蜂鸣器,不同的频率对应不同的音调,从而播放出不同的歌曲,具体设计要求如下:
(1) 实现播放音乐的开始和结束;
(2) 有选曲的功能,能播放下一首歌曲;
(3)使用数码管来同步显示歌曲的简谱。
(二)系统流程
由于此系统较为简单,故采用自上而下的设计方法,进行程序设计;对音乐的开始和结束、以及选曲,采用中断的方法,由中断处理程序处理。程序流程如图1所示:
二、嵌入式开发环境说明
硬件方面,我们使用S3C2410实验箱的串口与PC机串口连接,通过JTAG口的ARM仿真器把实验箱和PC机连接。
软件方面,我们使用与实验箱配套的ADT软件开发。
三、典型功能实现
(一)定义数组
包括音调的数组、某个乐曲简谱的数组和乐曲节拍的数组。音乐的音高与频率是对应的,不同的频率驱动蜂鸣器会使蜂鸣器产生不同音高,因此首先要确定音调和频率之间的关系,如频率为1300赫兹的音就是中音的“1”,频率为1462赫兹的音为“2”,频率为1625赫兹的音为“3”……等等。所以需要定义一个数组,存放各种音调的频率值,顺序为中音、低音、高音,这样,根据简谱调用频率值时,只要直接用简谱做下标,但要注意,中音的下标为1-7(下标0空闲不用),低音下标为8-14,高音为15-21。
简谱和节拍都是包含多个值的变量,所以也要用数组存储其元素,并且,简谱可以做为音调的下标,而节拍,只要把最短音定为1,其他定为1的倍数,利用延时程序的倍数关系实现,具体实现如下:
void main(void)
{
……
//音调数组,分别对应中、低、高音的1-7
const int music_freq[]
={0,1300,1462,1625,1736,1950,2166,2437,650,731,812,868,975,
1083,1218,2600 };
//世上只有妈妈好的简谱
const int music[]
={6,5,3,5,15,6,5,6,3,5,6,5,3,1,13,5,3,2,2,3,5,5,6,3,2,1,5};
//世上只有妈妈好的节拍
const int music_dly[]
={3,1,2,2,2,1,1,4,2,1,1,2,2,1,1,1,1,4,3,1,2,1,1,2,2,4,};
}
(二)数码管显示简谱
通过数码管实时显示歌曲的简谱,这个操作放在播放歌曲函数中即可,实现如下:
for(delay=0;delay {rTCON=0x0;*((unsigned char *)0x10000006) = 0; *((unsigned char *)0x10000004) = seg7[b[i]]; } 四、结束语 本文设计实现了基于ARM9 平台的简单音乐播放器,该系统实现了歌曲简谱的显示、开始和结束等功能,基本实现了嵌入式播放器的功能需求,很好地模拟了音乐播放器的功能,而且操作简单、方便。
上一篇:论音乐剧演唱风格的嬗变