Cómo utilizar el lenguaje C del microcontrolador para escribir el circuito y el código de programa que hace que el timbre emita 7 tonos (preferiblemente con instrucciones).
/* - */
# include ltreg52.h gt//Incluye archivos de encabezado, ¿generalmente no es necesario modificarlos?
//El archivo de encabezado contiene la definición de registros de funciones especiales.
/* -
Definición del puerto de hardware
- */
sbit spk=p1^2 //Definir la salida de música; port
Temporizador de caracteres sin firmar 0_H, temporizador 0_L, hora
// Solo mamá tiene una buena tabla de datos en el mundo.
código sin signo char MÚSICA[]={ 6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1 ,5,2,1,
6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1, 2, 1,
6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5 ,2,2,
5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3,3, 2, 1,
2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0
};
//Los ocho bits superiores del temporizador del contador de frecuencia de escala
código unsigned char FREQH[]={
0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,
0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, //1, 2, 3, 4, 5, 6, 7, 8 , I
0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x Fe, 0xFF,
} ;
//Los ocho bits inferiores del temporizador del contador de frecuencia de escala
código unsigned char FREQL[]={
0x42, 0xC1, 0x17 , 0xB6 , 0xD0, 0xD1, 0xB6,
0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1, 2, 3, 4, 5, 6, 7, 8, I
0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,
0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16,
};
}; p>
/* -
Función de retardo del usuario, el parámetro de entrada es el carácter sin signo t y no hay valor de retorno.
Unsigned char es una variable que define caracteres sin signo y su rango de valores es
El oscilador de cristal 12M de 0 ~ 255 utilizado aquí es. Utilice componentes para obtener la latencia exacta y la latencia aproximada.
La longitud es la siguiente: T=tx2 5 uS.
- */
void DelayUs2x(carácter sin firmar t)
{
mientras(-t);
}
/* -
Función de retardo de MS, el parámetro de entrada es el carácter sin signo t y no hay valor de retorno.
Unsigned char es una variable que define caracteres sin signo y su rango de valores es
El oscilador de cristal 12M de 0 ~ 255 utilizado aquí es. Utilice componentes para obtener una latencia precisa.
- */
símbolo de retraso nulo (carácter sin firmar t)
{
mientras(t -)
{
//Retraso de aproximadamente 1 milisegundo
retraso 2x(245);
retraso 2x(245);
}
}
/* -
Función de retardo de tiempo
Cada canción tiene un tiempo de 1/4 de tiempo:
Ajuste de 4/4 a 125 milisegundos.
2/4 250 milisegundos
Ajuste 3/4 187 milisegundos.
- */
Retraso no válido (caracter sin firmar)
{
Caracter sin firmar I;
for(I = 0; iltt; i)
Daremus(250);
TR0 = 0;
}
/* -
Interrupción del temporizador 0
- */
void TIM0_ISR() interrupción 1
{
TR0 = 0;
SPK=! SPK;
TH0 = Temporizador 0_H
TL0 = Temporizador 0 _ L
TR0 = 1
}
/* -
Función de procesamiento de canciones
- */
Canción no válida()
{
TH0 = Temporizador 0_H; //Asigna el tiempo del temporizador y determina la frecuencia.
TL0 = Temporizador 0_L;
TR0 = 1; //Activar el temporizador
Retraso(tiempo); //Retrasar el tiempo requerido
}
/* -
Funciones principales
- */
Administrador no válido (no válido)
{
Carácter sin firmar k, I;
TMOD | = 0x 01; //Establece el modo de trabajo 1 del temporizador 0.
EA = 1; //Activar interrupción global
ET0 = 1; //Activar interrupción de tiempo 0
while(1)
{
I = 0;
while(I lt100)
{// La duración de la matriz musical, comienza de nuevo después de cantar.
k =Music[I] 7 *Music[I 1]-1; //Elimina los datos requeridos para la frecuencia de oscilación de la nota
Temporizador 0_H = FREQH[k] ;
Temporizador 0_L = FREQL[k];
Tiempo = música[I 2]; //duración del tiempo
I = I 3 ;
Canción();
}
}
}