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);
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:
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]
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