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;

}