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

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

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

. .. . .

timeh=quzi[tem]; //把音符相应的计时器重装载值赋

予timeh和timel timel=quzi[tem+1]; jindu++; TH0=timeh;

TL0=timel; m=music3[jindu];

jindu++;

}

TR0=1; delay(m*200);

TR0=0; }

}

}

/********************** 函数名称:void init_sys()

功能描述:系统初始化,功能是配置IO口 入口参数:无 出口参数:无 备注:

***********************/ void init_sys() { P0M0=0xff; P0M1=0x00;

P2M0=0x08; .

//把timeh和timel赋予计时器

//取得节拍

//开定时器1 //等待节拍完成, 通过P3^4口输出音频 //关定时器1

.. . .

. .. . .

P2M1=0x00; P3M0=0x10; P3M1=0x00; P4M0=0x00; P4M1=0x00; P5M0=0x00; P5M1=0x00;

}

/********************** 函数名称:void init()

功能描述:定时器和外部中断的初始化 入口参数:无 出口参数:无 备注:

***********************/ void init()

{ TMOD=0x01; TH0=0xD8; TL0=0xEF; IE=0x87; //IP=0x02; IP=0x01; TR0=0;

}

/********************** 函数名称:Exint0

功能描述:Key1对应的外部中断0的中断响应函数 ***********************/

. .. . .

. .. . .

void Exint0() interrupt 0 {

if(Key1==0) { delay(10);

//延时消抖

if(Key1==0)

zanting=~zanting; //zanting==1 暂停播放

} }

void main() { init_sys(); init(); P0=0x00; vibrate=1; flag=0;

//播放标志位清零

while(1) { playmusic();

}

}

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

函数名称:void tim1() interrupt 1

功能描述:定时器0中断处理,重新装值,并把beep值取反,产生方波 入口参数:无 出口参数:无 备注:

***********************/ void tim1() interrupt 1 //计时器控制频率

{

. .. . .

. .. . .

TH0=timeh; TL0=timel;

if(zanting==1)

beep=0; else {

beep=~beep; if(vibrate==0)

{ }

} }

jindu=0; gequ++; if(gequ==3) gequ=0;

//歌曲的进度清零,从头开始演唱

五、设计结果

单片机上电后,初始现象为自动播放第一首歌,敲击板子使其振动,切换播放第二首歌,

同理再次振动播放第三首歌,再次振动重新从头播放,按K1键停止播放。

六、操作说明

K1键用于暂停和播放歌曲,敲击板子用于切换歌曲。

七、心得体会

本来这个可振动感应的电子音乐是没有代码的,但是结合之前提供的消抖技术,还有延时技术,以及本来提供的振动感应的代码,就可以做出这个程序。但是由于之前的可切换电子音乐也没有代码,所以在实现的过程中有在网上搜素过相关资料,才最终实现了功能。

. .. . .

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

.....timeh=quzi[tem];//把音符相应的计时器重装载值赋予timeh和timeltimel=quzi[tem+1];jindu++;
推荐度:
点击下载文档文档为doc格式
9ptve0g9pa6j6mw9sjhs44p5c1cp9m00dyx
领取福利

微信扫码领取福利

微信扫码分享