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

單片機AT89C51電子琴設計的原理圖和c程序?

#include?<AT89X51.H>

unsigned?char?temp;

unsigned?char?key;

unsigned?char?i,j;

unsigned?char?STH0;

unsigned?char?STL0;

unsigned?int?code?tab[]={64021,64103,64260,64400,

64524,64580,64684,64777,

64820,64898,64968,65030,

65058,65110,65157,65178};

void?main(void)

{

TMOD=0x01;

ET0=1;

EA=1;

while(1)

{

P3=0xff;?//將P3口取出

P3_4=0;//使P3_4為低電平,這樣可以判斷第壹豎排有沒有鍵按下

temp=P3;

temp=temp?&?0x0f;?

if?(temp!=0x0f)//有鍵按下

{

for(i=50;i>0;i--)

for(j=200;j>0;j--);//延時

temp=P3;

temp=temp?&?0x0f;

if?(temp!=0x0f)//再判斷是否有鍵按下

{

temp=P3;

temp=temp?&?0x0f;

switch(temp)//判斷是哪個鍵按下

{

case?0x0e:

key=0;

break;

case?0x0d:

key=1;

break;

case?0x0b:

key=2;

break;

case?0x07:

key=3;

break;

}

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)

{

temp=P3;

temp=temp?&?0x0f;

}

TR0=0;

}

}

P3=0xff;

P3_5=0;?//跟上面差不多,現在是判斷第二排的按鍵

temp=P3;

temp=temp?&?0x0f;

if?(temp!=0x0f)

{

for(i=50;i>0;i--)

for(j=200;j>0;j--);

temp=P3;

temp=temp?&?0x0f;

if?(temp!=0x0f)

{

temp=P3;

temp=temp?&?0x0f;

switch(temp)

{

case?0x0e:

key=4;

break;

case?0x0d:

key=5;

break;

case?0x0b:

key=6;

break;

case?0x07:

key=7;

break;

}

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)

{

temp=P3;

temp=temp?&?0x0f;

}

TR0=0;

}

}

P3=0xff;

P3_6=0;

temp=P3;

temp=temp?&?0x0f;

if?(temp!=0x0f)

{

for(i=50;i>0;i--)

for(j=200;j>0;j--);

temp=P3;

temp=temp?&?0x0f;

if?(temp!=0x0f)

{

temp=P3;

temp=temp?&?0x0f;

switch(temp)

{

case?0x0e:

key=8;

break;

case?0x0d:

key=9;

break;

case?0x0b:

key=10;

break;

case?0x07:

key=11;

break;

}

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)

{

temp=P3;

temp=temp?&?0x0f;

}

TR0=0;

}

}

P3=0xff;

P3_7=0;

temp=P3;

temp=temp?&?0x0f;

if?(temp!=0x0f)

{

for(i=50;i>0;i--)

for(j=200;j>0;j--);

temp=P3;

temp=temp?&?0x0f;

if?(temp!=0x0f)

{

temp=P3;

temp=temp?&?0x0f;

switch(temp)

{

case?0x0e:

key=12;

break;

case?0x0d:

key=13;

break;

case?0x0b:

key=14;

break;

case?0x07:

key=15;

break;

}

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)

{

temp=P3;

temp=temp?&?0x0f;

}

TR0=0;

}

}

}

}

void?t0(void)?interrupt?1?using?0

{

TH0=STH0;

TL0=STL0;

P1_0=~P1_0;

}

妳自己看下程序吧,我也不願意註釋。?

這個是能發出16個音符聲音的

  • 上一篇:Java如何設置代理訪問網絡?
  • 下一篇:妳知道彩虹是怎麽形成的嗎?
  • copyright 2024編程學習大全網