Les écrans LCD sont des afficheurs alphanumériques (ou graphiques). Ils sont fréquemment utilisés dans des applications à base de microcontrôleur. Il existe plusieurs modèles sur le marché qui se présentent sous différentes formes et tailles.

Pour les afficheurs de type textes ou alphanumérique qui permettent d’afficher des lettres, des chiffres et quelques caractères spéciaux, on retrouve le plus fréquemment le format 2 lignes par 16 colonnes. Il en existe cependant de nombreux autres avec une seule ligne, ou 4 (ou plus) et 8 colonnes, ou 16, ou 20 ou encore plus. vous pouvez choisir la taille en fonction des besoins de vos projets. Beaucoup de ces écrans LCD intègrent le rétroéclairage afin qu’ils puissent être vus dans des conditions faiblement éclairées.

Figure 1: Un écran LCD de 2×16 (2 lignes par 16 colonnes)

Il existe d’autres types d’écrans LCD, comme les afficheurs graphiques monochromes. Avec ces d’écrans vous avez accès à chacun des pixels et vous pouvez donc afficher pas seulement des caractères tels que les chiffres et les lettres comme les écran LCD alphanumérique mais aussi produire des dessins beaucoup plus évolués. Ils sont cependant légèrement plus onéreux que les écran LCD alphanumérique.

Figure 2: Un écran LCD graphiques monochromes (240×128)

Les afficheurs graphiques couleur de l’autre côté sont l’évolution des afficheurs graphiques monochromes la couleur en plus (soit 3 fois plus de pixels à gérer : un sous-pixel pour le rouge, un autre pour le bleu et un dernier pour le vert, le tout forme la couleur d’un seul pixel).

En termes de communication avec l’écran, on peut les regrouper en deux catégories: les écrans LCD parallèles et les écrans LCD série.

Les écrans LCD parallèles sont les plus largement utilisés comme la série populaire Hitachi HD44780. Ils sont connectés au circuit de microcontrôleur de telle sorte que les données sont transférées à l’écran LCD en utilisant plus d’une ligne et généralement quatre lignes de données (mode 4 bits) ou huit lignes de données (8- mode de bits) sont utilisés.

Les écrans LCD série sont connectés à un microcontrôleur en utilisant une ligne de données, ce qui est bon quand vous avez très peu de broches disponibles. Les écrans LCD série sont généralement beaucoup plus facile à utiliser, mais ils sont plus coûteux que ceux parallèles. Dans cet article, nous allons discuter seulement les écrans LCD parallèles, car ils sont moins chers et sont utilisés plus souvent dans des projets à base de microcontrôleurs.

La programmation de bas niveau d’un écran LCD parallèle est généralement une tâche complexe et nécessite une bonne compréhension du fonctionnement interne de l’écran LCD, y compris une compréhension des diagrammes de synchronisation. La bonne nouvelle est qu’il ya beaucoup de bibliothèques lcd que nous pouvons utiliser pour communiquer avec le contrôleur d’écrans LCD HITACHI HD44780. Ce module est monochrome et se présente sous différentes formes et tailles habituellement avec des longueurs de caractère de 8, 16, 20, 24, 32 et 40 et 1, 2 ou 4 lignes. Chaque caractère est composé de 5×8 ou 5×11 de matrice de points.

Connexion de l’écran LCD

Cet écran LCD a généralement 14 broches qui sont marqués sur le circuit imprimé, mais certains modèles ont 16 broches si le dispositif a un rétro-éclairage intégré

No Rôle Nom 
1 Masse VSS
2 Alimentation VDD
3 Réglage du contraste Vee
4 Sélection du registre (commande ou donnée) RS
5 Lecture ou écriture R/W
6 Entrée de validation E
7 à 14 Bits de données D0 à D7
15 Anode du rétroéclairage (+5V) A
16 Cathode du rétroéclairage (masse) K

Tableau 1: description des broches

Le tableau 1 donne la description de chaque broche de l’écran LCD, une résistance variable 10K peut être reliée à la broche centrale du potentiomètre et la broche 3 (VEE) de l’écran pour régler le contraste de l’écran LCD. Une résistance série de 220 ohms est utilisé pour le rétroéclairage de l’écran LCD comme le montre la figure 2 ci-dessous

LCD connection to Port B of PIC Microcontroller

Figure 2: écran LCD Connecté au PORTB du Microcontrôleur PIC 

