Me ha surgido otra cosa:
Quiero mostrar el numero en 8 dígitos, por ejemplo si el valor del long es 123 quiero mostrar 00000123, normalmente para esto, si no me equivoco, se utiliza de la siguiente manera printf("%08x",valor); donde x y valor dependen del tipo de variable que quieras mostrar.
La cuestión es que si lo hago el display no me muestra nada, se queda en blanco. Si le quito el 0 del "%08x" si que funciona pero sin mostrar los 0 de delante.
¿Estoy haciendo algo mal?
Por otro lado, convierto el long a ascii con el ltoa() y a los valores del array que no sean un numero los renumero a 0 para obtener el 00000123, el problema es que en lugar de mostrar este valor me muestra 12300123.
Parece como si me mostrase primero el valor en la posicion 0 del LCD y luego al final con el formato que debería ser.
El código que tengo es el siguiente, en el lo que intento hacer es escribir en la primera lina del LCD "ProgNum." y en la segunda la variable "valor" que es un unsigned long en formato "%08s". Como veis primero lo paso a ascii con el ltoa() y asigno "0" en ascii en las posiciones que estén vacias del array num:
char pos_cursor = 0;
char i = 0;
char num[8];
ultoa(num,valor,10);
for(i=0;i<8;i++){
if( num[i] > '9' || num[i] < '0'){
num[i] = '0';
}
}
LCD_goto(0,0);
printf("ProgNum.");
LCD_cursor(ON,ON);
LCD_goto(0,1);
printf("%8s",num);
delay_ms(1000);
Como veis en lugar de "%08s" pongo "%8s" porque si lo pongo con el 0 delante el LCD se me queda en blanco. Esto lo intento solventar en el bucle for().
Veis algo raro o que este haciendo mal para que en lugar de mostrar el valor como 00000123 me muestre 12300123?
Tengo que decir que más alante en el programa vuelvo a pasar el array a unsigned long y si muestro el unsigned long me lo muestra bien "123"