全部博文(321)
分类: 嵌入式
2014-05-14 23:23:51
电子音乐:
1.首先让定时器4中断处理函数2ms执行一次time10ms()函数。注:time4是1ms执 行一次中断 。(div2ms<1)?(++div2ms):(div2ms=0);用switch语句。//用这种方式可以防 止超出范围,当然超出范围概率比较小。如果用%,i++方式,要有个判断条件
2.2ms执行一次time10ms函数后,可在(div10ms<4)?(++div10ms):(div10ms=0);同样用 swith语句来5ms来执行一次playsong。这样playsong就10ms才执行一次。这 边playsong函数前搞一个panysongflag,用来开关电子音乐。
3.定义一个二维数组放音符频率对应表,音符频率对应表tonefreq[][8]={ // 2
/* 1 2 3 4 5 6 7*/
file:///C:/Documents%20and%20Settings/Administrator/桌面/ppt/音符频率对应表.mht
/* low */
{0, 262, 294, 330, 349, 392, 440, 494 },
{0, 277, 311, 330, 370, 415, 466, 494 }, //("#"表示半音,用于上升或下降半个 音)
/* middle */
{0, 523, 578, 659, 698, 784, 880, 988 },
{0, 554, 622, 659, 740, 831, 932, 988 }, //#
/* high */
{0, 1046, 1175, 1318, 1397, 1568, 1760, 1976},
{0, 1109, 1245, 1318, 1480, 1661, 1865, 1976} //#
};
4.定义一个结构体用来放乐谱,
.struct songdata { //北京欢迎你
int tone;//音色,中低高
int freq;//对应是哪个调调
int time; //多少个10ms,一般2个音节之 间是40个左右10ms
}bjfyn[] = {STARTTONE,3,TIMELONG。。。音谱}
5.开始,停止,暂停。注:暂停的时候,songindex不要为0
九、电子琴:
用switch,语句。。每条语句前先stopbuzzer(),具体看代码;