dainter 发表于 2011-4-3 09:24:57

发几首《裸奔三部曲》最后一节用到的音乐,自己照谱子做的,大家品评一下

请注意,添加进去请申明数组。
原函数要改一下,我发现放到最后数组会溢出,还有些有休止符的音乐无法完美支持。
在这里0,0作为音乐结束,30作为休止符。

以下为本人修改过的函数

void Sing(int index)                   //index 用来选择歌曲
{
        unsigned char Temp1,Temp2;
        unsigned int Addr=0;
        int freq;
       
                Addr=0;
                while(1){
                        switch (index)
                        {
                                case 11:
                                        Temp1=SONG1;
                                        Temp2=SONG1;
                                        break;
                                case 12:
                                        Temp1=SONG2;
                                        Temp2=SONG2;
                                        break;
                                case 13:
                                        Temp1=SONG3;
                                        Temp2=SONG3;
                                        break;
                                case 14:
                                        Temp1=SONG4;
                                        Temp2=SONG4;
                                        break;       
                                case 15:
                                        Temp1=SONG5;
                                        Temp2=SONG5;
                                        break;
                                default:
                                        return;
                        }
                       
                        if (Temp1==0)
                        {
                                rGPBCON &= ~3;                        //set GPB0 as output
                                rGPBCON |= 1;                        //结束,跳出循环
                                rGPBDAT &= ~1;
                                Uart_Printf("\n\tOver!\n");
                                break;
                        }
                        switch ( Temp1) {
                                case 01: freq=260; break;
                                case 02: freq=294; break;
                                case 03: freq=328; break;
                                case 04: freq=347; break;
                                case 05: freq=390; break;
                                case 06: freq=438; break;
                                case 07: freq=490; break;
                                case 11: freq=520; break;
                                case 12: freq=581; break;
                                case 13: freq=657; break;
                                case 14: freq=694; break;
                                case 15: freq=781; break;
                                case 16: freq=892; break;
                                case 17: freq=1000; break;
                                case 21: freq=1041; break;
                                case 22: freq=1190; break;
                                case 23: freq=1315; break;
                                case 24: freq=1388; break;
                                case 25: freq=1562; break;
                                case 26: freq=1785; break;
                                case 27: freq=1923; break;
                                case 30: rGPBCON &= ~3;                        //set GPB0 as output
                                                rGPBCON |= 1;                        //休止符关蜂鸣器
                                                rGPBDAT &= ~1;
                                                goto delay;    //这里用了goto,赶时间,没有大调整
                                default: freq='e';break;
                        }
                        Buzzer_Freq_Set0( freq );
delay:                Delay(192*Temp2);
                        Uart_Printf("%d,%d, ",Temp1,Temp2);
                        if(Temp2==8||Temp2==6||Temp2==12||Temp2==4){
                                Uart_Printf("\n");
                        }
                        if(Addr>440){//440,此为数字数据个数
                        Addr=0;
                        Uart_Printf("\n\n");
                }
        }
}

unsigned char SONG1[] ={ //Das Deutschlandlied
11,6,12,2,13,4,12,4,14,4,13,4,12,2,7,2,11,4,16,4,15,4,14,4,13,4,12,4,13,2,11,2,15,8,
11,6,12,2,13,4,12,4,14,4,13,4,12,2,7,2,11,4,16,4,15,4,14,4,13,4,12,4,13,2,11,2,15,8,
12,4,13,4,12,2,7,2,5,4,14,4,13,4,12,2,7,2,5,4,15,4,14,4,13,6,13,2,14,4,14,2,15,2,15,8,
21,6,17,2,17,2,16,2,15,4,16,6,15,2,15,2,14,2,13,4,12,6,13,1,14,1,15,2,16,2,14,2,12,2,11,4,13,2,12,2,11,8,
21,6,17,2,17,2,16,2,15,4,16,6,15,2,15,2,14,2,13,4,12,6,13,1,14,1,15,2,16,2,14,2,12,2,11,4,13,2,12,2,11,8,
0,0,
};

unsigned char SONG2[] ={ //Gods save the king
11,4,11,4,12,4,7,6,12,2,12,4,13,4,13,4,14,4,13,6,12,2,11,4,12,4,11,4,7,4,11,4,
11,2,12,2,13,2,14,2,15,4,15,4,15,4,15,6,14,2,13,4,14,4,14,4,14,4,14,6,13,2,12,4,
13,4,14,2,13,2,12,2,11,2,13,6,14,2,15,4,16,2,14,2,13,4,12,4,11,12,
0,0,
};

