我的蜂鸣器音乐实例【原创】
本帖最后由 auth 于 2015-2-2 21:04 编辑
复制代码
刚开始接触蜂鸣器音乐的时候,都是使用了库文件,或者直接录入频率来演奏,这会有比较大的局限性,效率也低。
刚开始学习数组和子程序功能,将频率存放到子程序中,然后进行调用返回相应音符频率,实现既能快速实现音乐播放功能,又能方便调用。这里以歌曲“十年”简谱为例进行介绍。
十年.jpg (92.57 KB, 下载次数: 42)
下载附件
保存到相册
2015-2-2 20:33 上传
以下是程序代码:
<p>/************************************************************ Arduino实例学习14:蜂鸣器全能演奏【子程序版】 要点:带参子程序的定义,带参子程序的使用方法难点:带参子程序的定义,带参子程序的使用方法学习者:顾黄凯 本代码写于2015年01月31日晚 ************************************************************/ //低音前面加 - ,高音前面加1#define LaBa 8int Num;//用于存放数组元素个数char* YinDiao = "A";//音调int PaiChang = 800; //每拍长度int PuZi[] = {//根据简谱将音符录入PuZi数组变量0, 0, 1, 2,3, 3, 2, 3,2, 1, -7, -6, 0, -3, -6,-5, -6, -7, -6, -5, -6,0, 1, -7, -6, -7,-6, 0,0, -3, 1, -7, -6, -7,-6, 0,0, 0, 1, 2,3, 3, 2, 3,2, 3, 5, 1, 0, 3,2, 2, 2, 1, -7, 1,0, 1, 1, -7, -6, -7,1, -6, -6,0, -3, 1, -7, -6, -5,-6, -7, -6,0, 0,0, -5, 3, 2, 1,2, 3, 2, 2, -5,0, 1, -6, -7, 1, 6, 5, 1,3, 0, 3, 2, 3,4, 0,2, 3, 3, 4,2, 3,0, 1, 2, 5, 3,3, 3, 3, 4, 5, 6,2, 2, 2, 4, 3, 2,1, -3, -3, 2, 1, -7,1, -6, -6, 0, 1, -7, -6,-7, 4, 3, 2, -7, 1,1, 0, 1, 2, 3,6, 3, 4, 5, 2, 3,3, 2, 1, 2, 5, 3,3, 3, 3, 4, 5, 6,2, 2, 2, 4, 3, 2,1, -3, -3, 2, 1, -7,1, -6, -6, 0, 1, -7, -6,-7, 4, 3, 2, 3, 2,2, 1, 0, 1, 2, 3,6, 6, 3, 1, 2,2, 1, -7,1,0, 0, 1, 2,3, 3, 2, 3,2, 3, 5, 1, 0, 3,2, 2, 2, 1, -7,1, 1, 1, -7, -6, 1,-6,0, -5, 3, 2, 1, 2,1,1};float JiePai[] = {//根据简谱上节拍,将每个音符相应的节拍录入JiePai数组变量,一拍记为1,半拍记为0.5……1, 0.5, 0.25, 0.25,0.5, 0.5, 0.5, 0.5,0.25, 0.25, 0.25, 0.25, 0.5, 0.25, 0.25,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,1, 0.25, 0.25, 0.25, 0.25,1, 1,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,1, 1,1, 0.5, 0.25, 0.25,0.5, 0.5, 0.5, 0.5,0.25, 0.25, 0.25, 0.25, 0.5 + 0.25, 0.25,0.5, 0.5, 0.25, 0.25, 0.25, 0.25,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,0.5, 0.5, 1,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,0.5, 0.5, 1,1, 1,0.5 + 0.25, 0.25, 0.5, 0.25, 0.25,0.5, 0.25, 0.25, 0.5, 0.5,0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,1, 0.25, 0.25, 0.25, 0.25,1, 1,0.5 + 0.25, 0.25, 0.5, 0.5,0.0625, 0.9375 + 1,1, 0.25, 0.25, 0.25, 0.25,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,0.5, 0.5, 0.25, 0.25, 0.25, 0.25,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,0.25, 0.25, 0.5, 0.25, 0.25, 0.25, 0.25,0.5, 0.25, 0.25, 0.5, 0.25, 0.25,1, 0.25, 0.25, 0.25, 0.25,0.5 + 0.25,0.25, 0.5, 0.25, 0.03125, 0.1875 + 0.03125,0.5, 0.5, 0.25, 0.25, 0.25, 0.25,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,0.25, 0.25, 0.5, 0.25, 0.25, 0.25, 0.25,0.5, 0.25, 0.25, 0.5, 0.25, 0.25,0.25, 0.5 + 0.25, 0.25, 0.25, 0.25, 0.25,0.5 + 0.25, 0.25, 0.5, 0.25, 0.25,1 + 0.5, 0.25, 0.25,2,1, 0.5, 0.25, 0.25,0.5, 0.5, 0.5, 0.5,0.25, 0.25, 0.25, 0.25, 0.5 + 0.25, 0.25,0.5, 0.5, 0.25, 0.25, 0.5,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,2,0.5 + 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,2,1};//为了解决连音的问题,这里使用一个连音控制数组变量,需要连音的地方使用1,否则使用0int LianYin[]={ 0,0,0,0, 0,0,0,0, 0,0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0, 0,0, 0,0,0,0,0,0, 0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,1,0, 0,0,0,0,0,0, 0,0,0, 0,0, 0,0,0,0,0, 0,0,1,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0, 0,0, 0,1,0,0, 1,0, 0,0,0,1,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0,0, 0,0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,1,1, 0,0,0,0,1,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 0,1,0,0,0,0, 1,0,0,0,0,0,0, 0,0,0,0,0,1, 0,0,0,0,0,0, 0,0,0,0,1, 0,1,0, 0, 0,0,0,0, 0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,0, 0, 0,0,0,0,0,0, 1, 0 };void setup(){Num = sizeof(PuZi) / sizeof(PuZi[