Norberto, lo he estado mirando por encima y la verdad o no lo entiendo o no se lo que hace. De momento tiene un error. LETRA= no la coge el compilador (por el signo =). Lo he cambiado por LETRAigual y así si compila.
Cuando me decidía a pasarlo a proteus. Los pulsadores en RA y las salidas a los displays en RB. Y el control de los displays para refrescarlos donde?? He mirado y veo que en "inicio" primero llama a la rutina entradas donde configura entre otras al puerta A como entrada. Seguidamente llama a la rutina salida donde configura al puerto A como salidas ??? en que quedamos??
Por lo que deduzco es que usa el puerto A tanto para los pulsadores como para comandar los transistores de los displays.
El programa funcionó tal cual está??
Saludos!