Chinaunix首页 | 论坛 | 博客
  • 博客访问: 812465
  • 博文数量: 321
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 936
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-23 11:25
文章分类

全部博文(321)

文章存档

2017年(1)

2016年(10)

2015年(61)

2014年(187)

2013年(62)

分类: 嵌入式

2014-05-14 23:23:51

电子音乐:

1.首先让定时器4中断处理函数2ms执行一次time10ms()函数。注:time41ms 行一次中断 。(div2ms<1)?(++div2ms):(div2ms=0);switch语句。//用这种方式可以防 止超出范围,当然超出范围概率比较小。如果用%,i++方式,要有个判断条件

2.2ms执行一次time10ms函数后,可在(div10ms<4)?(++div10ms):(div10ms=0);同样用 swith语句来5ms来执行一次playsong。这样playsong10ms才执行一次。这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(),具体看代码;

 

阅读(814) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~