unsigned char SONG3[] ={ //The star-spangled banner
15,3,13,1,11,4,13,4,15,4,21,4,21,4,23,3,22,1,21,4,13,4,14,4,15,8,15,2,15,2,23,6,22,2,21,4,17,8,16,3,17,1,21,4,21,4,15,4,13,4,11,4,
15,3,13,1,11,4,13,4,15,4,21,4,21,4,23,3,22,1,21,4,13,4,14,4,15,8,15,2,15,2,23,6,22,2,21,4,17,8,16,3,17,1,21,4,21,4,15,4,13,4,11,4,
23,2,23,2,23,4,24,4,25,4,25,8,24,2,23,2,22,4,23,4,24,4,24,8,24,2,24,2,23,6,23,2,21,4,17,4,16,3,17,1,21,4,13,4,14,4,15,8,
15,2,15,2,21,4,21,4,21,2,17,2,16,4,16,4,16,4,22,4,24,2,23,2,22,2,21,2,21,4,17,4,
15,2,15,2,21,6,22,2,23,2,24,2,25,8,21,2,22,2,23,6,24,2,22,4,21,8,
0,0,
};

unsigned char SONG4[] ={ //挥剑问情
13,2,12,2,13,4,13,2,12,2,13,4,13,2,12,2,13,2,16,2,15,2,13,2,12,4,11,2,12,2,13,4,13,2,12,2,13,4,13,2,12,2,13,2,21,2,16,2,15,2,13,4,
13,2,15,2,16,4,16,2,21,2,16,4,15,2,13,2,12,8,12,4,11,2,12,2,13,4,13,2,15,2,13,4,13,2,11,2,12,8,12,4,
13,2,12,2,13,4,13,2,12,2,13,4,13,2,12,2,13,2,16,2,15,2,13,2,12,4,13,2,15,2,16,6,21,2,16,6,21,2,15,2,16,2,21,2,17,2,
16,2,15,2,13,2,15,2,16,8,16,4,13,2,15,2,16,8,16,4,13,2,15,2,16,2,21,2,16,4,16,8,15,8,13,4,15,4,16,6,21,2,15,4,13,4,12,8,
15,4,12,4,13,6,16,2,15,4,12,4,13,8,12,4,13,2,12,2,11,8,11,4,12,2,11,2,6,4,11,4,12,4,13,4,15,4,16,4,13,6,11,2,12,8,
13,4,15,4,16,6,21,2,15,4,13,4,12,8,15,4,12,4,13,6,16,2,15,4,13,4,15,8,16,4,21,4,22,8,16,8,15,8,16,4,21,4,23,4,22,4,21,4,15,4,16,4,
0,0,
};

unsigned char SONG5[] ={ //命起涟漪
6,2,13,2,12,2,11,2,7,4,5,4,6,6,5,2,3,8,30,2,5,2,6,2,13,2,12,3,12,1,11,2,12,2,12,2,13,2,13,8,30,4,
6,2,13,2,12,2,11,2,7,4,5,4,6,8,5,8,6,2,3,2,6,2,3,2,7,8,12,2,6,2,12,2,6,2,13,8,13,2,16,2,16,2,13,2,12,2,15,2,15,2,12,2,
11,2,12,2,12,2,13,2,7,6,5,2,6,2,13,2,13,2,16,2,15,4,11,4,11,2,12,2,12,8,30,4,
12,2,13,2,15,2,12,2,30,2,12,2,12,2,12,2,12,2,11,2,13,2,13,2,13,8,11,2,12,2,12,2,12,2,16,2,16,2,16,2,16,2,
16,2,15,2,16,2,13,2,13,8,12,2,13,2,15,2,12,2,30,2,12,2,12,2,12,2,12,2,11,2,13,2,12,2,12,2,11,1,6,1,6,4,
12,2,13,2,12,2,6,2,6,4,13,2,12,2,12,2,5,2,5,4,6,8,6,16,
0,0,
};

双子流云 发表于 2013-6-17 15:24:08

哈哈,多谢楼主!

liu873397317 发表于 2013-7-16 13:56:38

谢谢了,非常好,谢谢分享
页: [1]
查看完整版本: 发几首《裸奔三部曲》最后一节用到的音乐,自己照谱子做的,大家品评一下