STM32 使用STM32F103控制无源蜂鸣器发声播放音乐
使用STM32控制无源蜂鸣器发声播放音乐
【注:学习STM32总结做的笔记,大神勿喷。有不足之处还望不吝赐教。
-----本篇大部分转载而来,有侵权请联系作者,谢谢。】
原博客地址:
https://blog.csdn.net/fanxp66/article/details/80264700
https://blog.csdn.net/SNEZ_H/article/details/71172010
一、无源蜂鸣器和有源蜂鸣器
有源蜂鸣器内含振荡源,只要一通电就发声,但发生频率固定,音色单一;无源蜂鸣器内部不含振荡源,内部结构相当于电磁场扬声器,可以通过给他输出一定频率的信号才能发声。
人耳能听到的频率范围在20Hz–20kHz之间,通过STM32的GPIO引脚快速切换高低电平输出就能实现无源蜂鸣器的发声,切换的频率不同,发出的音调就不一样。
二、音乐播放的实现
一段音乐就是不同频率的声音按一定的时间节拍转换发出。所以音乐包含音调和节拍信息。
程序中首先准备音频数据表:
// 低Si Do Re Mi Fa So La Si ¸高Do¸高Re¸高Mi¸高Fa¸高So 无
uc16 tone[] ={247,262,294,330,349,392,440,294,523, 587, 659, 698, 784, 1000};
u8 music[]={ 5,5,6,8,7,6,5,6,13,13,……};//音调
u8 time[] = { 2,4,2,2,2,2,2,8,4, 4, ……}; //节拍时间
依次从音调数组中取music[i],然后根据music[i]的值在tone数组中得到该音的发声频率(tone[music[i]]),调用sound函数控制蜂鸣器发声,声音的发声时间有time数组控制。
如果我们能够控制好频率和节拍,那就有可能演奏出动听的音乐。因此,我们首先需要搞清楚各音调的频率,具体见下表(分别为低音、中音和高音):
我们知道了音调的频率后,下一步就是控制音符的演奏时间。每个音符都会播放一定的时间,这样才能构成一首优美的曲子,而不是生硬的一个调的把所有的音符一股脑的都播放出来。音符节奏分为一拍、半拍、1/4拍、1/8拍,我们规定一拍音符的时间为1;半拍为0.5;1/4拍为0.25;1/8拍为0.125……,所以我们可以为每个音符赋予这样的拍子播放出来,音乐就成了。
从简谱看,该音乐是C调的,这里的各音符对应的频率对应的是上表中C调的部分。另外,该音乐为四分之三拍,每个对应为1拍。(我们知道,音符节奏分为一拍、半拍、1/4拍、1/8拍,我们规定一拍音符的时间为1;半拍为0.5;1/4拍为0.25;1/8拍为0.125……,)几个特殊音符说明如下:
第一,普通音符。如第一个音符5,对应频率393,占1拍。
第二,带下划线音符,表示0.5拍;两个下划线是四分之一拍(0.25)。
第三,有的音符后带一个点,表示多加0.5拍,即1+0.5。
第四,有的音符后带一个“—”,表示多加1拍,即1+1。
第五,有的两个连续的音符上面带弧线,表示连音,可以稍微改下连音后面那个音的频率,比如减少或增加一些数值(需自己调试),这样表现会更流畅,其实不做处理,影响也不大。
** 注:因为我不会看乐谱,编的并不怎么样,所以。。。如果要改成别的歌曲,改时间和音调就可以了。**
源码地带:
beep.c
beep.h
#ifndef __BEEP_H #define __BEEP_H #include "sys.h"#define BEEP PAout(11) void BEEP_Init(void); void Sound(u16 frq); void Sound2(u16 time); void play_music(void); void play_successful(void); void play_failed(void);#endifmain.c
#include "sys.h" #include "delay.h" #include "usart.h" #include "key.h" #include "led.h" #include "beep.h" int main(void){ delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); KEY_Init(); LED_Init(); BEEP_Init(); while(1){ play_music(); } }文件源码下载链接:https://download.csdn.net/download/qq_28056277/10853285
https://download.csdn.net/download/qq_28056277/11429148
(考虑到积分越下载越贵的问题,就再上传了一次)
转载总结文章,若有侵权,请联系作者删除,谢谢。
总结
以上是生活随笔为你收集整理的STM32 使用STM32F103控制无源蜂鸣器发声播放音乐的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: SiTime 硅晶振的可靠性MTBF计算
- 下一篇: 2022年最新山东建筑施工电工(建筑特种