Cambia esa linea:
inte_t08_ini
call dy2_disp_7_seg_01 ;llamada a rutina dy2_disp_7_seg_01
Por esta:
inte_t08_ini
incf _np_disp_valor,f
O comenta el call, Y probalo. Basicamente lo unico que cambiamos es que ... cuando el apuntador del display sea 0, (es decir no es valido para los valores de 1 a 8 que espera el programa ) incrementamos a 1, y mostramos el primer valor, realizando el cambio con el display apagado.
Antes el apuntador al ser 0, ponia un 0 el display ( por unos muy pocos microsegundos ) luego apagaba y mostraba el primer valor 2 veces.
Una cosa mas, recien acabo de ver el ultimo video, en el primer video el tema era sobre un parpadeo, entonces me centre en ver eso, por eso pense que era eso (igual si cambias la linea que nombre arriba no le va a hacer nada). Pero en el ultimo video que colgaste mencionas que no es un parpadeo sino que se mantienen encendidos los leds Y eso es otro tema el cual el programa parece no tener nada que ver.
Estuve viendo un poco mas, y creo suponer que 1 solo transistor maneja todos los segmentos de un display.
Pense que podria ser el tiempo de propagacion, pero esta en 1us maximo del 4511 y 1us maximo del ULN, siendo que los bits del puerto se cambian y luego va un return (que le toma 2 ciclos , es decir a 4Mhz serian 2us ) y recien se enciende la nueva salida (1us mas aproximadamente), asi que estaria dentro del rango, si usas mas frecuencia tenes que tenerlo en cuenta a eso.