冰楓論壇
標題:
製作32鍵電子琴 這樣能行嗎
[打印本頁]
作者:
洪嵐峰
時間:
2023-3-26 07:24
標題:
製作32鍵電子琴 這樣能行嗎
製作32鍵電子琴需要以下材料:
8051單片機(例如AT89C51等)
電子琴鍵盤模組(32鍵)
蜂鳴器
電容
電阻
電源
麵包板
杜邦線
以下是8051單片機和鍵盤模組的連結腳位圖:
+----+ +--------+
P2.0 --| 1 |--- C4 | |
P2.1 --| 2 |--- C5 | |
P2.2 --| 3 |--- C6 | |
P2.3 --| 4 |--- C7 | |
P2.4 --| 5 |--- C8 | |
P2.5 --| 6 |--- C9 | |
P2.6 --| 7 |--- C10 | |
P2.7 --| 8 |--- C11 | |
+----+ | |
| |
P3.0 --| 9 |--- R1 | |
P3.1 --| 10 |--- R2 | |
P3.2 --| 11 |--- R3 | |
P3.3 --| 12 |--- R4 | |
P3.4 --| 13 |--- R5 | |
P3.5 --| 14 |--- R6 | |
P3.6 --| 15 |--- R7 | |
P3.7 --| 16 |--- R8 | |
+----+ +--------+
C4 - C11: 鍵盤列腳
R1 - R8: 鍵盤行腳
以下是8051單片機的程式碼:
#include <reg51.h>
sbit SPEAKER = P1^0; // 蜂鳴器接P1.0
unsigned char row; // 鍵盤行變量
unsigned char key; // 鍵盤按鍵變量
unsigned char note; // 音符變量
unsigned char delay; // 延時變量
void delayms(unsigned int time) // 延時函數
{
unsigned int i, j;
for (i = 0; i < time; i++) {
for (j = 0; j < 120; j++);
}
}
void main()
{
while (1) {
for (row = 0; row < 8; row++) { // 檢測每一行
P2 = ~(1 << row); // 將列對應的P2輸出為低電平
key = P3; // 讀取行的值
if (key != 0xff) { // 按下按鍵
delay
delay = 10; // 設置延時
note = row * 8 + key; // 計算音符
while (delay--) { // 延時
SPEAKER = 1; // 發聲
delayms(note); // 發聲時長
SPEAKER = 0; // 停止發聲
delayms(note); // 停止發聲時長
}
}
}
}
}
這個程式碼使用了8051單片機的P2口和P3口來控制32鍵的電子琴鍵盤模組,並使用了蜂鳴器來發出聲音。當按下按鍵時,程式碼會計算出相應的音符,然後通過延時函數發出聲音。
歡迎光臨 冰楓論壇 (https://bingfong.com/)
Powered by 冰楓