Les unités d'affichage sont les périphériques de sortie les plus importants dans les projets embarqués et les produits électroniques. L'écran LCD 16x2 est l'une des unités d'affichage les plus utilisées. L'écran LCD 16x2 signifie qu'il y a deux lignes dans lesquelles 16 caractères peuvent être affichés par ligne, et chaque caractère occupe un espace de matrice 5X7 sur l'écran LCD. Dans ce tutoriel, nous allons connecter le module LCD 16X2 au microcontrôleur 8051 (AT89S52). L'interfaçage de l'écran LCD avec le microcontrôleur 8051 peut sembler assez complexe pour les débutants, mais après avoir compris le concept, cela semble très simple et facile. Bien que cela puisse prendre du temps car vous devez comprendre et connecter 16 broches de l'écran LCD au microcontrôleur. Alors commençons par comprendre les 16 broches du module LCD.
Nous pouvons le diviser en cinq catégories, broches d'alimentation, broches de contraste, broches de contrôle, broches de données et broches de rétroéclairage.
Catégorie |
N ° de broche. |
Nom de la broche |
Fonction |
Broches d'alimentation |
1 |
VSS |
Broche de terre, connectée à la terre |
2 |
VDD ou Vcc |
Broche de tension + 5V |
|
Broche de contraste |
3 |
V0 ou VEE |
Réglage du contraste, connecté à Vcc via une résistance variable. |
Broches de contrôle |
4 |
RS |
Enregistrer la broche de sélection, RS = 0 Mode de commande, RS = 1 Mode données |
5 |
RW |
Broche de lecture / écriture, RW = 0 Mode d'écriture, RW = 1 Mode de lecture |
|
6 |
E |
Activer, une impulsion élevée à faible doit activer l'écran LCD |
|
Broches de données |
7-14 |
D0-D7 |
Broches de données, stocke les données à afficher sur l'écran LCD ou les instructions de commande |
Broches de rétroéclairage |
15 |
LED + ou A |
Pour alimenter le rétroéclairage + 5V |
16 |
LED- ou K |
Terre de rétroéclairage |
Toutes les broches sont clairement compréhensibles par leur nom et leurs fonctions, à l'exception des broches de contrôle, elles sont donc expliquées ci-dessous:
RS: RS est la broche de sélection de registre. Nous devons le mettre à 1, si nous envoyons des données à afficher sur l'écran LCD. Et nous le mettrons à 0 si nous envoyons une instruction de commande comme effacer l'écran (code hexadécimal 01).
RW: C'est une broche de lecture / écriture, nous la mettrons à 0, si nous allons écrire des données sur l'écran LCD. Et réglez-le sur 1, si nous lisons à partir du module LCD. En général, il est réglé sur 0, car nous n'avons pas besoin de lire les données sur l'écran LCD. Une seule instruction «Obtenir l'état de l'écran LCD» doit être lue plusieurs fois.
E: Cette broche est utilisée pour activer le module lorsqu'une impulsion de haut en bas lui est donnée. Une impulsion de 450 ns doit être donnée. Cette transition de HIGH à LOW rend le module ENABLE.
Il y a quelques instructions de commande prédéfinies dans LCD, nous les avons utilisées dans notre programme ci-dessous pour préparer l'écran LCD (dans la fonction lcd_init ()). Certaines instructions de commande importantes sont données ci-dessous:
Code hexadécimal |
Commande au registre d'instructions LCD |
0F |
LCD ON, curseur ON |
01 |
Écran d'affichage clair |
02 |
Rentrer à la maison |
04 |
Décrémenter le curseur (déplacer le curseur vers la gauche) |
06 |
Incrémenter le curseur (déplacer le curseur vers la droite) |
05 |
Shift affichage vers la droite |
07 |
Shift affichage gauche |
0E |
Affichage activé, le curseur clignote |
80 |
Forcer le curseur au début de la première ligne |
C0 |
Forcer le curseur au début de la deuxième ligne |
38 |
2 lignes et matrice 5 × 7 |
83 |
Curseur ligne 1 position 3 |
3C |
Activer la deuxième ligne |
08 |
Affichage OFF, curseur OFF |
C1 |
Aller à la deuxième ligne, position 1 |
OC |
Affichage ON, curseur OFF |
C1 |
Aller à la deuxième ligne, position 1 |
C2 |
Aller à la deuxième ligne, position 2 |
Schéma de circuit et explication
Le schéma de circuit pour l' interface LCD avec le microcontrôleur 8051 est illustré dans la figure ci-dessus. Si vous avez une compréhension de base du 8051, vous devez connaître EA (PIN 31), XTAL1 & XTAL2, la broche RST (PIN 9), Vcc et la broche de masse du microcontrôleur 8051. J'ai utilisé ces broches dans le circuit ci-dessus. Si vous n'avez aucune idée à ce sujet, je vous recommande de lire cet article Interfaçage des LED avec le microcontrôleur 8051 avant de passer par l'interface LCD.
Donc, en plus de ces broches ci-dessus, nous avons connecté les broches de données (D0-D7) de l'écran LCD au microcontrôleur du port 2 (P2_0 - P2_7). Et contrôlez les broches RS, RW et E sur la broche 12, 13, 14 (broche 2, 3, 4 du port 3) du microcontrôleur respectivement.
La broche 2 (VDD) et la broche 15 (alimentation du rétroéclairage) de l'écran LCD sont connectées à la tension (5v), et la broche 1 (VSS) et la broche 16 (masse du rétroéclairage) sont connectées à la terre.
La broche 3 (V0) est connectée à la tension (Vcc) via une résistance variable de 10k pour régler le contraste de l'écran LCD. La jambe médiane de la résistance variable est connectée à la broche 3 et les deux autres jambes sont connectées à l'alimentation en tension et à la terre.
Explication du code
J'ai essayé d'expliquer le code par des commentaires (dans le code lui-même).
Comme je l'ai expliqué précédemment à propos du mode de commande et du mode de données, vous pouvez voir que lors de l'envoi de la commande (fonction lcd_cmd), nous avons défini RS = 0, RW = 0 et une impulsion HIGH à LOW est donnée à E en le rendant 1, puis 0. De plus, lors de l'envoi de données (fonction lcd_data) à l'écran LCD, nous avons mis RS = 1, RW = 0 et une impulsion HIGH à LOW est donnée à E en le faisant passer de 1 à 0. La fonction msdelay () a été créée pour créer un retard en millisecondes et appelé fréquemment dans le programme, il est appelé pour que le module LCD puisse avoir suffisamment de temps pour exécuter l'opération interne et les commandes.
Une boucle while a été créée pour imprimer la chaîne, qui appelle à chaque fois la fonction lcd_data pour imprimer un caractère jusqu'au dernier caractère (terminateur nul- '\ 0').
Nous avons utilisé la fonction lcd_init () pour préparer l'écran LCD en utilisant les instructions de commande prédéfinies (expliquées ci-dessus).