Le contrôleur LCD contient trois blocs de mémoire:

  • DDRAM – Données d’affichage RAM: Ce bloc mémoire est utilisé pour stocker les caractères qui doivent être affichés. Chaque caractère occupe une adresse DDRAM. Les adresses de première ligne sont de 00 à 27, les adresses de seconde ligne commencent de 40 à 67 en hexadécimal. Pour déplacer le curseur au début de la deuxième ligne, l’adresse DDRAM sera 0x40. Pour les écrans LCD de plus de 2 lignes, veuillez consulter leur fiche technique pour plus d’informations.
  • CGRAM – Générateur de caractères RAM: Cette mémoire contient la mappe de caractères par défaut avec tous les caractères qui peuvent être affichés à l’écran. Les adresses des emplacements mémoire CGROM correspondent aux caractères de la table ASCII.

Exemple: 

Symbole  Code ASCII en notation binaire
0 00110000
1 00110001
2 00110010
$ 00100100
% 00100101
& 00100110
A 01000001
B 01000010
b 01100010
  • CGROM – Générateur de caractères ROM: Cette mémoire est utilisée pour créer vos propres Caractères

Quelques commandes du contrôleur LCD HD44780 couramment utilisés

 Instruction Octet
Effacer l’écran LCD  0×01
Remettre le curseur sur la position d’origine et sans chager l’affichage  0×02
Déplacer le curseur vers la droite, déplacer l’affichage (à gauche)  0×05
Déplacer le curseur vers la droite, ne pas déplacer l’affichage (c’est le plus commun) 0×06
Déplacer le curseur vers la droite, déplacer l’affichage (à gauche) 0×07
Affichage activé, curseur désactivé, 0x0C
Affichage activé, curseur activé, curseur fixe 0x0E
Affichage activé, curseur clignotant 0x0F
Déplacer du curseur vers la gauche  0×10
Déplacer le curseur vers la droite  0×14
Déplacement vers la gauche  0×18
Déplacement vers la droite  0x1C

Tableau 2: Quelques commandes du contrôleur LCD HD44780

Téléchargez la fiche technique du contrôleur LCD HD44780 pour plus d’informations.

Bibliothèque LCD

MPLAB est en train d’éliminer progressivement la bibliothèque périphérique PIC18F (PIC18F Peripheral Library en anglais) qui n’est plus incluse dans les nouveaux compilateurs XC8 à partir de la version v1.35. Dans ces versions, vous devez les télécharger et les installer séparément dans votre compilateur et ils sont maintenant appelés les Bibliothèques Périphériques Antérieures (Legacy Peripheral Libraries en anglais).

Si vous utilisez un compilateur XC8 le plus récent, comme la version 1.35 ou ultérieure et que vous souhaitez utiliser MPLAB® Code Configurator (MCC) pour générer des pilotes pour vos périphériques, vous pouvez utiliser cette Bibliothèque LCD fournie avec le code de la Carte de démonstration Microchip PICDEM 2 Plus. Elle peut être utilisée avec PIC16F et PIC18F série microcontrôleurs, tout ce que vous devez faire est d’inclure les fichiers lcd.h et lcd.c, elle a toutes les fonctions LCD couramment utilisées. Pour plus d’informations, vous pouvez Télécharger la fiche technique du contrôleur LCD HD44780.

Télécharger: La bibliothèque LCD

  • Raccordement de l’écran LCD: Vous pouvez modifier les connexions par défaut de l’écran LCD au PORTD à votre PORT préféré en modifiant #define LCD_PORT dans le fichier lcd.h et en modifiant le registre TRIS dans le fichier lcd.c. Vous pouvez également modifier les différentes connexions des broches de l’écran LCD en modifiant #define LCD_EN, #define LCD_RW et #define LCD_RS dans le fichier lcd.h.
  • LCD_Initialize(): Cette routine initialise le pilote LCD. Cette routine doit être appelée avant toute autre routine de LCD est appelée.
  • LCDPutChar(): Cette fonction affiche le caractère ASCII spécifié à la position actuelle sur l’écran LCD
  • LCDPutStr(): Cette routine écrit une chaîne de caractères à écran LCD à la position actuelle du curseur
  • LCDPutCmd(): Cette routine écrit le caractère dans le registre de commande LCD
  • LCDGoto(): Cette fonction positionne le curseur sur la ligne et la colonne spécifiées
  • DisplayClr(): Effacer l’écran LCD
  • cursor_on(): Activez le curseur

Regarder La vidéo ADC et LCD avec MPLAB Code Configurator

Exemple:

Dans cet exemple, nous configurons notre PIC18F26K20 avec MPLAB® Code Configurator (MCC). Le PIC utilisera l’oscillateur interne 8MHz, la broche MCLR sera désactivée. L’écran LCD est connecté au PORTB comme le montre la figure 3 ci-dessous.

