STM32使用无源蜂鸣器演奏歌曲
上一次使用了有源蜂鸣器,只能发出固定的”滴滴“声,当然不能满足于此呀。使用无源蜂鸣器,只要输出不同频率的PWM波,即可发出不同的音符。
不同的音符组合起来就是一个曲子了。
改变PWM的音调,可以输出Do re mi fa so la si do这样的7个音符,还可以输出不同音调的Do re mi fa so la si do。
在实例程序里面,我定义了低中高三个音阶。音符的频率则是mbed提供的。已经宏定义好了。
只要改变PWM的输出周期,即可发出不同的音调(频率是周期的倒数)。
为了方便起见,写了一个音阶类(Pitch),虚基类。里面有一个perform函数,参数是音符和持续时间。例如要发出Do这个声音,持续0.5s,只要perform(1,0.5)就好。
还有一个Stop函数,停止响声0.5s则stop(0.5),无参数则直接停止。后面的Low、Mid、High类则是派生类,实现了Pitch的虚函数。
程序里面包括:
1、发出低中高三个声调的Do re mi fa so la si do音。
2、中音版的小星星。
3、低音版的小星星。
#include "mbed.h" #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978 //7个音符组成了美妙的音乐 //低 Do re mi fa so la si do
int melody[] = { NOTE_C4, NOTE_D4,NOTE_E4, NOTE_F4, NOTE_G4,NOTE_A4,NOTE_B4,NOTE_C5}; //中 Do re mi fa so la si do
int melody2[] = { NOTE_C5, NOTE_D5,NOTE_E5, NOTE_F5, NOTE_G5,NOTE_A5,NOTE_B5,NOTE_C6}; //高
int melody3[] = { NOTE_C6, NOTE_D6,NOTE_E6, NOTE_F6, NOTE_G6,NOTE_A6,NOTE_B6,NOTE_C7}; //PWM输出口
PwmOut m(PB_13); //音调类
class Pitch{ public: virtual void perfrom(int,double)=; void stop(double time = ){ if(time==)
m = ;
else{ m = ;
wait(time); }//end else }//end stop }; class Low:public Pitch{ public:
void perfrom(int index,double time){ m.period_us(/melody[index-]); m.write(0.5); wait(time); } }; class Mid:public Pitch{ public:
void perfrom(int index,double time){ m.period_us(/melody2[index-]); m.write(0.5); wait(time); } }; class Hig:public Pitch{ public:
void perfrom(int index ,double time){ m.period_us(/melody3[index-]); m.write(0.5); wait(time); } }; int main() {
/*试音
for (int thisNote = 0; thisNote < 8; thisNote++) { m.period_us(1000000/melody[thisNote]); m.write(0.5); wait(0.5); } for (int thisNote = 0; thisNote < 8; thisNote++) { m.period_us(1000000/melody2[thisNote]); m.write(0.5); wait(0.5); } for (int thisNote = 0; thisNote < 8; thisNote++) { m.period_us(1000000/melody3[thisNote]); m.write(0.5); wait(0.5); } m = 1;
*/ /*中音版
Mid mid; //11 55 66 5
mid.perfrom(1,0.5);
mid.perfrom(1,0.5);
mid.perfrom(5,0.5);
mid.perfrom(5,0.5);
mid.perfrom(6,0.5);
mid.perfrom(6,0.5);
mid.perfrom(5,0.8);
mid.stop(0.2); //44 33 22 1
mid.perfrom(4,0.5);
mid.perfrom(4,0.5);
mid.perfrom(3,0.5);
mid.perfrom(3,0.5);
mid.perfrom(2,0.5);
mid.perfrom(2,0.5);
mid.perfrom(1,0.5);
mid.stop(0.2); //55 44 33 2
mid.perfrom(5,0.5);
mid.perfrom(5,0.5);
mid.perfrom(4,0.5);
mid.perfrom(4,0.5);
mid.perfrom(3,0.5);
mid.perfrom(3,0.5);
mid.perfrom(2,0.5);
mid.stop(0.2); //55 44 33 2
mid.perfrom(5,0.5);
mid.perfrom(5,0.5);
mid.perfrom(4,0.5);
mid.perfrom(4,0.5);
mid.perfrom(3,0.5);
mid.perfrom(3,0.5);
mid.perfrom(2,0.5);
mid.stop(0.2); //11 55 66 5
mid.perfrom(1,0.5);
mid.perfrom(1,0.5);
mid.perfrom(5,0.5);
mid.perfrom(5,0.5);
mid.perfrom(6,0.5);
mid.perfrom(6,0.5);
mid.perfrom(5,0.5);
mid.stop(0.2); //44 33 22 1
mid.perfrom(4,0.5);
mid.perfrom(4,0.5);
mid.perfrom(3,0.5);
mid.perfrom(3,0.5);
mid.perfrom(2,0.5);
mid.perfrom(2,0.5);
mid.perfrom(1,0.5); mid.stop();
*/ //低音版 Low low; //11 55 66 5
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.8);
low.stop(0.2); //44 33 22 1
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.stop(0.2); //55 44 33 2
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.stop(0.2); //55 44 33 2
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.stop(0.2); //11 55 66 5
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.stop(0.2); //44 33 22 1
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5);
low.perfrom(,0.5); low.stop(); }
蜂鸣器比较刺耳其实,听久了还是很难受。
在代码里面是不能调节音量的,要调低音量,加个电阻就好。最大的音量是无电阻+高电压。
没法录音,所以还是上图。
效果可以上秒拍听一下:http://video.weibo.com/show?fid=1034:aee9c2288407e28eca7eb89d5ecc8a1d
STM32使用无源蜂鸣器演奏歌曲的更多相关文章
- 【春节歌曲回味 | STM32小音乐盒 】PWM+定时器驱动无源蜂鸣器(STM32 HAL库)
l STM32通过PWM与定时器方式控制无源蜂鸣器鸣响 l STM32小音乐盒,歌曲进度条图形显示与百分比显示,歌曲切换 l 编程使用STM32 HAL库 l IIC OLED界面编程,动画实 ...
- 详解树莓派Model B+控制蜂鸣器演奏乐曲
步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这里将用GPIO的PWM接口驱动无源蜂鸣器弹奏乐曲,本文基于树莓派Mode B+,其他版本树莓派实现时需参照相关资料进行修改! 1 预备知识 1.1 ...
- verilog实验1:基于FPGA蜂鸣器演奏乐曲并数码管显示
一.实验任务 利用FPGA进行代码开发,使蜂鸣器演奏出乐曲<生日快乐>,将音调显示在数码管.原理为蜂鸣器为交流源蜂鸣器,在引脚上加一定频率的方波就可以发声,而且发声的频率由所加方波决定.这 ...
- STM32开发指南-蜂鸣器实验
另一种I/O作为输出的应用,利用一个I/O来控制板载的有源蜂鸣器,实现蜂鸣器控制. PS:有源蜂鸣器自带了震荡电路,一通电就会发声:无源蜂鸣器则没有自带震荡电路,必须外部提供2~5Khz左右的方波驱动 ...
- Arduino入门笔记(4):用蜂鸣器演奏音乐并配有LED闪烁
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.Arduino板 https://item.taoba ...
- 嵌入式02 STM32 实验05 蜂鸣器
蜂鸣器:是一种一体化结构的电子讯响器.主要分为分压式蜂鸣器和电磁式蜂鸣器两种类型. 一.有源/无源蜂鸣器(不是指是否带电源,而是有没有自带震荡电路) 1.有源蜂鸣器:有源蜂鸣器自带震荡电路,一通电就会 ...
- Arduino与无源蜂鸣器
1.Arduino无源蜂鸣器传感器模块 我们可以使用Arduino进行很多互动作品,其中最常用的是声光显示器.之前的所有实验都与LED有关.但是,这个实验中的电路可以产生声音.通常,实验是通过蜂鸣器或 ...
- Linux编程实现蜂鸣器演奏康定情歌
Linux编程实现蜂鸣器演奏康定情歌 摘自:https://blog.csdn.net/jiazhen/article/details/3490979 2008年12月10日 15:40:00 j ...
- Raspberry Pi开发之旅-控制蜂鸣器演奏乐曲
一.无源蜂鸣器和有源蜂鸣器 步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这次尝试用GPIO的PWM接口驱动无源蜂鸣器弹奏一曲<一闪一闪亮晶晶>. 无源蜂鸣器: 无源内部没有震荡源, ...
随机推荐
- oracle索引-二元高度
本文转载 作为数据库管理员来说,要在表上建立索引很简单.但是要知道这个索引是否合适.如何优化索引则就具有一定的难度.这项工作也是用来评价一个数据库管理员是否算得上专家的一个重要指标.那么为什么索引优化 ...
- LeetCode OJ:Linked List Cycle(链表循环)
Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...
- 从无到有开发自己的Wordpress博客主题---代码环境准备
注意这里说的是代码环境准备哦,而不是L(M)AMP运行环境哦,运行环境会在后述文章中在写. 一.在本地初始化git环境并且链接上gitee 1.在gitee上创建一个项目托管你的代码 这个不在赘述,按 ...
- 使用sqlmap执行SQL注入攻击
sqlmap是开源的SQL注入自动攻击工具,它可以自动的探测SQL注入点并且进一步控制网站的数据库. Kali Linux默认安装了这个工具. 找到潜在的攻击目标 第一步是找到有SQL注入漏洞的网站. ...
- libwebsockets libwebsockets-webserver.c hacking
/********************************************************************************** * libwebsockets ...
- 【学习】Git和Github菜鸟入门
Git 是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 目录(自己创建吧) 生成ssh密钥:ssh-keygen -t rsa -C "邮箱" ...
- 智能电视软件安装(WIFI上网)
智能电视软件上网(电视可连接无线网的称之为:智能电视) 1.安装当贝市场 链接:http://www.dangbei.com/ 2.安装电视家浏览器 链接:http://www.tvapk.net/f ...
- 因实现本地浏览器访问nginx修改配置文件后,安装vsftpd失败
解决方法如下(修改dns配置) vi /etc/resolv.conf 在此文件最后加入:nameserver 8.8.8.8 如果没有vi编辑器可用: echo "nameserver 8 ...
- ORA-12154,TNS错误解决办法
- php MySQL使用rand函数随机取记录(转)
php MySQL使用rand函数随机取记录 如何在mysql中使用随机数, 如何写一个语句能一下更新几百条MYSQL数据! 需要测试MYSQL数据库,里面有一个上万条数据的数据库,如何写一个PHP文 ...