Robert te dice una forma de hacerlo, la otra MUY similar seria:
Un array donde cargues tu numero. Este lo podes cargar en la funcion que deberia actualizar lo que se muestra en el display.
Una interrupcion con un Timer, que es el que le da el tiempo, si el multiplexado es acda 5ms, entonces cada 5ms entra a la funcion esa, apaga el comun anterior, elige el numero que le corresponde y luego activa el comun que corresponde, si tenes los comunes repartidos en varios pines no consecutivos, te puede llegar a servir otro array con los valores de los comunes.
La interrupcion es solo para mostrar.
Luego si queres correrlo, en ves de correr el array y borrarse el contenido, aunque lo vas a hacer en un array aparte, (y es mas rapido de hacer con un memcpy) podrias definir otro indice, en el cual apartir de ese indice empezas a escribir sobre el display. Por ejemplo. Si tenes un indice 2. Los primeros 2 numeros no deberian encender, recien cuando indiceComienzo >= indiceAmostrar, mostras sobre tu display, obviamente el indice que vas a usar para tu array es indiceAmostrar - indiceComienzo.
Eligiras la opcion que mas te convenga. Esto lo podes hacer contando cuantas veces entra a esa interrupcion de 5ms por ejemplo, asi darle 1s cada desplazamiento.