Dans cet exemple, nous allons apprendre comment utiliser les fonctions LCDPutChar (), LCDPutStr (), LCDClr () et LCDGoto () de la bibliothèque LCD

Figure 3: Ecran LCD connecté au port B de PIC18F26K20

La figure 4 ci-dessous présente la vue d’ensemble de la configuration du projet avec MPLAB Code Configurator

Figure 4: Vue d’ensemble du projet avec MPLAB code Configurateur

Voici le fichier main.c:

Fonctions LCD avec PIC18 périphérique Bibliothèque (PIC18 Peripheral Library en Anglais)

La bibliothèque Microchip XC8 LCD fournit un grand nombre de fonctions pour contrôler le contrôleur LCD HD44780 avec une interface de données 4 bits et 8 bits dans les bibliothèques périphériques PIC18F (PIC18F Peripheral Library en Anglais).

Regardez le tutoriel vidéo

Attention:

A partir de XC8 v1.35, les bibliothèques périphériques qui incluent l’écran LCD et d’autres périphériques comme ADC, SPI, I2C ne sont plus incluses dans le fichier d’installation comme avec les versions précédentes. Vous pouvez soit écrire votre propre bibliothèque LCD et utiliser MPLAB code configurator pour configurer les autres périphériques ou le plus facile est de télécharger les bibliothèques périphériques comme un téléchargement distinct et les installer. Vous pouvez les télécharger sur le siteweb de Microchip sous l’onglet Téléchargements des compilateurs MPLAB XC. Ils sont maintenant appelés PIC18 Legacy Peripheral Libraries.

Télécharger: PIC18 Legacy Peripheral Libraries.

Les écrans LCD ils utilisent  couramment l’interface à quatre bits car ceci permettent d’économiser 4 broches du microcontrôleur qui peuvent être utilisées pour d’autres fonctions.

Vous pouvez accéder à cette bibliothèque (uniquement le compilateur XC8 v1.34 et versions antérieures) en ouvrant le fichier d’aide (menu Aide —> Contenu de l’aide —> Recherche de descriptions de fonctions LCD ou appuyez sur F1 dans votre projet).

Fonction Description Exemple
BusyXLCD Le contrôleur LCD est-il occupé? while( BusyXLCD() );   // Patientez ici lorsque le contrôleur LCD est occupé
OpenXLCD Configurez les lignes d’entrée / sortie utilisées pour commander l’écran LCD et initialiser l’écran LCD. OpenXLCD( FOUR_BIT & LINES_5X7 );   //Configurez l’écran LCD en mode d’interface 4 bits et 5×7 caractères, affichage à plusieurs lignes.
putcXLCD Écrire un octet dans l’unité de commande LCD Cet exemple affichera le caractère « L » sur l’écran LCD: unsigned char x = ‘L’;
PutcXLCD (x);
putsXLCD Ecrire une chaîne de caractères de la mémoire de données à l’écran LCD. L’écriture s’arrête lorsqu’un caractère NULL est détecté. putsXLCD(« Hello World »);  // Afficher Hello World
putrsXLCD Ecrire une chaîne de caractères de la mémoire programme à l’écran LCD. L’écriture s’arrête lorsqu’un caractère NULL est détecté. char mytxt[ ] = « Hello World »; putrsXLCD(mytxt);  // Afficher
Hello World.
ReadAddrXLCD Lisez l’octet d’adresse du contrôleur LCD. char addr;
while ( BusyXLCD() );
addr = ReadAddrXLCD();  //Lire l’adresse.
ReadDataXLCD Lire un octet du contrôleur LCD. char data;
while ( BusyXLCD() );
data = ReadAddrXLCD();   //Lire les données du contrôleur.
SetCGRamAddr Définissez l’adresse du générateur de caractères. char cgaddr = 0x1F;
while( BusyXLCD() );
SetCGRamAddr( cgaddr );
SetDDRamAddr Définir l’adresse de données d’affichage. char ddaddr = 0x40;
while( BusyXLCD() );
SetDDRamAddr( ddaddr );  //Déplacer le curseur au début de la deuxième ligne (16×2 LCD)
WriteCmdXLCD *Ecrire une commande au contrôleur LCD.
Il est important que l’écran LCD ne soit pas occupé avant d’envoyer une commande. Le while (BusyXLCD ()) doit être utilisé.
while( BusyXLCD() );
WriteCmdXLCD(DON);    //Active l’affichage

