Modifica Libreria Laurtec GLCD

  • Video Lab
  • Autore della discussione
  • Premium Utente
  • Premium Utente
Di più
10 Anni 4 Giorni fa - 10 Anni 4 Giorni fa #6 da Video Lab
Dopo ore di prove e finalmente sono riuscito ad aggiungere una funziona alla libreira GLCD che permette di stampare dove si vuole sullo schermo Loghi o Caratteri di dimensioni 16x16
Aggiungo che la funzione di Mauro write_char_GLCD non può stampare font con dimensioni superiori a 8x8, o per lo meno utilizzando software per creare caratteri che diano in uscita degli array con dati a 8 bit.
Se si utilizzano software che forniscono array con dati a 16 bit dovrebbe funzionare, però quelli trovati in rete da me, danno tutti in uscita array a 8, io utilizzo GLCDFontCreator2
Comunque la funzione che ho creato può disegnare caratteri char di dimensioni 16x16 utilizzando array con dati da 8 bit
void GLCD_print_logo_16_16 (unsigned char x_pos, unsigned char y_pos, const unsigned char *logo);
Code:
void GLCD_print_logo_16_16 (unsigned char x_pos, unsigned char y_pos, const unsigned char *logo){ unsigned char i; unsigned char data; unsigned char x; unsigned char bit_value; unsigned char c=16; for (i = 0 ; i<16; i++){ data = logo[c]; for (x = 0 ; x<=8; x++) { if (data & (0x80 >> x)) bit_value = FILLING_BLACK; else bit_value = FILLING_WHITE; plot_xy_GLCD (x_pos + i, y_pos + x, bit_value); } c++; } c=0; for (i=0 ; i<16; i++){ data = logo[c]; for (x = 0 ; x<=8; x++) { if (data & (0x80 >> x)) bit_value = FILLING_BLACK; else bit_value = FILLING_WHITE; plot_xy_GLCD (x_pos+ i, (y_pos+8) + x, bit_value); } c++; } }

Per fare le prove vi posto il logo di un orologio:
Code:
const unsigned char logo_1 []= //Logo di un orologio 16*16 { 0x00, 0x00, 0x00, 0xE0, 0x10, 0x08, 0x04, 0x04, 0xF4, 0x84, 0x84, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00 };


Per i caratteri è la seguente, ricordandovi di creare un array font_16x16[n_caratteri][32]
Code:
void GLCD_print_char_16 (unsigned char x_pos, unsigned char y_pos, const unsigned char *character){ unsigned char i; unsigned char data; unsigned char x; unsigned char bit_value; unsigned char larghezza=16; unsigned char c=16; for (i = 0 ; i<larghezza; i++){ data = font_16x16[character - 32][c]; for (x = 0 ; x<=8; x++) { if (data & (0x80 >> x)) bit_value = FILLING_BLACK; else bit_value = FILLING_WHITE; plot_xy_GLCD (x_pos + i, y_pos + x, bit_value); } c++; } c=0; for (i=0 ; i<larghezza; i++){ data = font_16x16[character - 32][c]; for (x = 0 ; x<=8; x++) { if (data & (0x80 >> x)) bit_value = FILLING_BLACK; else bit_value = FILLING_WHITE; plot_xy_GLCD (x_pos+ i, (y_pos+8) + x, bit_value); } c++; } };

Aggiungo, i caratteri possono essere anche più stretti di 16, basta modificare il valore larghezza, per quanto riguarda l'altezza deve rimanere 16.
Spero di aver fatto cosa gradita.
Saluti a tutti e grazie Mauro

Volere è Potere
Ultima Modifica 10 Anni 4 Giorni fa da Video Lab. Motivo: errore nel codice

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Video Lab
  • Autore della discussione
  • Premium Utente
  • Premium Utente
Di più
10 Anni 4 Giorni fa #7 da Video Lab
Aggiungo in oltre, se volete fare caratteri ancora più grandi o loghi più grandi ricordatevi che l'altezza DEVE ESSERE PER FORZA 8 o un multiplo di 8 (8, 16, 32, 64) questo per semplificare la scrittura delle funzioni, visto che i dati per ogni colonna sono a 8 bit.
Comunque è fattibile anche stampare loghi o caratteri con altezza diversa da 8 o un miltiplo di 8, nella mia funzione va modificato l'ultima funzione plot_xy_GLCD(x_pos+i, (y_pos+ N ) +x, bit_value); dove al posto di N andrebbe messo 7 se volete un altezza 15, 6, se volete.
Per stampare caratteri maggiori di 16 va aggiunto un altro ciclo di for(i=0;<larghezza; i++)
Comunque se avete dubbi chiedete.

Volere è Potere

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
10 Anni 4 Giorni fa #8 da Mauro Laurenti
Ottimo,

gli daro' un'occhiata e magari prendero' spunto per implementare qualcosa di simile e magari includerla nella libreria.

Grazie ancora per la condivisione.

...chi ha dubbi ti potrà fare domande solo per poche settimane!
...poi perderai tutti i dettagli di bit e byte che ora hai in mente e gestisci con disinvoltura! :)

Per me sono passate gia' le due settimane! :)

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro Laurenti

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi