Cómo utilizar el lenguaje C del microcontrolador para escribir el diagrama del circuito y el código del programa que hace que el timbre emita 7 tonos (preferiblemente con una explicación).
Conecte el puerto P1.2 del microcontrolador 51 a un pin del zumbador y conecte el otro pin a tierra.
Si el sonido es pequeño, agregue un circuito amplificador triodo o conecte directamente un UL2003
/*--------------------- ---- ----------------------*/
#includelt;reg52.hgt; //Incluir archivos de encabezado, generalmente no es necesario ¿Cambiar?
//El archivo de encabezado contiene la definición de registros de funciones especiales
/*---------------------- - -------------------------
Definición de puerto de hardware
------- - --------------------------------------------------* /
sbit SPK=P1^2; //Definir el puerto de salida de música
unsigned char Timer0_H, Timer0_L, Time;
//Solo las madres son buenas tablas de datos del mundo
código unsigned char MUSIC[]={ 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,
p>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
};
p>// Ocho bits altos del temporizador de la tabla 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, 0xFF,
};
// Los ocho bits inferiores del código del temporizador de la tabla de frecuencia de escala
carácter sin firmar 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,
}; ---- --------------------------
Función de retardo de EE. UU., contiene parámetro de entrada char t sin signo, sin retorno value
el carácter sin signo se define como una variable de carácter sin signo y su rango de valores es
0~255. Aquí se utiliza el oscilador de cristal 12M. Utilice el ensamblaje para obtener un retardo preciso. retraso
Longitud Como sigue T=tx2 5 uS
--------------------- ------------- -----------*/
void DelayUs2x(car t sin firmar)
{ p>
mientras(--t);
}
/*--------------------- ------------- --------------
Función de retardo mS, contiene parámetro de entrada char t sin signo, sin valor de retorno p>
carácter sin signo es la definición de variable de carácter sin signo, su rango de valores es
0~255. Aquí se utiliza el oscilador de cristal 12M. Utilice el ensamblaje para lograr un retardo preciso.
--------------- --------------------------------- -*/
void DelayMs(car t sin firmar)
{
while(t--)
{
//El retraso aproximado es 1mS
DelayUs2x( 245);
DelayUs2x(245);
}
}
/*---------- ------------------------------- ------
Función de retardo de tiempo
Ajustar 1/4 de tiempo de tiempo:
Ajustar 4/4 125ms
Ajustar 2/4
250 ms
Ajustar 3/4 187 ms
------------------------------ ------------------*/
retraso nulo (carácter sin firmar)
{
carácter sin signo i;
for(i=0; ilt; t; i )
DelayMs(250);
TR0=0; >
}
/*------------------------------------ ---------- ----------
Interrupción del temporizador 0
------------- --------- --------------------------*/
void TIM0_ISR() interrupción 1
{
TR0=0
SPK=!SPK
TH0=Temporizador0_H
TL0; =Temporizador0_L;
TR0=1;
}
/*------------------- --------- --------------------
Función de procesamiento de canciones
---- --------- ----------------------------------*/
void Song() p>
{
TH0=Timer0_H; //Asignar tiempo al temporizador para determinar la frecuencia
TL0=Timer0_L;
TR0=1; // Activa el temporizador
delay(Time); //Retrasa los tiempos requeridos
}
/*---- ------ ----------------------------------
Función principal
-------------------------------------------- ----- --*/
void main(void)
{
unsigned char k, i
TMOD; |=0x01; //Establece el modo de trabajo 1 del temporizador 0
EA=1; //Activa la interrupción global
ET0=1 //Activa la interrupción del temporizador 0
mientras( 1)
{
i=0;
mientras(ilt; 100)
{ // Longitud del arreglo musical, canto terminado. Empezar de nuevo
k=MUSIC[i] 7*MUSIC[i 1]-1 //Los datos necesarios para eliminar la frecuencia de oscilación de la nota
Temporizador0_H=FREQH[k];
p>Temporizador0_L=FREQL[k];
Tiempo=M
USIC[i 2]; //duración del tiempo
i=i 3;
Canción()
}
}
}