No necesariamente ocupas utilizar interrupciones para cada tarea, pero según conforme vayas realizando programas más grandes y complejos puede facilitarte (o complicarte) el uso de las interrupciones.
Una forma muy sencilla es leer continuamente en un bucle (el cual además puede llamar a otras tareas por supuesto) el estado de tus interruptores BCD, de dicho valor leído llamar a una tabla de valores de 7 segmentos y escribir en el puerto de 7 segmentos dicho valor.
Por ahora se me ocurre algo así:
BUCLE
movf PUERTO_BCD,W
andlw b'00001111'
call TABLA_7_SEGMENTOS
movwf PUERTO_7_SEGMENTOS
; hacer otras tareas
goto BUCLE
TABLA_7_SEGMENTOS
addwf PCL,F
retlw b'11111100' ; Digito 0
retlw b'01100000' ; Digito 1
; incluir digitos restantes ...
Aquí estoy omitiendo la inicialización de los puertos, del micro y demás. No sé si eso ya lo tendrás resuelto.