Busque algo llamado modulación de ancho de pulso , generalmente abreviado PWM.
Con PWM, siempre se enciende o apaga el LED por completo. Sin embargo, lo hace tan rápido que un humano que mira el LED solo percibe el brillo promedio.
Solo se necesitan unos 10s de Hz para llegar al punto en el que no se pueden ver los pulsos individuales cuando se mira directamente al LED. Sin embargo, todavía parpadeará notablemente cuando muevas los ojos. Por lo general, es bueno utilizar una frecuencia PWM mínima de 100 Hz para los LED de ajuste de brillo. También puede suavizar las transiciones de encendido / apagado con componentes eléctricos adicionales, como capacitores e inductor.
El 16F877 tiene generadores de PWM integrados. Eche un vistazo a los módulos CCP. Una vez que se configura un módulo CCP, todo lo que el firmware debe hacer es escribir un nuevo ciclo de servicio en el registro o registros correctos para establecer el brillo.