電子琴的設計原理

時間 2021-10-28 04:59:44

1樓:匿名使用者

22. 電子琴

1. 實驗任務

(1. 由4x4組成16個按鈕矩陣,設計成16個音。

(2. 可隨意彈奏想要表達的**。

2. 電路原理圖

圖4.22.1

3. 系統板硬體連線

(1. 把「微控制器系統」區域中的p1.0埠用導線連線到「音訊放大模組」區域中的spk in埠上;

(2. 把「微控制器系統「區域中的p3.0-p3.7埠用8芯排線連線到「4x4行列式鍵盤」區域中的c1-c4 r1-r4埠上;

4. 相關程式內容

(1. 4x4行列式鍵盤識別;

(2. **產生的方法;

一首**是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構成我們所想要的**了,當然對於微控制器來產生不同的頻率非常方便,我們可以利用微控制器的定時/計數器t0來產生這樣方波頻率訊號,因此,我們只要把一首歌曲的音階對應頻率關係弄正確即可。現在以微控制器12mhz晶振為例,例出高中低音符與微控制器計數t0相關的計數值如下表所示

音符 頻率(hz) 簡譜碼(t值) 音符 頻率(hz) 簡譜碼(t值)

低1 do 262 63628 # 4 fa# 740 64860

#1 do# 277 63731 中 5 so 784 64898

低2 re 294 63835 # 5 so# 831 64934

#2 re# 311 63928 中 6 la 880 64968

低 3 m 330 64021 # 6 932 64994

低 4 fa 349 64103 中 7 si 988 65030

# 4 fa# 370 64185 高 1 do 1046 65058

低 5 so 392 64260 # 1 do# 1109 65085

# 5 so# 415 64331 高 2 re 1175 65110

低 6 la 440 64400 # 2 re# 1245 65134

# 6 466 64463 高 3 m 1318 65157

低 7 si 494 64524 高 4 fa 1397 65178

中 1 do 523 64580 # 4 fa# 1480 65198

# 1 do# 554 64633 高 5 so 1568 65217

中 2 re 587 64684 # 5 so# 1661 65235

# 2 re# 622 64732 高 6 la 1760 65252

中 3 m 659 64777 # 6 1865 65268

中 4 fa 698 64820 高 7 si 1967 65283

下面我們要為這個音符建立乙個**,有助於微控制器通過查表的方式來獲得相應的資料

低音0-19之間,中音在20-39之間,高音在40-59之間

table: dw 0,63628,63835,64021,64103,64260,64400,64524,0,0

dw 0,63731,63928,0,64185,64331,64463,0,0,0

dw 0,64580,64684,64777,64820,64898,64968,65030,0,0

dw 0,64633,64732,0,64860,64934,64994,0,0,0

dw 0,65058,65110,65157,65178,65217,65252,65283,0,0

dw 0,65085,65134,0,65198,65235,65268,0,0,0

dw 0

2、**的音拍,乙個節拍為單位(c調)

曲調值 delay 曲調值 delay

調4/4 125ms 調4/4 62ms

調3/4 187ms 調3/4 94ms

調2/4 250ms 調2/4 125ms

對於不同的曲調我們也可以用微控制器的另外乙個定時/計數器來完成。

下面就用at89s51微控制器產生一首「生日快樂」歌曲來說明微控制器如何產生的。

在這個程式中用到了兩個定時/計數器來完成的。其中t0用來產生音符頻率,t1用來產生音拍。

5. 程式框圖

圖4.22.2

6. 彙編源程式

keybuf equ 30h

sth0 equ 31h

stl0 equ 32h

temp equ 33h

org 00h

ljmp start

org 0bh

ljmp int_t0 ;t0中斷入口

start: mov tmod,#01h ;t0工作方式1

setb et0

setb ea

wait:

mov p3,#0ffh ;輸入口置1準備工作

clr p3.4

mov a,p3 ;讀鍵盤

anl a,#0fh ;保持低四位

xrl a,#0fh ;

jz nokey1

lcall dely10ms

mov a,p3

anl a,#0fh

xrl a,#0fh

jz nokey1

mov a,p3

anl a,#0fh

cjne a,#0eh,nk1

mov keybuf,#0

ljmp dk1

nk1: cjne a,#0dh,nk2

mov keybuf,#1

ljmp dk1

nk2: cjne a,#0bh,nk3

mov keybuf,#2

ljmp dk1

nk3: cjne a,#07h,nk4

mov keybuf,#3

ljmp dk1

nk4: nop

dk1:

mov a,keybuf

mov dptr,#table

movc a,@a+dptr

mov p0,a

mov a,keybuf

mov b,#2

mul ab

mov temp,a

mov dptr,#table1

movc a,@a+dptr

mov sth0,a

mov th0,a

inc temp

mov a,temp

movc a,@a+dptr

mov stl0,a

mov tl0,a

setb tr0

dk1a: mov a,p3

anl a,#0fh

xrl a,#0fh

jnz dk1a

clr tr0

nokey1:

mov p3,#0ffh

clr p3.5

mov a,p3

anl a,#0fh

xrl a,#0fh

jz nokey2

lcall dely10ms

mov a,p3

anl a,#0fh

xrl a,#0fh

jz nokey2

mov a,p3

anl a,#0fh

cjne a,#0eh,nk5

mov keybuf,#4

ljmp dk2

nk5: cjne a,#0dh,nk6

mov keybuf,#5

ljmp dk2

nk6: cjne a,#0bh,nk7

mov keybuf,#6

ljmp dk2

nk7: cjne a,#07h,nk8

mov keybuf,#7

ljmp dk2

nk8: nop

dk2:

mov a,keybuf

mov dptr,#table

movc a,@a+dptr

mov p0,a

mov a,keybuf

mov b,#2

mul ab

mov temp,a

mov dptr,#table1

movc a,@a+dptr

mov sth0,a

mov th0,a

inc temp

mov a,temp

movc a,@a+dptr

mov stl0,a

mov tl0,a

setb tr0

dk2a: mov a,p3

anl a,#0fh

xrl a,#0fh

jnz dk2a

clr tr0

nokey2:

mov p3,#0ffh

clr p3.6

mov a,p3

anl a,#0fh

xrl a,#0fh

jz nokey3

lcall dely10ms

mov a,p3

anl a,#0fh

xrl a,#0fh

jz nokey3

mov a,p3

anl a,#0fh

cjne a,#0eh,nk9

mov keybuf,#8

ljmp dk3

nk9: cjne a,#0dh,nk10

mov keybuf,#9

ljmp dk3

nk10: cjne a,#0bh,nk11

mov keybuf,#10

ljmp dk3

nk11: cjne a,#07h,nk12

mov keybuf,#11

ljmp dk3

nk12: nop

dk3:

mov a,keybuf

mov dptr,#table

movc a,@a+dptr

mov p0,a

mov a,keybuf

mov b,#2

mul ab

mov temp,a

mov dptr,#table1

movc a,@a+dptr

mov sth0,a

mov th0,a

inc temp

mov a,temp

movc a,@a+dptr

mov stl0,a

mov tl0,a

setb tr0

dk3a: mov a,p3

anl a,#0fh

xrl a,#0fh

jnz dk3a

clr tr0

nokey3:

mov p3,#0ffh

clr p3.7

mov a,p3

anl a,#0fh

xrl a,#0fh

jz nokey4

lcall dely10ms

mov a,p3

anl a,#0fh

xrl a,#0fh

jz nokey4

mov a,p3

anl a,#0fh

cjne a,#0eh,nk13

mov keybuf,#12

ljmp dk4

nk13: cjne a,#0dh,nk14

mov keybuf,#13

ljmp dk4

nk14: cjne a,#0bh,nk15

mov keybuf,#14

ljmp dk4

nk15: cjne a,#07h,nk16

mov keybuf,#15

ljmp dk4

nk16: nop

dk4:

mov a,keybuf

mov dptr,#table

movc a,@a+dptr

mov p0,a

mov a,keybuf

mov b,#2

mul ab

mov temp,a

mov dptr,#table1

movc a,@a+dptr

mov sth0,a

mov th0,a

inc temp

mov a,temp

movc a,@a+dptr

mov stl0,a

mov tl0,a

setb tr0

dk4a: mov a,p3

anl a,#0fh

xrl a,#0fh

jnz dk4a

clr tr0

nokey4:

ljmp wait

dely10ms:

mov r6,#10

d1: mov r7,#248

djnz r7,$

djnz r6,d1

retint_t0:

mov th0,sth0

mov tl0,stl0

cpl p1.0

reti

table: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h

db 7fh,6fh,77h,7ch,39h,5eh,79h,71h

table1: dw 64021,64103,64260,64400

dw 64524,64580,64684,64777

dw 64820,64898,64968,65030

dw 65058,65110,65157,65178

end7. c語言源程式

#include

unsigned char code table=;

unsigned char temp;

unsigned char key;

unsigned char i,j;

unsigned char sth0;

unsigned char stl0;

unsigned int code tab=;

void main(void)

temp=p3;

p1_0=~p1_0;

p0=table[key];

sth0=tab[key]/256;

stl0=tab[key]%256;

tr0=1;

temp=temp & 0x0f;

while(temp!=0x0f)

tr0=0;}}

p3=0xff;

p3_5=0;

temp=p3;

temp=temp & 0x0f;

if (temp!=0x0f)

temp=p3;

p1_0=~p1_0;

p0=table[key];

sth0=tab[key]/256;

stl0=tab[key]%256;

tr0=1;

temp=temp & 0x0f;

while(temp!=0x0f)

tr0=0;}}

p3=0xff;

p3_6=0;

temp=p3;

temp=temp & 0x0f;

if (temp!=0x0f)

temp=p3;

p1_0=~p1_0;

p0=table[key];

sth0=tab[key]/256;

stl0=tab[key]%256;

tr0=1;

temp=temp & 0x0f;

while(temp!=0x0f)

tr0=0;}}

