當前位置:編程學習大全網 - 源碼下載 - 單片機AT89C51電子琴的設計原理及C程序?

單片機AT89C51電子琴的設計原理及C程序?

#包含?& ltAT89X51。H & gt

未簽名?夏爾?溫度;

未簽名?夏爾?關鍵;

未簽名?夏爾?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。

P3 _ 4 = 0;?//使P3_4為低電平,這樣可以判斷第壹豎行是否按鍵。

temp = P3;

temp=temp?& amp?0x0f?

如果?(temp!=0x0f)//某個鍵被按下。

{

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

for(j = 200;j & gt0;j-);?//延遲

temp = P3;?

temp=temp?& amp?0x0f

如果?(temp!=0x0f)?//然後判斷是否有按鍵被按下。

{

temp = P3;

temp=temp?& amp?0x0f

Switch(temp)//確定按下了哪個鍵。

{

案子?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;

temp=temp?& amp?0x0f

while(temp!=0x0f)

{

temp = P3;

temp=temp?& amp?0x0f

}

TR0 = 0;

}

}

P3 = 0x ff;

P3 _ 5 = 0;?//和上面類似,現在是判斷第二排的按鈕。

temp = P3;

temp=temp?& amp?0x0f

如果?(temp!=0x0f)

{

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

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

temp = P3;

temp=temp?& amp?0x0f

如果?(temp!=0x0f)

{

temp = P3;

temp=temp?& amp?0x0f

開關(溫度)

{

案子?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;

temp=temp?& amp?0x0f

while(temp!=0x0f)

{

temp = P3;

temp=temp?& amp?0x0f

}

TR0 = 0;

}

}

P3 = 0x ff;

P3 _ 6 = 0;

temp = P3;

temp=temp?& amp?0x0f

如果?(temp!=0x0f)

{

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

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

temp = P3;

temp=temp?& amp?0x0f

如果?(temp!=0x0f)

{

temp = P3;

temp=temp?& amp?0x0f

開關(溫度)

{

案子?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;

temp=temp?& amp?0x0f

while(temp!=0x0f)

{

temp = P3;

temp=temp?& amp?0x0f

}

TR0 = 0;

}

}

P3 = 0x ff;

P3 _ 7 = 0;

temp = P3;

temp=temp?& amp?0x0f

如果?(temp!=0x0f)

{

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

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

temp = P3;

temp=temp?& amp?0x0f

如果?(temp!=0x0f)

{

temp = P3;

temp=temp?& amp?0x0f

開關(溫度)

{

案子?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;

temp=temp?& amp?0x0f

while(temp!=0x0f)

{

temp = P3;

temp=temp?& amp?0x0f

}

TR0 = 0;

}

}

}

}

作廢?t0(void)?打斷?1?使用?0

{

TH0 = STH0

TL0 = STL0

p 1 _ 0 = ~ p 1 _ 0;

}

自己看節目吧。我不想評論。?

這個可以發出16個音符。

  • 上一篇:放煙花的小學六年級作文
  • 下一篇:花生會讓妳想到哪些人?
  • copyright 2024編程學習大全網