站内搜索
更多
[STM32]3*5MIDI音乐键盘
专业版

[STM32]3*5MIDI音乐键盘

简介

一款3*5的简易MIDI音乐键盘,支持实时切换128种乐器、10个八度、12个自然大调、部分音效设定和简易的录制与回放,键盘布局参考于《光遇》。

简介:一款3*5的简易MIDI音乐键盘,支持实时切换128种乐器、10个八度、12个自然大调、部分音效设定和简易的录制与回放,键盘布局参考于《光遇》。
复刻成本:120

开源协议

GPL 3.0

创建时间:2025-12-29 19:25:39更新时间:2026-05-27 13:38:06

描述

项目简介与功能

本项目是基于STM32F103C8T6的简易MIDI音乐键盘,可通过编码器旋钮和按钮实时切换GM1(General MIDI Level 1)中的128种乐器、12种自然大调、10个八度(C-1 ~ C9)、部分音效(如延音踏板和混响),当前演奏乐器、大调、八度和部分音效设定都显示在0.96寸oled屏幕上。在软件代码V2.0版本中,新增简易的录制与回放。
对于3*5矩阵键盘,第一个按键(K1)对应着当前八度和当前大调的音高,比如当前八度为5,当前大调为C大调时,K1对应音名C4(中央C),按下时会相应输出C4的音符信号。后面14个都按照自然大调音阶所一一对应。这意味着一个八度内只有7个音高。

关于扩展性:
本项目中STM32F103C8T6最小系统板还有9个IO口未使用,如果想更改键盘布局或者想一个八度有12个音高能自由实现。甚至用来实现传统的61键电子琴也是可以的。

项目参数

此处可填写项目的相关功能参数介绍,示例:
本设计采用STM32F103C8T6最小系统板,作为主控制器。
本设计采用VS1053模块(正点原子),主要作用是作为MIDI合成器和输出音频信号。
本设计采用0.96寸OLED屏幕,分别显示当前演奏乐器、八度和大调和部分音效。
本设计采用EC11编码器,用于实时更改演奏乐器、八度和大调和部分音效。
本设计采用3*5矩阵键盘,按键选用的是机械键盘轴,键盘布局来源于游戏《光遇》,其各种谱子可直接用于该MIDI音乐键盘。

原理解析

弹奏原理: 根据VS1053数据手册编写VS1053的驱动库。上电后只需对VS1053进行软件复位、配置好时钟寄存器和模式寄存器后,打实时MIDI补丁就能开启VS1053的实时MIDI功能。而后根据MIDI协议对VS1053发送MIDI指令就能输出对应音符信号和修改音效。逻辑主要是进行各种初始化后进入主循环,分别是编码器的检测与处理逻辑,OLED屏幕显示,3*5矩阵键盘的扫描,MIDI音乐演奏。

部分核心代码如下:

弹奏原理代码.png

录制与回放原理: 我打算将数据存储在STM32自带的flash中,并设置四个通道用于存储和回放。因为整个项目使用了MIDI协议,自然而然的参考了标准MIDI文件格式,但是一个文件也要至少十几KB,并且文件中的很多MIDI功能在本项目中并没有使用到,所以我做了进一步的简化,得到很简单的规则如下:
规则.png
定好规则后,就能按照这个规则设想开始编写代码,首先是基本的定义:

基础定义1_0.png
基础定义1_1.png

基础定义1_2.png

基础定义1_3.png

而后是最核心的五个函数:
1.定时器中断函数::在录制功能中,只需要用到里面的record_tick++和time++。
在回放功能中,则根据你选择了哪个通道进行回放从而进入哪个if分支。

录制与回放原理_定时器中断函数.png

2.录制函数:
就是在弹奏函数上加上录制功能,在弹奏函数中,当你按下或松开按键时,单片机会发送MIDI的NoteOn或NoteOff指令,那么加入录制功能就是在每次发送一个MIDI指令后顺便将时间差数据和音符数据处理后,赋值给“Data"。
录制函数1_1.png

录制函数1_2.png

3.存储函数:

存储函数.png

4.回放功能初始化函数:

回放功能初始化函数.png

5.回放函数:
就是将上面提到的“规则”用代码写出来

回放函数1_1.png
回放函数1_2.png

## 软件代码
代码与HAL库绑定较深,不用HAL库的话需要改很多东西。主要是IO口的输出和读取电平直接用的HAL库的代码。
开发环境是STM32CubeIDE和Clion。
开发语言是纯C语言
整个代码工程见附件.

## 可能用到的五金材料
M2.5×22+6单头六角铜柱3个;
M2.5×10+4单头六角铜柱2个;
M2.5×9六角双通铜柱四个;
M2.5×8沉头机丝8个。

铜柱标识.png
## 注意事项
3D模型是在solidworks设计的.
项目本身不发声,需要额外接3.5mm接口的扬声器。
电路板和3D模型都是我学习教程后第一个制作的作品,有很多瑕疵,仅供参考!!!不建议直接使用,同时部分通孔安装铜柱和螺丝会与键帽相互阻挡。更不严丝合缝.
在使用录制和回放功能前,需要检查程序大小,最高不能超过36KB,
本次工程代码在STM32CUBEIDE环境下和编译器优化选项为-Og下对flash和RAM的占用分别为32.4KB和10.2KB左右.

键盘的键帽只推荐17.5MM的圆形键帽(17.5mm已经很紧凑了,再大一点就安装不上去了)。
PCB和3D外壳的通孔全部使用的是3mm直径。

## 实物图

实物图1.png

实物图2.png

实物图3.jpg

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
1
MIDI音乐键盘装配体1.rar
21

附件

序号文件名称下载次数
1
MIDI音乐键盘装配体1.SLDASM
22
2
部分功能演示.mp4
15
3
MIDI_Keyboard.rar
26
4
MIDI_Keyboard V2.0.rar
19
5
录制与回放演示视频.mp4
2
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航