Red de conocimiento informático - Conocimiento del nombre de dominio - ¡Urgente! ! ! El programa de ondas spwm se genera en base a 51 microcontroladores. Envíalo a mi correo electrónico 120897519@qq.com

¡Urgente! ! ! El programa de ondas spwm se genera en base a 51 microcontroladores. Envíalo a mi correo electrónico 120897519@qq.com

/*Presentamos un programa que utiliza modulación de ancho de pulso (PWM) para controlar el brillo de las luces LED usando un microcontrolador de la serie 51. Como todos sabemos, el microcontrolador 51 en sí no tiene una interfaz pwm. El programa simula pwm a través del software. En una onda cuadrada con una frecuencia determinada, ajustar el ciclo de trabajo de nivel alto y bajo puede realizar el control del brillo de la luz LED. En el programa, el temporizador 0 se usa para generar un pulso periódico de 2,5 ms y la escala variable de control del ciclo de trabajo se usa para controlar el ciclo de trabajo. La luz LED se enciende durante el período de nivel bajo y la luz LED se apaga. durante el período de nivel alto. Cambiar la escala cambia el nivel de voltaje alto. El tiempo entre el nivel bajo y plano controla el brillo de la luz LED. */

#include "AT89X51.H" //Salida PWM analógica para controlar los 10 niveles de brillo de la luz

unsigned int scale //Variable de control del ciclo de trabajo

void main(void) // Programa principal

{ unsigned int n; //Variable de bucle de retardo

TMOD=0x02 //Temporizador 0, modo de trabajo 2 ( 0000, 0010), modo de temporización de 8 bits

TH0=0x06; //Escribe el valor inicial preestablecido 6 en el temporizador 0 para que se desborde una vez cada 250 microsegundos (12MHz)

TL0= 0x06; //Escribir valor preestablecido

TR0=1; //Iniciar temporizador

ET0=1; //Permitir interrupción del temporizador 0

EA=1; //Permitir interrupción total

while(1) // Bucle infinito, en aplicaciones prácticas, aquí está el trabajo principal

{ for(n=0 ;n<50000;n++) ; //Cada vez que pasa un período de tiempo, el brillo aumenta automáticamente en un nivel

scale++; //La escala de la variable de control del ciclo de trabajo aumenta en 1

if( scale) ==10) scale=0; //Si escala=10, haga que la escala sea 0

} }

timer0() interrupción 1 //Rutina de servicio de interrupción del temporizador 0

{ static unsigned int tt; //tt se utiliza para guardar la posición proporcional de la hora actual en un segundo

tt++; //Incrementa en 1 cada 250 microsegundos

if(tt==10) //Ciclo de reloj de 2,5 milisegundos

{ tt=0; //Establece tt=0 e inicia un nuevo ciclo PWM

P2_0=0; Encienda la luz LED

}

if(scale==tt) //Cambie la salida a nivel alto de acuerdo con el ciclo de trabajo actual

P2_0= 1 ; //Apaga la luz LED

}

/*En el programa, comenzar desde tt=0 hasta escalar es nivel bajo, y comenzar desde escala hasta tt=10 es nivel alto. Dado que la escala es una variable, cambiar la escala puede cambiar el ciclo de trabajo. */