Salve, sto facendo un circuito con pic16f876, tastiera a matrice e display lcd 20x4. Ho una variabile tipo char usata come contatore, e mi serve visualizzare sull'lcd il valore di questo contatore. Come si fa a convertire un valore numerico in una stringa ascii da usare con il comando Lcd_out(...); ? Uso MikroC
Grazie.
Didn't find your answer? Ask the community — no account required.
poi lo formatti con snprintf (o sprintf se il tuo compilatore non è ansi C compatibile)
snprintf(buf,16,Valore: %u,variabile_contatore);
infine invia al display la stringa formattata: Lcd_out(1,1,buf);
Ricordati di includere la libreria string.h
#include
Esiste anche la funzione itoa() che converte un intero in una stringa, ma non l'ho mai utilizzata.
Ciao
T
Telespalla Bob
Il 14/06/2013 22:41, Pier GSi ha scritto:
Ok, grazie. comunque sicuro che non sia il contrario, ovvero unità in cifra1 e via di seguito? però a me serve il codice ascii corrispondente ad ogni cifra del valore da visualizzare.
T
Telespalla Bob
Il 14/06/2013 23:00, qUAD dAMAGE ha scritto:
grazie, itoa() non la trovo in mikroc proverò a studiare questa sprintf, non la conoscevo... ciao.
C
Claudio_F
Il 15/06/2013 08:58, Telespalla Bob ha scritto:
Si, unita' in cifra1, tra l'altro questo sistema secondo me usa molte meno risorse di funzioni generali di conversione (stiamo parlando di un PIC di fascia media/bassa, quindi userei il C il piu' possibile in "modo assembly")
Aggiungere 48? ;)
P
Pier GSi
"Telespalla Bob" ha scritto nel messaggio news:51bc1094$0$1358$ snipped-for-privacy@reader2.news.tin.it...
Si scusa, ovviamente avete ragione...ero di fretta ed ho invertito.
Come ti ha detto Claudio_F basta aggiungere 48 ed ottieni il carattere ASCII corrispondente.
usando la mia libreria
void lcd_putch(char c) { LCD_RS = 1; // caratteri PORTC = (PORTC & 0xF0) | (c >> 4); //caricamento primi 4 bit LCD_STROBE; //ciclo il pin EN PORTC = (PORTC & 0xF0) | (c & 0x0F); //caricamento altri 4 bit LCD_STROBE; //ciclo il pin EN DelayUs(50); }
E' un metodo semplice, siccome sono microprocessori poco potenti preferisco evitare routine complesse. In genere evito anche di lavorare in virgola mobile per poi formattare il risultato, se ad esempio mi è necesasrio un decimale preferisco fare le operazioni con numeri interi moltiplicando per
10 e poi inserire il punto decimale quando è ora di visualizzare su display:
decbcd(2349); //visualizzo 234.9
if(cifra4){lcd_putch(cifra4+48);}else{lcd_putch(' ' );} //soppressione zero non significativo
if(cifra4==0 && cifra3==0){lcd_putch(' ');}else{lcd_putch(cifra3+48);} //soppressione zero non siginficativo