好文档 - 专业文书写作范文服务资料分享网站

可振动感应切换的电子音乐

天下 分享 时间: 加入收藏 我要投稿 点赞

. .. . .

0xfe,0x56,

0xfe,0x6e, //高3 0xfe,0x9a,

0xfe,0xc1, //高5 0xfe,0xe4, 0xff,0x03 };

/**********************

函数名称:void delay(unsigned int xms) 功能描述:延时

入口参数:xms:输入需要延时的毫秒值 出口参数:无 备注:

***********************/ void delay(unsigned int xms) { }

/**********************

函数名称:uchar quyin(uchar tem)

功能描述:在quzi数组中,找到music数组定义的简谱音符的重装值,并返回其在quzi数组中的位置

入口参数:tem:music数组中定义的简谱音符 出口参数:返回的是tem音符在quzi数组中的位置值 备注:

***********************/

. .. . .

//高7

uint i,j;

for(i=xms;i>0;i--)

for(j=124;j>0;j--);

. .. . .

uchar quyin(uchar tem) {

uchar qudiao,jp,weizhi; qudiao=tem/16; jp=tem; if(qudiao==1)

//定义曲调,音符和位置 //高4位是曲调值 //低4位是音符

//当曲调值为1时,即是低八度,低八度在quzi数

组中基址为0

qudiao=0;

else if(qudiao==2)

组中基址为14

qudiao=14;

else if(qudiao==3)

组中,基址为28

qudiao=28;

weizhi=qudiao+(jp-1)*2;

quzi数组中的位置 return weizhi;

}

/********************** 函数名称:void playmusic() 功能描述:播放音乐 入口参数:无 出口参数:无 备注:

***********************/ void playmusic() { uchar p,m,tem; //m为节拍

while(1) . //当曲调值为2时,即是中八度,中八度在quzi数

//当曲调值为3时,即是高八度,高八度在quzi数

//通过基址加上音符作为偏移量,即可定位此音符在

//返回这一个位置值

.. . .

. .. . .

{ while(zanting)

beep=0; if(gequ==0) {

p=music1[jindu]; //如果碰到结束符,延时1秒,回到开始再来一遍 if(p==0x00) {

jindu=0; delay(1000); break;

//歌曲选择位为0,则播放第一首歌

}

else if(p==0xff) //若碰到休止符,延时100ms,继续取下一音符 {

jindu=jindu+1; delay(100); TR0=0; break;

} else {

tem=quyin(music1[jindu]);

//取出当前音符在quzi数组中

//正常情况下取音符和节拍

的位置值

timeh=quzi[tem];

//把音符相应的计时器重装载值赋

予timeh和timel

timel=quzi[tem+1]; jindu++; TH0=timeh; TL0=timel; m=music1[jindu]; jindu++;

//取得节拍

//把timeh和timel赋予计时器

. .. . .

. .. . .

}

TR0=1; //开定时器1

delay(m*180); //等待节拍完成, 通过P3^4口输出音频

}

TR0=0; //关定时器1

else if(gequ==1) {

//歌曲选择位为1,则播放第二首歌

p=music2[jindu]; //如果碰到结束符,延时1秒,回到开始再来一遍 if(p==0x00) {

jindu=0; delay(1000); break;

}

else if(p==0xff) //若碰到休止符,延时100ms,继续取下一音符 {

jindu=jindu+1; delay(100); TR0=0; break;

} else {

tem=quyin(music2[jindu]);

//取出当前音符在quzi数组中

//正常情况下取音符和节拍

的位置值

timeh=quzi[tem];

//把音符相应的计时器重装载值赋

予timeh和timel

timel=quzi[tem+1]; jindu++;

. .. . .

. .. . .

TH0=timeh; TL0=timel;

//把timeh和timel赋予计时器

m=music2[jindu]; jindu++;

//取得节拍

}

TR0=1; //开定时器1

的位置值

. delay(m*300); //等待节拍完成, 通过P3^4口输出音频

TR0=0; //关定时器1 }

else if(gequ==2) //歌曲选择位为2,则播放第三首歌

{

p=music3[jindu]; //如果碰到结束符,延时1秒,回到开始再来一遍 if(p==0x00) { jindu=0; delay(1000);

break;

}

else if(p==0xff) //若碰到休止符,延时100ms,继续取下一音符 { jindu=jindu+1; delay(100); TR0=0;

break;

} else

//正常情况下取音符和节拍

{

tem=quyin(music3[jindu]);

//取出当前音符在quzi数组中

.. . .

可振动感应切换的电子音乐

.....0xfe,0x56,0xfe,0x6e,//高30xfe,0x9a,0xfe,0xc1,//高50xfe,0xe4,0xff,0x03};
推荐度:
点击下载文档文档为doc格式
9ptve0g9pa6j6mw9sjhs44p5c1cp9m00dyx
领取福利

微信扫码领取福利

微信扫码分享