洪嵐峰 發表於 2023-4-23 14:00:14

PIC18F6620

製作32鍵電子琴需要以下材料和工具:

材料:

PIC18F6620 微控制器
32 個按鈕或觸發器
32 個發聲器或喇叭
一個電源供應器 (通常是 9V 電池或外部電源)
適當的導線
電容器和電阻器

工具:

電線剝皮工具
焊接工具
電路板
連接線
麵包板
電池座
連接線插頭

以下是 PIC18F6620 的連接腳位:


              ┌───┐
      VSS   --| 1 |--   VDD
      RA0   --| 2 |--   RA7
      RB0   --| 3 |--   RB7
      RC0   --| 4 |--   RC7
      RD0   --| 5 |--   RD7
      RE0   --| 6 |--   RE7
      RF0   --| 7 |--   RF7
      RG0   --| 8 |--   RG7
      MCLR --| 9 |--   PGD
      VPP  --|10|--   PGC
     OSC1  --|11|--   T1OSI
     OSC2  --|12|--   T1OSO
     CCP2  --|13|--   T1CKI
      VSS  --|14|--   AN5
      VDD  --|15|--   AN4
     AN3   --|16|--   AN2
     AN1   --|17|--   AN0
     SS    --|18|--   SCL
     SDI   --|19|--   SDA
     SDO   --|20|--   RX
     TX    --|21|--   CCP1
     CCP2  --|22|--   RC6
     AN6   --|23|--   RC5
      RD4  --|24|--   RC4
      RD3  --|25|--   RC3
      RD2  --|26|--   RC2
      RD1  --|27|--   RC1
      RD0  --|28|--   RC0
     VSS   --|29|--   VDD
              └───┘
基本的 PIC18F6620 32鍵電子琴的程式碼範例:


#include <xc.h>
#include <stdint.h>

#pragma config FOSC = HS
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = OFF
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF

#define _XTAL_FREQ 20000000

uint8_t notes[] = {52, 54, 55, 57, 59, 60, 62, 64, 66, 67, 69, 71, 72, 74, 76, 78, 79, 81,83, 84, 86, 88, 90, 91, 93, 95, 97, 98, 100, 102, 103, 105, 107, 109};

void main(void) {
TRISB = 0b11111111; // Set all RB pins as input
TRISC = 0b00000000; // Set all RC pins as output

while (1) {
    for (uint8_t i = 0; i < 32; i++) {
        if (PORTB & (1 << i)) { // Check if button is pressed
            uint16_t period = 65536 - (int)((float)20000000 / (float)(4 * notes)) - 1; // Calculate period based on note
            CCPR1L = period >> 8; // Load period into CCP1 registers
            CCPR1H = period & 0xFF;
            RC0 = 1; // Turn on speaker
        }
    }
    RC0 = 0; // Turn off speaker
}
}



這個程式碼使用 PIC18F6620 的 CCP1 模組來生成PWM信號來控制音頻信號的發生。

每次迴圈,程式會掃描所有的按鈕輸入,如果按鈕被按下,則計算出相應音符的週期,並將週期載入CCP1寄存器中,以便生成該音符的聲音。

然後打開音箱,以便播放聲音。

最後,迴圈結束時,關閉音箱以停止聲音播放。
頁: [1]
查看完整版本: PIC18F6620