Di seguito è spiegata la funzione che utilizzo per convertire un intero con segno in un array di caratteri in modo da poterlo stampare sul display
Istruzioni presenti nel main:
int displ(int, unsigned char *s);
unsigned char txt[7];
Funzione:
int inttostr(int i, unsigned char *n)
{
const char lunghezza_max=6; /* considero che un intero con segno sia composto al massimo da sei cifre */
char temp, lunghezza=0;
int j=0, k=0, sign=i;
/* con sign=i salvo una copia del numero per ricordarmi che segno aveva */
if(i<0) { i=-i; } // se è negativo lo rendo positivo
/* Determino la lunghezza della cifra. Il metodo non è elegante ma è veloce. Avrei potuto anche conoscere la lunghezza del numero dalla variabile k del ciclo while che segue ma avevo bisogno di conoscere questa lunghezza prima del ciclo while in modo da evitare di costruire la cifra dal numero meno significativo a quello più significativo e poi doverla invertire */
if (i==0) {
for(k=0; k<(lunghezza_max-lunghezza); k++) { n[k] = ' '; }
n[lunghezza_max-2] = '0'; n[lunghezza_max-1]= '\0'; return 0;}
else if ((i>0) && (i<=9)) {lunghezza=1;}
else if ((i>=10) && (i<=99)) {lunghezza=2;}
else if ((i>=100) && (i<=999)) {lunghezza=3;}
else if ((i>=1000) && (i<=9999)) {lunghezza=4;}
else if ((i>=10000) && (i<=99999)) {lunghezza=5;}
if(sign<0) {lunghezza++;}
/* con il ciclo for seguente aggiungo un numero di spazi a sinistra in modo da giustificare a destra il numero */
for(k=0; k<(lunghezza_max-lunghezza); k++) { n[k] = ' '; }
if(sign<0) { n[lunghezza_max-lunghezza-1] = '-'; }
/* qui costruisco il numero già nel giusto ordine ovvero dalla cifra più significativa a quella meno significativa */
k=1;
while(i>0)
{
n[lunghezza_max-k-1] = (char) ((i % 10) + 48);
k++;
i= i/10;
}
n[lunghezza_max-1] = '\0'; // la stringa deve terminare con un carattere nullo
return 0;
}