p3=0xff;

p3_7=0;

temp=p3;

temp=temp & 0x0f;

if (temp!=0x0f)

temp=p3;

p1_0=~p1_0;

p0=table[key];

sth0=tab[key]/256;

stl0=tab[key]%256;

tr0=1;

temp=temp & 0x0f;

while(temp!=0x0f)

tr0=0;}}

}}void t0(void) interrupt 1 using 0

電子琴琴鍵音階,電子琴的琴鍵怎麼分辨?

布言不語 看傳上來琴的 是一款61鍵的電子琴,有36個白鍵和25個黑鍵,黑鍵和白鍵都是電子琴的演奏用鍵。每個琴鍵所代表的音名和唱名,請見附圖 61鍵電子琴鍵盤對照圖 其中對61個琴鍵 包括白鍵和黑鍵 的音名和唱名在圖上作了標註。音名是指c d e f g a b字母,它們的音高是固定不變的。音階的唱...

怎樣才叫好的電子琴,怎樣學電子琴?

作為乙個過來人,我認為你應該買乙個價位在1200 2000左右的琴。如果你是用來考級,山葉的琴是最好的。我考級的時候,人們大多是用山葉的,我自己的也是,我的琴是yamaha psr350,而且級數越高,琴越好。初學者,買乙個稍微好點的琴就可以了。到了級數高後,再換乙個高階一點的琴。如果你是用來學著玩...

初學電子琴選什麼電子琴比較好

不用買那麼好的,國產的就行,比如說美科mk 900,千元以下,它的音非常準的,音色也不錯,61鍵。也許有人會推薦casio yamaha一類的,我覺得沒必要,初學者給個再好的琴也彈不出啥感覺來。只要音準就行,因為這對於初學者練聽力很重要。或許你可以再加點錢,花個八千多,買個國產的鋼琴吧,彈起來手感比...