多语言展示
当前在线:1388今日阅读:2今日分享:38

51单片机仿真—蜂鸣器演奏乐曲《敢问路在何方》

学习过51单片机的朋友,相信大家对蜂鸣器并不陌生。蜂鸣器分有源蜂鸣器和无源蜂鸣器两种,无源蜂鸣器可以通过代码来设置频率。在学习的过程中,我们大都需要做蜂鸣器发声的实验,这里呢,我将和大家分享,基于Keil和Proteus仿真,如何使用无源蜂鸣器演奏乐曲——《敢问路在何方》。希望能和大家多多交流,如有什么不当之处,还望指正。
工具/原料
1

Keil和Proteus软件

2

《敢问路在何方》乐谱

第一步:在Proteus中搭建硬件仿真电路
2

放置蜂鸣器。同样,先在搜索框中输入“sounder”来搜素蜂鸣器,再在搜索结果中选择SOUNDER,最后放置在绘图区内合适的地方,具体情况如下图所示:

3

连接线路,将蜂鸣器正确地和单片机连接起来。这里我们使用的是P1口的5管脚,具体情况如下图所示:

第二步:在Keil中编写实现程序,采用自顶向下设计
1

【说明】:在整个项目工程中,我们采用自顶向下的设计方法,先写PlayMusic()函数,然后再在PlayMusic()函数中调用Buzzer(Tone_Beat[tone],Tone_Beat[beat])函数来使蜂鸣器发出不同频率的声调,再加上延时时间的控制,自然形成节拍,有了音调和节拍,自然就可以演奏乐曲了。这里我们使用定时器中断0来控制节拍,音调则由我们自己编写的延时函数来控制,通过延时来实现发出不同频率的音调。

2

建立工程。其中Buzzer_Music.c文件用于存放关于蜂鸣器的各个功能的子函数,,最后主函数直接调用Buzzer_Music.c源文件中的子函数即可。具体操作如下图所示:

3

在Buzzer_Music.c文件中编写PlayMusic()函数,以便主函数调用。具体情况如图:

4

在Buzzer_Music.c文件中编写Buzzer(int Tone,int Beat)函数,以便PlayMusic()函数调用。具体情况如图:

5

在主函数中编写中断函数,每1ms产生一次中断,用来控制节拍。编写完中断函数后,还要在Buzzer_Music.c文件中编写定时器初始化函数Timer0_Init(),在这里我们采用定时器0中断,具体情况如图:

第三步:下载乐谱,根据乐谱编写相关频率和节拍
2

根据乐谱在Buzzer_Music.h头文件中编写关于音调和节拍定义的宏,以便后面使用代码编写乐谱,让程序更加直观。具体情况如下图:

3

根据乐谱在Buzzer_Music.c源文件中用代码编写乐谱(本质上是一个存放着音调和节拍的一维数组)。具体情况如下图:

第四步:将Keil编译后生成的hex文件下载到单片机中
2

运行仿真电路,观察效果。具体情况如下图:

尾声:

基于Keil和Proteus仿真,如何使用无源蜂鸣器演奏乐曲——《敢问路在何方》,这里已经介绍完了。如果大家觉得还不错的话,记得给好评哦!

推荐信息