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

35小吃技术网 推荐阅读 2023年08月05日01时33分36秒 99 0

研究过51单片机的朋友,相信大家对蜂鸣器并不陌生。 蜂鸣器有两种:有源蜂鸣器和无源蜂鸣器。 无源蜂鸣器的频率可以通过代码设置。 在学习的过程中,我们大多数人都需要做蜂鸣器发声的实验。 在这里,我给大家分享一下,基于Keil和仿真,如何使用无源蜂鸣器来播放音乐——“敢问路在何方”。 希望与大家多多交流,如有不当之处,敬请指正。

51单片机网仿真-蜂鸣器播放音乐《敢问路在何方》工具/资料

Keil和软件

《敢问路在何方》乐谱

51单片机仿真——蜂鸣器播放音乐《敢问路在何方》第一步:搭建硬件仿真电路

放置微控制器网芯片(这里我选择)。 在上一讲《【Keil+仿真】51单片机实现心形水灯》中,我们已经详细讲过。 如果你有兴趣的话,你可以在百度上搜索它的标题,然后就可以看到。 首先在搜索框中用关键词搜索,然后在搜索结果中找到并选择“”,然后单击“确定”按钮,最后返回绘图界面,单击左侧按钮放置单片机。 具体操作如下图所示:

放置蜂鸣器。 同样,首先在搜索框中输入“”搜索蜂鸣器,然后从搜索结果中选择它,最后将其放置在绘图区域中合适的位置,如下图所示:

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

连接好电线,将蜂鸣器正确连接至MCU。 这里我们使用的是P1口的5脚,具体情况如下图所示:

51单片机模拟-蜂鸣器播放音乐《敢问路在何方》第二步:在Keil中编写实现程序,采用自上而下的设计

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

构建项目。 其中.c文件用于存放蜂鸣器各个函数的子函数,最后主函数可以直接调用.c源文件中的子函数。 具体操作如下图所示:

在.c文件中编写()函数供main函数调用。 具体情况如图所示:

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

在.c文件中编写(int Tone, int Beat)函数,这样就可以调用()函数了。 具体情况如网图所示:

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

51单片机模拟-蜂鸣器播放音乐《敢问路在何方》第三步:下载乐谱,根据乐谱写出相关的频率和节拍

下载电视剧《西游记》主题曲《敢问路在哪里》的乐谱。 可以从百度文库下载。 得分如下:

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

将乐谱(本质上是调和节拍的一维数组)写入 .c 源文件中乐谱的代码中。 具体情况如下:

51单片机仿真——蜂鸣器播放音乐《敢问路在何方》第四步:将Keil编译后生成的hex文件下载到单片机中

至于如何将Keil编译生成的hex文件下载到单片机中,我们在上一讲《【Keil+仿真】51单片机实现心形水灯》中已经详细介绍过,这里不再赘述。 有兴趣的话可以在百度搜索“【Keil+仿真】51单片机实现心形流水灯”,在百度体验中就可以看到。 具体情况如下:

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

51单片机模拟-蜂鸣器播放音乐《敢问路在何方》结局:

基于Keil和仿真,如何使用无源蜂鸣器来播放音乐——“敢问路在哪里”,就介绍到这里了。 如果觉得还不错的话记得给好评哦!

51单片机模拟-蜂鸣器播放音乐《敢问路在何方》