128×64 Graphic LCD DFRobot – 12864ZW – ST7920

Tra i display che puoi collegare ad Arduino c’è il 128×64 Graphic LCD:

128x64 Graphic LCD

questo display è di tipo grafico e ti mette a disposizione una matrice di 128×64 punti, che puoi utilizzare sia per scrivere dei testi sia per disegnare simboli ed immagini.

Il 128×64 Graphic LCD è in grado di funzionare sia in modalità parallela, in cui usi gli 8 pin di dati DB0-DB7 oltre ai pin RS, R/W ed ENABLE (E) sia in modalità seriale se usi solo i pin RS, R/W ed ENABLE.

Per definire in quale modalità lavorare hai a disposizione il pin PSB ( 15 ) il quale se connesso al +5v indica che il display deve funzionare in modalità parallela, se connesso a Gnd indica al 128×64 graphic lcd di funzionare in modalità seriale.

In questo articolo ti mostro il funzionamento in modalità parallela.

I dati arrivano al 128×64 Graphic LCD attraverso gli 8 pin DB0-DB7 connessi ad Arduino.

Collegamento del display 128×64 Graphic LCD

le connessioni sono tante ma non complese, lato display hai la piedinatura mostrata in figura:

connessioni 128x64 Graphic LCD

lato Arduino il tutorial e gli sketch forniti dalla DFRobot ti suggeriscono come connettere il display 128×64 Graphic LCD ad Arduino:

  • DB0-DB3 ai pin 8-11 di arduino
  • DB4-DB7 ai pin 4-7
  • RS al pin 17 o A3 ( i pin Analogici possono essere anche definiti con la numerazione successiva al pin 13: A0=14, A1=15 …. A5=19)
  • R/W al pin 16 o A2
  • ENABLE al pin 18 o A4

In un primo momento ho seguito le istruzioni ed il funzionamento è stato immediato, scaricata la libreria per l’IDE 1.0 e caricato lo sketch di esempio “Hello World” ho visto magicamente apparire sul mio display il testo.

Ma come oramai avrai capito non mi piace fare le cose troppo semplici e quindi ho deciso di sperimentare.

Ho cambiato la piedinatura di connessione e ho scelto di non utilizzare i pin 16,17,18 ( alias A2,A3,A4 ) riservandoli ad un futuro progetto di acquisizione segnali provenienti da sensori esterni.

Ho collegato i pin RS, R/W e Enable rispettivamente ai pin 2,3 e 12 rimasti liberi ottenendo la seguente configurazione:

  • DB0-DB3 ai pin 8-11 di arduino
  • DB4-DB7 ai pin 4-7
  • RS al pin 2
  • R/W al pin 3
  • ENABLE al pin 12
Ecco come ho collegato il display 128×64 Graphic LCD ad arduino:
connessioni 128x64 Graphic LCD ad Arduino

La libreria non può comprendere da sola il cambiamento per cui devi editare il file: LCD12864R.h presente nel path delle librerie Arduino sul mio Mac: Documenti/Arduino/libraries/LCD12864R e modificarla nel modo seguente:

LCD12864R.h

Ovviamente puoi usare la libreria senza modificarla se nel tuo progetto i pin A2,A3 ed A4 non ti servono e lo sketch che ti propongo funziona lo stesso, i collegamenti dovrai eseguirli come da manuale della libreria ( vedi sopra ).

Lo sketch per il display grafico 12864ZW

lo sketch che ti mostro è una rivisitazione dell’esempio proposto con la libreria ufficiale:

/* 

 // # Update the library and sketch to compatible with IDE V1.0 and earlier

 // # Description:
 // # The sketch for using LCD12864 in parallel mode

 LCD  Arduino
 RS = 2;
 RW = 3;
 EN = 12;
 D0  = 8;
 D1  = 9;
 D2  = 10;
 D3  = 11;
 D4  = 4;
 D5  = 5;
 D6  = 6;
 D7  = 7;
 PIN15 PSB = 5V;
 */

#include "LCD12864R.h"
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

unsigned char show0[]="Mauro Alfieri";//
unsigned char show1[]="mauroalfieri.it";//
unsigned char show2[]="Tutorial LCD12864";//
unsigned char show3[]="ST7920 DFRobot ";//

void setup()
{
  LCDA.Initialise(); // INIT SCREEN
  delay(100);
}

void loop()
{
  LCDA.CLEAR();//Clear screen
  delay(100);
  LCDA.DisplaySig(0,0,0x20);//show words
  delay(100);
  LCDA.DisplayString(0,0,show0,AR_SIZE(show0));//LOGO
  delay(100);
  LCDA.DisplayString(1,0,show1,AR_SIZE(show1));//LOGO
  delay(100);
  LCDA.DisplayString(2,0,show2,AR_SIZE(show1));//LOGO
  delay(100);
  LCDA.DisplayString(3,0,show3,AR_SIZE(show1));//LOGO

  while(1);
}

La prima parte dello sketch ti indica come collegare Arduino al 128×64 Graphic LCD ed includendo la libreria LCD12864R.h.

la linea 24 è forse il passaggio più complesso in quanto definisce una funzione AR_SIZE( a ) e serve a calcolare la lunghezza dell’array di caratteri che passi al display, per ciascuna riga dovrai definire infatti la posizione X, Y la stringa e la sua lunghezza. Questa linea ti agevola il calcolo;

linee 26-29: definisci le 4 righe che vuoi scrivere sul Display, ricorda che il display funziona a pagine per cui se aggiungi altre linee queste verranno visualizzate su una pagina successiva;

linea 33: inizializza il display con il metodo Inizialise() della classe LCDA servita dalla libreria LCD12864R;

linea 39: pulisci il display con il metodo CLEAR();

linea 41: invia al display 128×64 Graphic LCD DFRobot il segnale di inizio scrittura delle parole da visualizzare;

linee 43-49: scrivi a video le singole righe impostate negli array alle linee 26-29. Dopo ogni linea attendi 100 millisecondi;

Il risultato di questo sketch è visibile in figura:

128x64 LCD ST7920

In un prossimo articolo ti mostrerò come usare la modalità seriale che ha il vantaggio di beneficiare di soli 3 pin arduino per pilotare il display.

Buon divertimento !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/128x64-graphic-lcd.html

76 pings

Skip to comment form

  1. […] di un anno fa avevo dedicato a questo tipo di display un articolo controllandolo con una altra libreria, dedicata, e mediante bus parallelo a 8bit: il panorama è […]

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.