冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 661|回覆: 0
打印 上一主題 下一主題

[討論] PIC18F6620

[複製鏈接]

2609

主題

0

好友

1003

積分

金牌會員

Rank: 6Rank: 6

UID
373967
帖子
9008
主題
2609
精華
0
積分
1003
楓幣
0
威望
980
存款
35891
贊助金額
0
推廣
0
GP
1205
閱讀權限
70
在線時間
460 小時
註冊時間
2023-1-12
最後登入
2024-12-22

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-23 14:00:14 |只看該作者 |倒序瀏覽
製作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[i])) - 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 楓幣 購買門票 幸運榜 / 衰神榜
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1鑰匙
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-12-22 18:03

回頂部