基于c51单片机的电子琴设计

  • 格式:doc
  • 大小:91.00 KB
  • 文档页数:5

设计任务:

1利用MCS-51单片机设计音乐演奏的硬件电路

2利用C51或者汇编语言实现软件设计。

3利用proteus进行仿真

具体功能:

1. 按键发音(eg:按下1,发出do的音,按下2,发出re的音……)

2. 按下功能键X,自动播放诸如《生日快乐》等简易歌曲(选做)

#include

#define uchar unsigned char

#define uint unsigned int

uint code tab[]={64021,64103,64260,64400,

64524,64580,64684,64777,

64820,64898,64968,65010,

65058,65110,65157,65178,};

uchar code shuzhi[4][4]={0x11,0x21,0x41,0x81,

0x12,0x22,0x42,0x82,

0x14,0x24,0x44,0x84,

0x18,0x28,0x48,0x88};

sbit P20=P2^0;

uchar STH0;

uchar STL0;

void delay(void)

{ uchar x;

for (x=300;x>0;x--);

}

/*uchar getkey(void)

{

uchar scancode,tmpcode;

if((P1&0xf0)==0xf0)

return(0);

scancode=0xfe;

while((scancode&0x10)!=0)

{

P1=scancode;

if((P1&0xf0)==0xf0)

{

tmpcode=(P1&0xf0)|0x0f;

return((~scancode)+(~tmpcode));

}

else scancode=(scancode<<1)|0x01;

}

} */

uchar getkey(void)

{

uchar temp,temp1,i,j;

/*delay(100);*/

P1=0xf0;

temp=P1;

temp=temp&0xf0;

if(temp!=0xf0)

{

switch(temp)

{

case 0xe0:i=0;break;

case 0xd0:i=1;break;

case 0xb0:i=2;break;

case 0x70:i=3;break;

}

P1=0x0f;

temp1=P1;

temp1=temp1&0x0f;

switch(temp1)

{

case 0x0e:j=0;break;

case 0x0d:j=1;break; case 0x0b:j=2;break;

case 0x07:j=3;break;

}

return(shuzhi[i][j]);

}

}

void time0_int(void) interrupt 1 using 0

{

TH0=STH0;

TL0=STL0;

P20=~P20;

}

void main()

{

uchar key,k;

TMOD=0x01;

ET0=1;

EA=1;

while(1)

{

P1=0xf0;

if((P1&0xf0)!=0xf0)

{

delay();

if((P1&0xf0)!=0xf0)

{

key=getkey();

switch(key)

{

case 0x11:

k=0;

break;

case 0x21:

k=1;

break;

case 0x41:

k=2;

break;

case 0x81:

k=3; break;

case 0x12:

k=4;

break;

case 0x22:

k=5;

break;

case 0x42:

k=6;

break;

case 0x82:

k=7;

break;

case 0x14:

k=8;

break;

case 0x24:

k=9;

break;

case 0x44:

k=10;

break;

case 0x84:

k=11;

break;

case 0x18:

k=12;

break;

case 0x28:

k=13;

break;

case 0x48:

k=14;

break;

case 0x88:

k=15;

break;

default:

break;

}

P20=~P20;

STH0=tab[k]/256;

STL0=tab[k]%256;

TR0=1; P1=0xf0;

while((P1&0xf0)!=0xf0)

{

P1=0xf0;

}

TR0=0;

}

}

}

}