冰楓論壇

標題: 製作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 冰楓