Progetti

   

Tutorial

   

Servizi

   

Sponsor  

   
Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2

ARGOMENTO: Modifica Libreria Laurtec GLCD

Modifica Libreria Laurtec GLCD per PIC16F877A e GLCD 192x64 6 Anni 6 Mesi fa #6

  • Video Lab
  • Avatar di Video Lab
  • Offline
  • Expert Boarder
  • Volere è Potere
  • Messaggi: 85
  • Ringraziamenti ricevuti 12
  • Karma: 2
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
Volere è Potere
Ultima modifica: 6 Anni 6 Mesi fa da Video Lab. Motivo: errore nel codice
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Modifica Libreria Laurtec GLCD per PIC16F877A e GLCD 192x64 6 Anni 6 Mesi fa #7

  • Video Lab
  • Avatar di Video Lab
  • Offline
  • Expert Boarder
  • Volere è Potere
  • Messaggi: 85
  • Ringraziamenti ricevuti 12
  • Karma: 2
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
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Modifica Libreria Laurtec GLCD per PIC16F877A e GLCD 192x64 6 Anni 6 Mesi fa #8

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Offline
  • Moderatore
  • Messaggi: 4677
  • Ringraziamenti ricevuti 561
  • Karma: 52
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
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
Moderatori: Mauro Laurenti
Powered by Forum Kunena
   
© LaurTec 2006-2015