當前位置:編程學習大全網 - 編程語言 - Cstep編程

Cstep編程

22.電子琴

1.實驗任務

(1.4X4組成的按鍵矩陣有16,設計為16個色調。

(2)妳可以隨意播放妳想表達的音樂。

2.電路原理圖

圖4.22.1

3.系統板的硬件連接

(1.用導線將“單片機系統”區的P1.0端口連接到“音頻放大模塊”區的SPK輸入端口;

(2)用8芯電纜將“單片機系統”區域的P3.0-P3.7端口連接到“4X4行列式鍵盤”區域的c1-c4r1-r4端口;

4.相關節目內容

(1.4X4行列式鍵盤識別;

(2)音樂制作的方法;

壹段音樂由許多不同的音階組成,每個音階對應不同的頻率,這樣我們就可以用不同頻率的組合來組成我們想要的音樂。當然,單片機產生不同的頻率是很方便的。我們可以利用單片機的定時器/計數器T0來產生這樣的方波頻率信號。因此,我們只需要正確地得到壹首歌曲的音階之間的頻率關系。現以單片機12MHZ晶振為例,與單片機計數T0相關的高、中、低音符計數值如下表所示。

音符頻率(HZ)簡單譜碼(T值)音符頻率(HZ)簡單譜碼(T值)

低1 DO 262 63628 # 4 FA# 740 64860

1 DO 63731 5 SO 784 64898

●2 RE 294 63835 # 5 SO # 831 64934

6 LA 880 64968 in # 2 RE # 311 63928

●3米330 64021 # 6 932 64994

低4 FA 349 64103中7 SI 988 65030

# 4 FA# 370 64185高1 DO 1046 65058

●5so 392 64260 # 1do # 1109 65085

# 5SO # 4156431高2re 1175110。

●6la 440 64400 # 2RE # 1245 65134

# 6 466 64463身高3米1318 65157

低7 SI 494 64524高4 FA 1397 65178。

鐘1do 523 64580 # 4fa # 1480 65198。

# 1 DO# 554 64633高5 SO 1568 65217

2 Re 587 64684 # 5 SO # 1661 65235。

# 2 RE# 622 64732高6拉1760 65252

3米659 64777 # 6 1865 65268

中等4 FA 698 64820高7 SI 1967 65283

接下來我們將為這個音符建壹個表,通過查找來幫助單片機獲取相應的數據。

低音0-19,中音20-39,高音40-59。

表:DW 0,63628,63835,64021,64103,64260,64400,64524,0,0

DW 0,63731,63928,0,64185,64331,64463,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

DW 0,65085,65134,0,65198,65235,65268,0,0,0

DW 0

2、音樂的節拍,以壹拍為單位(C調)

旋律值延遲旋律值延遲

調整4/4 125毫秒和4/4 62毫秒。

調整3/4 187毫秒,調整3/4 94毫秒

調諧2/4 250毫秒調諧2/4 125毫秒。

對於不同的曲調,我們也可以用單片機的另壹個定時器/計數器來完成。

下面我們用AT89S51單片機來制作壹首《生日快樂》歌曲,來解釋壹下單片機是如何產生的。

該程序中使用了兩個定時器/計數器。其中T0用於生成音符頻率,T1用於生成節拍。

5.程序框圖

我不能粘貼它。

7.c語言源程序

# include & ltAT89X51。H & gt

無符號字符碼表[]={0x3f,0x06,0x5b,0x4f,

0x66、0x6d、0x7d、0x07、

0x7f、0x6f、0x77、0x7c、

0x39,0x5e,0x79,0x 71 };

無符號字符溫度;

無符號字符密鑰;

無符號字符I,j;

無符號字符STH0

無符號字符STL0

無符號int代碼tab[]={64021,64103,64260,64400,

64524,64580,64684,64777,

64820,64898,64968,65030,

65058,65110,65157,65178};

無效總管(無效)

{

TMOD = 0x 01;

ET0 = 1;

EA = 1;

while(1)

{

P3 = 0x ff;

P3 _ 4 = 0;

temp = P3;

溫度=溫度& amp0x0f

if (temp!=0x0f)

{

for(I = 50;我& gt0;我-)

for(j = 200;j & gt0;j-);

temp = P3;

溫度=溫度& amp0x0f

if (temp!=0x0f)

{

temp = P3;

溫度=溫度& amp0x0f

開關(溫度)

{

案例0x0e:

key = 0;

打破;

案例0x0d:

key = 1;

打破;

案例0x0b:

key = 2;

打破;

案例0x07:

key = 3;

打破;

}

temp = P3;

p 1 _ 0 = ~ p 1 _ 0;

P0 =表[鍵];

sth 0 = tab[key]/256;

STL 0 = tab[key]% 256;

TR0 = 1;

溫度=溫度& amp0x0f

while(temp!=0x0f)

{

temp = P3;

溫度=溫度& amp0x0f

}

TR0 = 0;

}

}

P3 = 0x ff;

P3 _ 5 = 0;

temp = P3;

溫度=溫度& amp0x0f

if (temp!=0x0f)

{

for(I = 50;我& gt0;我-)

for(j = 200;j & gt0;j-);

temp = P3;

溫度=溫度& amp0x0f

if (temp!=0x0f)

{

temp = P3;

溫度=溫度& amp0x0f

開關(溫度)

{

案例0x0e:

key = 4;

打破;

案例0x0d:

key = 5;

打破;

案例0x0b:

key = 6;

打破;

案例0x07:

key = 7;

打破;

}

temp = P3;

p 1 _ 0 = ~ p 1 _ 0;

P0 =表[鍵];

sth 0 = tab[key]/256;

STL 0 = tab[key]% 256;

TR0 = 1;

溫度=溫度& amp0x0f

while(temp!=0x0f)

{

temp = P3;

溫度=溫度& amp0x0f

}

TR0 = 0;

}

}

P3 = 0x ff;

P3 _ 6 = 0;

temp = P3;

溫度=溫度& amp0x0f

if (temp!=0x0f)

{

for(I = 50;我& gt0;我-)

for(j = 200;j & gt0;j-);

temp = P3;

溫度=溫度& amp0x0f

if (temp!=0x0f)

{

temp = P3;

溫度=溫度& amp0x0f

開關(溫度)

{

案例0x0e:

key = 8;

打破;

案例0x0d:

key = 9;

打破;

案例0x0b:

key = 10;

打破;

案例0x07:

key = 11;

打破;

}

temp = P3;

p 1 _ 0 = ~ p 1 _ 0;

P0 =表[鍵];

sth 0 = tab[key]/256;

STL 0 = tab[key]% 256;

TR0 = 1;

溫度=溫度& amp0x0f

while(temp!=0x0f)

{

temp = P3;

溫度=溫度& amp0x0f

}

TR0 = 0;

}

}

P3 = 0x ff;

P3 _ 7 = 0;

temp = P3;

溫度=溫度& amp0x0f

if (temp!=0x0f)

{

for(I = 50;我& gt0;我-)

for(j = 200;j & gt0;j-);

temp = P3;

溫度=溫度& amp0x0f

if (temp!=0x0f)

{

temp = P3;

溫度=溫度& amp0x0f

開關(溫度)

{

案例0x0e:

key = 12;

打破;

案例0x0d:

key = 13;

打破;

案例0x0b:

key = 14;

打破;

案例0x07:

key = 15;

打破;

}

temp = P3;

p 1 _ 0 = ~ p 1 _ 0;

P0 =表[鍵];

sth 0 = tab[key]/256;

STL 0 = tab[key]% 256;

TR0 = 1;

溫度=溫度& amp0x0f

while(temp!=0x0f)

{

temp = P3;

溫度=溫度& amp0x0f

}

TR0 = 0;

}

}

}

}

void t0(void)使用0中斷1

{

TH0 = STH0

TL0 = STL0

p 1 _ 0 = ~ p 1 _ 0;

}

  • 上一篇:廣告需求彈性系數怎麽算
  • 下一篇:最佳商業管理軟件2000系統數據庫高分。
  • copyright 2024編程學習大全網