Modifica Libreria Laurtec GLCD
- Video Lab
-
Autore della discussione
- Premium Utente
-
Less
Di più
10 Anni 4 Giorni fa - 10 Anni 4 Giorni fa #6
da Video Lab
Volere è Potere
Risposta da Video Lab al topic Modifica Libreria Laurtec GLCD per PIC16F877A e GLCD 192x64
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);
Per fare le prove vi posto il logo di un orologio:
Per i caratteri è la seguente, ricordandovi di creare un array font_16x16[n_caratteri][32]
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
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
-
10 Anni 4 Giorni fa #7
da Video Lab
Volere è Potere
Risposta da Video Lab al topic Modifica Libreria Laurtec GLCD per PIC16F877A e GLCD 192x64
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.
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.
10 Anni 4 Giorni fa #8
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Modifica Libreria Laurtec GLCD per PIC16F877A e GLCD 192x64
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
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.
Forum - Ultimi messaggi
-
- progetto can
- da marcelloraja
-
- MODULO GSM SIM900A
- da Mauro Laurenti
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- Gestione degli errori su comunicazione seriale
- da Mauro Laurenti
-
- Timer0 e interrupt
- da Mauro Laurenti