Bonjour à vous,
Je vais vous présenter le Pilote graphique d’écran LCD 12864 équipé d’un contrôleur ST7820, utilisé en mode série, avec une liaison SPI simulé pour aller le plus vite possible à l’affichage.

Vous devez dézipper le fichier « Pilote12864s.zip » et vous verrez qu’il contient 3 fichiers :
- – Fonte.h // Contient 4 Fontes, une BitMap et 4 icônes,
- – LCD12864s.h // Contient le Pilote complet (s = série),
- – Test_Lcd12864.ino // Contient un programme de test pour Arduino Méga et RAMPS 1.4 (pour notre CNC en cours de montage).
Voir le document au format PDF plus facile à lire :
Dans le fichier (Lcd12864s.h) la configuration du pilote est prévue pour un Arduino Méga connecter sur les broches 16, 17 et 23 sur une RAMPS 1.4. Si vous souhaitez utiliser d’autres ports, changer ces données et les ports correspondants (important) :
- // LCD 12864 Graphique (AUX4)
- const byte LCD_RS = 16; // Mode et CS (Lcd12864)
- const byte LCD_EN = 17; // Enable et CLK (Lcd12864)
- const byte LCD_D4 = 23; // D4 et Donnée (Lcd12864)
- #define PORT_CS1 PORTH |= _BV(PH1) // Accès rapide RS mise à 1 (Lcd12864)
- #define PORT_CS0 PORTH &= ~_BV(PH1) // Accès rapide RS mise à 0 (Lcd12864)
- #define PORT_EN1 PORTH |= _BV(PH0) // Accès rapide EN mise à 1 (Lcd12864)
- #define PORT_EN0 PORTH &= ~_BV(PH0) // Accès rapide EN mise à 0 (Lcd12864)
- #define PORT_D41 PORTA |= _BV(PA1) // Accès rapide D4 mise à 1 (Lcd12864)
- #define PORT_D40 PORTA &= ~_BV(PA1) // Accès rapide D4 mise à 0 (Lcd12864)
Ce pilote permet de dessiner et d’afficher des textes avec accents (àâéèêëîïôùö), les fontes sont proportionnelles (le ‘i’ prend moins de place que le ‘m’), au nombre de 4 (6×8, 7×11, 11×16, 16×21), la dernière n’affiche que des chiffres pour la date et l’heure (./0123456789:). Vous pouvez afficher des Bitmap de 128 x 64 et des icônes de 8 à 128 de large et 1 à 64 de hauteur. Il est possible de sauver l’écran avant de faire des affichages et de ré-afficher l’écran sauvé (menu…). Ceci pour gagner du temps d’affichage par exemple.
L’écran est toujours horizontale, donc 0 à 127 de largeur et 0 à 63 de hauteur.
Les coordonnées partent toujours du haut de l’écran à gauche en partant de x=0, y=0, ensuite c’est la largeur ‘l’ (1 à 128) et la hauteur ‘h’ (1 à 64).
J’utilise une table qui contient l’ensemble des éléments de l’écran (buffer), ceci pour avoir une réactivité importante et limiter le transfert d’information sur le bus SPI bien trop lent.
J’utilise une variable globale pour changer la ‘couleur’ d’affichage, celle utilise deux ‘couleurs’, le Noir (0) et le Blanc (1), ceci permet de changer le pixel à afficher :
- lcdNouB = Blanc ; // Affiche le pixel en Blanc sur l’écran,
ou
- lcdNouB = Noir ; // Affiche le pixel en Noir sur l’écran.
Le programme utilise 1036 octets en mémoire RAM, il est possible d’utiliser 524 octets en commentant la variable de copie d’écran et en n’utilisant pas les fonctions associés :
// word ramLcdSauve[8][64]; // Copie Buffer – gestion de deux écrans (commenté)
Lcd_Sauve() et Lcd_Restaure() à commenter avec /* … */
Vous pouvez voir les exemples dans le fichier « Test_Lcd12864.ino ».
Les fonctions disponibles pour le Système et l’initialisation sont :
Lcd_Init(); // Initialiser l’écran en mode Graphique uniquement.
// Initialisation
void setup()
{
Lcd_Init();
}
Lcd_Efface(); // Effacer l’écran totalement.
Lcd_EffaceXY(x, y, l, h); // Effacer une partie de l’écran,
Lcd_Sauve(); // Sauve la mémoire de l’Affichage en cours.
Lcd_Restaure(); // Restaure la mémoire de l’Affichage Sauvegardé et l’affiche.
Les fonctions disponibles pour le Dessin sont :
Lcd_Pixel(x, y); // Écriture d’un Pixel.
Lcd_Ligne(x, y, l, h); // Trace de Ligne – Algorithme de Bresenham.
Lcd_Rectangle(x, y, l, h); // Trace un Rectangle Vide.
Lcd_Rectangle(x, y, l, h); // Trace un Rectangle Plein.
Lcd_Cercle(x, y, r); // Trace un Cercle de rayon ‘r’.
Exemple :
// Affiche deux cercles, des rectangles et des points aléatoires
Lcd_Efface();
Lcd_Rectangle(2,2,123,60);
Lcd_Ligne(0,63,127, 0); // Ligne en croix
Lcd_Ligne(0, 0,127, 0);
Lcd_RectanglePlein(54,50,22,3);
Lcd_RectanglePlein(50,47,10,3);
Lcd_RectanglePlein(70,47,10,3);
Lcd_Cercle(45,20,12);
Lcd_Cercle(85,20,12);
// Affiche des points aléatoires
for (word i = 0; i < 2000; i++) Lcd_Pixel(random(2,125), random(2, 62));
delay(2000);
Les fonctions disponibles pour les Textes avec l’utilisation de 4 fontes de caractère :
Lcd_Fonte(NumFonte) // Définit la Fonte par son Numéro (1 à 4)
1 = Fonte 6 x 8 pouvant afficher 8 lignes de 22-23 caractères,
2 = Fonte 7 x 11 pouvant afficher 6 lignes de 20-21 caractères,
3 = Fonte 11 x 16 pouvant afficher 4 lignes de 12-13 caractères,
4 = Fonte 16 x 21 Grand Chiffres pouvant afficher 3 lignes de 10 caractères.
Lcd_Curseur(x, y); // Positionne le Curseur en X et Y pour la fonction Lcd_Print
Lcd_Print(t) // Affichage des Chaînes de Caractère uniquement,
vous devez transformer les nombres en Chaîne avant avec : String(nombre),
Lcd_Texte(x, y, *p); // Écriture du Texte provenant de la SRAM,
Exemple :
#define M1 « Bonjour du FabLab PPR »
#define M2 « Voilà un beau Travail »
#define M3 « ..Magnifique.. »
// Affiche des Textes
Lcd_Efface();
Lcd_Fonte(1); // Fonte 6 x 8
Lcd_Texte(0, 0, PSTR(M1));
Lcd_Fonte(2); // Fonte 7 x 11
Lcd_Texte(0, 10, PSTR(M2));
Lcd_Fonte(3); // Fonte 11 x 16
Lcd_Texte(0, 22, PSTR(M3));
Lcd_Fonte(4); // Fonte 16 x 21 (numérique uniquement)
Lcd_Curseur(0, 41); // Positionne le Curseur pour la fonction Lcd_Print()
Lcd_Print(« ….. 2019 ….. »); // Afficher à l’emplacement du curseur 0, 41 !
Les fonctions disponibles pour les BitMap et Icône sont :
Lcd_BitMap(*p); // Affiche une BitMap 128 x 64 sur l’Écran (pas de buffer),
Lcd_Icone(x, y, *p); // Affiche une Icône (Mini 8 de large, maxi 128).
Exemple ;
// Affiche une BitMap
Lcd_BitMap(FabLab);
delay(2000);
// Affiche des Icônes
Lcd_Efface();
Lcd_Fonte(3);
Lcd_Curseur(0, 10); // Positionne le Curseur pour la fonction Lcd_Print()
Lcd_Print( » Des Icônes »); // Afficher à l’emplacement du curseur 0, 10 !
Lcd_Icone( 6, 35, IcoCarteSd);
Lcd_Icone(31, 35, IcoRam);
Lcd_Icone(60, 35, IcoFraise);
Lcd_Icone(90, 35, IcoVentil);
delay(2000);
// Pour voir les Icônes, regarder le fichier « Fonte.h » 🙂
Si vous avez des questions, envoyer un émail avec si possible des exemples à :
Fablab.ppr@gmx.fr
Voici ce document au format PDF plus facile à lire :
Bon test 🙂
A bientôt,
Jean-Noël MICHEL de la Rochefoucauld
Président