Red de conocimiento informático - Conocimiento del nombre de dominio - 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).

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)

{

mientras(--t);

}

/*--------------------- ------------- --------------

Función de retardo mS, contiene parámetro de entrada char t sin signo, sin valor de retorno

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()

{

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()

}

}

}