* Remarque: Les commandes suivantes peuvent être spécifiées dans l’argument de commande WriteCmdXLCD:

  • DOFF:  Désactive l’affichage . exemple: WriteCmdXLCD(DOFF);
  • DON:   Active l’affichage
  • CURSOR_OFF:  Active l’affichage, masquer le curseur
  • BLINK_ON: Active le clignotement du curseur
  • BLINK_OFF: Désactive le clignotement du curseur
  • SHIFT_CUR_LEFT: Déplace le curseur vers la gauche
  • SHIFT_CUR_RIGHT: Déplace le curseur vers la droite
  • SHIFT_DISP_LEFT : Déplace l’affichage vers la gauche
  • SHIFT_DISP_RIGHT: Déplace l’affichage vers la droite

L’argument de commande peut également utiliser l’ensemble de commandes du tableau 2 ci-dessus:

Exemple:

La bibliothèque LCD exige que les fonctions de retard suivantes soient définies par l’utilisateur avant d’utiliser les fonctions LCD:

DelayFor18TCY             Retard pour 18 cycles
DelayPORXLCD            Retard pour 15 ms et
DelayXLCD                    Retard pour 5 ms

En supposant une fréquence d’horloge du microcontrôleur de 4 MHz, le temps pour un cycle d’instruction est de 1 μs. Avec une fréquence d’horloge de 8 MHz, le temps pour un cycle d’instruction est de 0,5 μs.

Le délai de 18 cycles est obtenu en utilisant des instructions d’opération (NOP), où chaque opération NOP prend un cycle pour s’exécuter. La fin d’une fonction sans instruction « return » prend deux cycles. Lorsqu’une instruction « return » est utilisée, une instruction BRA se ramifie à la fin de la fonction où un RETURN 0 est exécuté pour revenir de la fonction, ajoutant ainsi deux cycles de plus.

Pour plus d’informations sur les fonctions de retard, consultez l’article:

Connecting Light Emitting Diodes (LED) to a PIC Microcontroller.

Exemples de retards LCD avec fréquence d’horloge de 8 MHz et 4 MHz.

ou tout simplement, cette déclaration peut également créer ce délai requis:

Connexion de l’écran LCD

Figure 5: Connexion LCD à un microcontrôleur PIC

La connexion physique entre l’écran LCD et les ports d’entrée / sortie du microcontrôleur est définie dans le fichier « xlcd.h » et les paramètres par défaut utilisent des broches PORTB en mode 4 bits où les 4 bits bas du port (RB0-RB3) sont connectés à la Lignes de données supérieures (D4-D7) de l’écran LCD. Ce fichier doit être modifié si l’écran LCD doit être connecté différemment ou à un autre port. Après avoir modifié la connexion de LCD dans le fichier xlcd.h, l’utilisateur doit recompiler les routines XLCD et inclure ensuite les fichiers mis à jour dans le projet. Cela peut être accompli en ajoutant les fichiers source XLCD dans le projet.

La broche LCD R/W peut être connectée à la masse Si vous n’avez pas besoin de lire les données de l’écran LCD comme dans la plupart des cas. Cela peut épargner une autre broche sur le microcontrôleur.

La figure 5 ci-dessus montre l’écran LCD en mode 4 bits connecté au PIC18F2620.

Regardez le tutoriel vidéo: Connexion LCD à PORTC en utilisant XC8 PIC18 Bibliothèque de périphériques Fonctions LCD

Exemple utilisant XC8 PIC18 Bibliothèque de périphériques Fonctions LCD

Affichez les mots «Hello World» sur la première ligne de l’écran LCD et « LCD Display » sur la deuxième ligne, comme le montre le schéma de la figure 5 ci-dessus.

La broche MCLR n’est pas activée et le circuit utilise l’oscillateur interne à 8MHz donc un dispositif de cristal externe et une résistance à la broche MCLR ne sont pas nécessaires.

Vous pouvez télécharger tous les fichiers de projet (MPLAB XC8 et conception Proteus schématique) ci-dessous. Tous les fichiers sont compressés, vous aurez besoin de les décompresser (Télécharger une version gratuite de l’utilitaire Winzip pour décompresser les fichiers).

Télécharger l’exemple LCD avec MPLAB Code Configurator:

Télécharger: LCD MPLAB Project with MPLAB Code Configurator

Télécharger: LCD PIC18F26K20 Proteus Project

Télécharger l’exemple LCD avec PIC18F Peripheral Libraries:

Télécharger: LCD Header 

Télécharger: LCD HEX

Télécharger: LCD Main C
Télécharger: LCD Interface Proteus