Hola Enigma.
Si me permites te voy a hacer unos pequeños comentarios a tu código para que se entienda mejor ya que resulta excesivamente largo y alguno se cansará de leerlo, ademas yo soy un poco purista en esto del "C" y me gusta retocar los programas para que sean más claros (recuerda esto no es ASM

).
Vayamos al grano:
Vamos a modificar el siguiente código para que quede más claro y sea más eficiente:
resul=0x3F; // Guardo la O
mostrar(); // Mando la O al display
resul=0x7C; // Guardo la C
mostrar(); // Mando la C al display
resul=0x40; // Guardo el guión (-)
mostrar(); // Mando el guión al display
resul=0x4F; // Guardo el 3
mostrar();
Lo primero que se observa es que no pasas el valor a mostrar a la función como un parámetro, si no mediante una variable global, esto es interesante si tienes que modificar el valor dentro de la función, pero claro esta en una función de visualización esto no es así. Como deberíamos declarar la función, así:
void mostrar(char _valor)
Dentro de la función ya no utilizaremos "resul", si no "_valor".
con esta modificación el código queda así:
mostrar(0x3F); // Mando la O al display
mostrar(0x7C); // Mando la C al display
mostrar(0x40); // Mando el guión al display
mostrar(0x4F); // Mando el 3 al display
Como puedes apreciar hemos reducido el número de líneas a la mitad.
Sigamos:
La función "printf" es una función muy poderosa que admite los siguientes parámetros:
printf(funcion(),"formato",cadena);
Lo que hace la función "printf" es tomar la "cadena", dividirla en caracteres, darlos formato y pasarselos como parámetros a "funcion()". Con todo esto nos quedaría el código así:
printf(mostrar(),"%c","\0x3F\0x7C\0x40\0x4F");
Lo hemos reducido a una línea solo.
Y si lo queremos poner con mas claridad, hacemos un #define:
#define OC3 "\0x3F\0x7C\0x40\0x4F"
printf(mostrar(),"%c",OC3);
Si queremos reducirlo al máximo podríamos definir una seudofunción qque nos simplifique la cosa de tal forma que podemos poner:
#define Salida_Display(_param_) printf(mostrar(),"%c",_param_)
#define OC3 "\0x3F\0x7C\0x40\0x4F"
El código que nos queda es:
Salida_Display(OC3);
Esto es es equivalente a todas tus instrucciones:
resul=0x3F; // Guardo la O
mostrar(); // Mando la O al display
resul=0x7C; // Guardo la C
mostrar(); // Mando la C al display
resul=0x40; // Guardo el guión (-)
mostrar(); // Mando el guión al display
resul=0x4F; // Guardo el 3
mostrar();
Solo recordarte que los defines se ponen al principio del programa.
Un saludo.