电子琴简单游戏

#包含?& 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个音符。写A89S52的时候应该是AT89S52。