¿Esquema de diseño de teclado electrónico MCU AT89C51 y programa en lenguaje C?
#include?
¿sin firmar?char?temp;
¿sin firmar?char?key;
¿sin firmar? 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;?//Eliminar puerto P3
P3_4=0;//Haga que P3_4 sea de nivel bajo para determinar si hay un botón presionado en la primera fila vertical
temp=P3;
temp=temp?&?0x0f ; ?
if?(temp!=0x0f)//Se presiona una tecla
{
for(i=50;i>0;i- - )
for(j=200;j>0;j--);//Retraso
temp=P3;
temp=temp?& ? amp;?0x0f;
if?(temp!=0x0f)//Compruebe nuevamente si se presiona una tecla
{
temp=P3; p>
temp=temp?&?0x0f;
switch(temp)//Determinar qué botón se presiona
{
case ?x0e:
clave=0;
romper;
caso?0x0d:
clave=1;
romper ;
caso?0x0b:
key=2;
romper
caso?0x07:
clave=3;
romper;
}
temp=P3;
P1_0=~P1_0;
P0=tabla[clave];
STH0=tab[clave]/256; ??
STL0=tab[clave]%256;
TR0 =1;
temp=temp?&?0x0f;
mientras(temp!=0x0f)
{
temp=P3 ;
temp=temp?0x0f;
}
TR0=0;
}
}
}
P3=0xff;
P3_6=0;
temp=P3;
temp=temp ?&?0x0f;
if?=0x0f)
{
para(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp?&?0x0f;
si?(temp!=0x0f)
{
t
emp=P3;
temp=temp?&?0x0f;
cambiar(temp)
{
caso?x0e:
clave=8;
romper;
caso?0x0d:
clave=9;
romper;
caso?0x0b:
clave=10;
romper;
caso?0x07:
clave =11;
descanso;
}
temp=P3;
P1_0=~P1_0;
P0=tabla[clave];
STH0=tab[clave]/256;
STL0=tab[clave]%256;
TR0=1;
temp=temp?0x0f;
mientras(temp!=0x0f)
{
temp=P3;
temp=temp?0x0f;
}
TR0=0;
}
}
P3=0xff;
P3_7=0;
temp=P3;
temp=temp?= 0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp =P3;
temp=temp?&?0x0f;
si?(temp!= 0x0f)
{
temp= P3;
temp=temp?&?0x0f;
interruptor(temp)
{
caso?x0e:
clave=12;
romper;
caso?0x0d:
clave=13;
romper; p>
caso?0x0d:
rotura;
p>
caso?0x0b:
clave=14;
romper;
caso?0x07:
key=15 ;
romper;
}
temp=P3;
P1_0=~P1_0;
P0=tabla[clave];
STH0=tab[clave]/256;
STL0=tab[key]%256;
TR0= 1;
¿Temp=temp?
temp=temp?& ?0x0f;
mientras(temp!=0x0f)
{
temp=P3;
temp=temp?&?0x0f ;
}
TR0=0;
}
}
}
}
¿vacío?t0(vacío)??usando?0
{
TH0=STH0;
TL0=STL0;
P1_0=~P1_0;
} Échale un vistazo al programa tú mismo, tampoco quiero comentarlo.
Este programa puede producir sonidos de 16 notas