My Piano, My Music Dream
子供からずっと音楽の夢が持っています。今は気持ちも変わらない、ですから、工学部を進学しても、音楽は趣味の一部分として続けつつ、情報学と電気系の専門知識を見つけて、活用して、このプロジェクトが出来ました。
どうぞ、ご清聴ください。
I use the stm32 and keil5 to develop a software piano and show little star or canon in C.
まずは一度演奏を演示しましょう!
[http]
原理グラフ 電路
まずは電路図からご説明行きたいと思います。

- 如图所示,按键部分默认一端接地,另一端高电平。当不进行任何操作时,开关断开。按下按键后,高低电平两侧接通,程序检测到电势变化,随后执行命令程序。
- 図に示されているように、ボタン部分は通常、片側が接地に接続され、もう片側は高い電圧に接続されています。何も操作していないと、スイッチはオープンです。ボタンを押すと、高電圧と低電圧の2つの側が接続され、プログラムは電位の変化を検出し、その後コマンドプログラムを実行します。
ソフトウェア コード
つぎのコードは、組み込みCプログラムで、ハードウェアデバイスを制御するためのものです。具体的には、次のタスクを実行します。
- ライブラリとヘッダーファイルのインクルード:コードの冒頭で、ハードウェアとのやり取りに必要な関数と定義を提供するいくつかのライブラリとヘッダーファイルが含まれています。
- グローバル変数とマクロの定義:コード中でいくつかのグローバル変数、例えばボタンの状態やフラグビット、およびコード内でGPIOコントロール、LEDコントロール、および7セグメントディスプレイの表示を簡素化するためのいくつかのマクロが定義されています。
- 音楽の再生:GPIOピンとタイマーの制御を使用して、音楽を再生する機能が実装されています。異なる音程の音符を再生でき、コードにはいくつかの音楽メロディの例が提供されています。
- ボタン処理:ボタンの状態を検出および処理し、ボタンが押されたときに音楽の再生、停止、リプレイのトリガーなどのイベントが発生します。このコードにはボタンのデバウンス機能も含まれており、ボタンの安定な押下およびリリースを確保します。
- 7セグメントディスプレイの表示:7セグメントディスプレイのピン状態を制御して、数字の表示機能が実現されています。コードにはディスプレイされる数字の配列が定義されています。-詳しい内容はGitHuBを訪問してくだいさい。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* <h2><center>© Copyright (c) 2019 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
//定义按键部分
unsigned char Key1_flag=0;
unsigned char Key2_flag=0;
unsigned char Key3_flag=0;
unsigned char Key4_flag=0;
unsigned char Key5_flag=0;
unsigned char Key6_flag=0;
unsigned char Key7_flag=0;
unsigned char Key8_flag=0; //定义按键部分
unsigned char Key9_flag=0; //定义按键部分
uint8_t Dis_Data[]= {0x3,0x9F,0x25,0xD,0x99,0x49,0x41,0x1F,0x1,0x9,0xff}; //0,1,2,3,4,5,6,7,8,9,全灭 //定义数码管显示部分
unsigned int Fre = 0; //频率数据
unsigned int SoundFlag = 0; //管脚取反标志位
uint16_t voiceCount = 0 ; //播放音乐的几个变量
uint16_t voiceNum = 0 ; //音调
uint16_t songNum = 0 ; //歌曲
uint16_t state = 0 ;
uint16_t stateF = 0 ;
uint16_t tone[]= //低音1调到高音7调
{
63628,63835,64021,64103,64260,64400,64524,
64580,64684,64777,64820,64898,64968,65030,
65058,65100,65157,65178,65217,65252,65283
};
ですので、1−7はdo re mi fa so ra si別々。しかし、8は演奏したメロディを再生することができる。コードについて詳しいの部分はこのGitHubに公開されています。
ハドウェア
主にSTM32F103C8T6
表

裏
.JPG?raw=true)
完成!
.JPG?raw=true)
もう疲れかなぁ
もう疲れよね
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 PHANTOM!





