Te doy unos datos para que lo puedas hacer, no es nada difícil, pero hay varias formas de hacerlo.
Una forma fácil es que uses la entrada de pulsos a contar como la interrupción RB0.
Primero inicializas variables, defines puertos, etc. Yo colocaría un registro por dígito a contar y los vas a hacer variar de 0 a 9.
Cuando se recibe un flanco ascendente en RB0 se saca al micro del sleep, luego esperas a que RB0 sea cero una vez esto sumas 1 a el registro que te almacenará el dígito menos significativo, fianlmente lo muestras en los displays y vuelves al programa principal donde haces sleep esperando al siguiente pulso a contar.
La rutina debe controlar que luego de 9, el dígito va a cero y se incrementa el siguiente.
Para mostrar los dígitos en el display puedes usar las tablas que ya están tabuladas por ahí y para usar eficientemente el puerto que va a los displays usaría la técnica de multiplexación, es decir, pongo el primer dígito en el bus y solo prendo el display 1, pongo el segundo dígito en el bus y solo prendo el segundo display, y así sucesivamente.. Con la velocidad del micro los vas a ver encendidos todos al mismo tiempo.
Hay otras formas también usando la pata RA4/TOCKI para contar pulsos externos.
Saludos,