- Fonctionnement de l'écran LCD 16x2
- Schéma de circuit pour l'interface LCD avec le microcontrôleur STM8
- Bibliothèque LCD STM8 - Fichier d'en-tête pour STM8S103F3P6
- Programme LCD pour microcontrôleur STM8S
- STM8 avec LCD - Fonctionnement
L'écran LCD alphanumérique 16x2 est l'écran le plus couramment utilisé par les amateurs et les passionnés. L'affichage est très utile lorsque vous souhaitez afficher des informations de base à l'utilisateur et peut également aider à tester ou à déboguer notre code. Ce module LCD 16x2 particulier est facilement disponible et est populaire depuis longtemps. Vous pouvez en savoir plus sur les bases du module LCD 16x2 dans l'article lié.
Pour continuer avec notre série de didacticiels sur le microcontrôleur STM8, dans ce didacticiel, nous allons apprendre à interfacer un écran LCD avec le microcontrôleur STM8. Nous avons précédemment interfacé l'écran LCD 16x2 avec de nombreux autres microcontrôleurs, les tutoriels sont répertoriés ci-dessous et vous pouvez les vérifier si vous êtes intéressé.
Si vous êtes nouveau dans STM8, consultez l'article de démarrage avec le microcontrôleur STM8 pour comprendre les bases de la carte contrôleur et de l'environnement de programmation. Nous ne couvrirons pas les bases de ce tutoriel.
Fonctionnement de l'écran LCD 16x2
Comme son nom l'indique, un écran LCD 16x2 aura 16 colonnes et 2 lignes. Donc au total, nous pourrons afficher 32 caractères sur cet écran et ces caractères peuvent être des alphabets ou des chiffres ou même des symboles. Un simple brochage LCD 16x2 que nous utilisons dans ce tutoriel est illustré ci-dessous.
Comme vous pouvez le voir, l'écran a 16 broches et 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, comme indiqué dans le tableau ci-dessous. Nous entrerons dans les détails de chaque broche lorsque nous discuterons du schéma de circuit de ce tutoriel.
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 de 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 |
À l'arrière de l'écran LCD, comme le montre l'image ci-dessous, vous trouverez deux points noirs, à l'intérieur desquels se trouve le circuit intégré du pilote LCD HD44780 (entouré de rouge). Notre microcontrôleur doit communiquer avec ce CI qui à son tour contrôlera ce qui est affiché sur l'écran LCD. Si vous êtes curieux de savoir comment tout cela fonctionne exactement, vous devriez vérifier le fonctionnement de l'écran LCD 16x2 où nous avons déjà discuté en détail du fonctionnement de l'écran LCD.
Dans ce didacticiel, nous discuterons du schéma de circuit et du code pour afficher les caractères alphamériques (alphabets et nombres) sur un écran LCD 16x2 à l'aide de simples commandes LCD_print _char et LCD_print_string . Ces commandes peuvent être directement utilisées dans le programme après avoir inclus notre fichier d'en-tête. Le fichier d'en-tête traite de la plupart des choses pour vous, il n'est donc pas obligatoire de savoir comment fonctionne l'affichage ou le circuit intégré du pilote HD44780.
Schéma de circuit pour l'interface LCD avec le microcontrôleur STM8
Le circuit LCD STM8 complet peut être trouvé dans l'image ci-dessous. Comme vous pouvez le voir, la connexion du contrôleur STM8S103F3P6 avec écran LCD est très simple, nous avons l'écran LCD directement connecté à notre carte et le ST-link est également connecté pour programmer la carte.
Les broches d'alimentation Vss et Vcc sont connectées à la broche 5V sur la carte STM8S, notez que la tension de fonctionnement de l'écran LCD est de 5V et est connectée pour fonctionner sur 3,3V. Ainsi, même si le microcontrôleur STM8S103F3P6 fonctionne sur 3,3 V est obligatoire pour avoir une alimentation 5 V pour l'écran LCD, vous pouvez éviter cela en utilisant un contrôleur de charge IC, mais nous n'en discuterons pas dans ce tutoriel.
Ensuite, nous avons la broche de contraste qui sert à régler le contraste de l'écran LCD, nous l'avons connectée au potentiomètre afin de pouvoir contrôler le contraste. Nous avons utilisé un pot 10k, mais vous pouvez également utiliser d'autres valeurs à proximité, le pot agit comme un diviseur de potentiel pour fournir 0-5 V à la broche de contraste, généralement vous pouvez également utiliser une résistance directement pour fournir environ 2,2 V pour un contraste raisonnable valeur. Ensuite, nous avons les broches de réinitialisation (RS), de lecture / écriture (RW) et d'activation (E). La broche de lecture-écriture est mise à la terre car nous ne lirons rien de l'écran LCD, nous effectuerons uniquement des opérations d'écriture. Les deux autres broches de commande Rs et E sont connectées respectivement aux broches PA1 et PA2.
Ensuite, nous avons les broches de données DB0 à DB7. L'écran LCD 16x2 peut fonctionner dans deux modes, l'un est un mode de fonctionnement 8 bits où nous devons utiliser toutes les 8 broches de données (DB0-DB7) sur l'écran LCD et l'autre est le mode de fonctionnement 4 bits où nous n'avons besoin que de 4 broches de données (DB4-DB7). Le mode 4 bits est couramment utilisé car il nécessite moins de broches GPIO du contrôleur, nous avons donc également utilisé le mode 4 bits dans ce tutoriel et avons connecté uniquement les broches DB4, DB5, DB6 et DB7 aux broches PD1, PD2, PD3 et PD4 respectivement.
Les deux dernières broches BLA et BLK sont utilisées pour alimenter la LED de rétroéclairage interne, nous avons utilisé une résistance de 560 ohms comme résistance de limitation de courant. Le programmeur ST-Link est connecté comme toujours comme dans notre tutoriel précédent. J'ai effectué la connexion complète sur la maquette et ma configuration ressemble à celle illustrée dans l'image ci-dessous.
Bibliothèque LCD STM8 - Fichier d'en-tête pour STM8S103F3P6
Avant de procéder dans le schéma de circuit, récupérons le fichier d'en-tête LCD STM8 de GitHub en utilisant le lien suivant-
Fichier d'en-tête LCD STM8S 16x2
Vous pouvez soit télécharger le dépôt complet et obtenir le fichier stm8s103_LCD_16x2.h , soit simplement le code à partir du lien ci-dessus. Lors de la configuration du projet, assurez-vous d'inclure tous les fichiers d'en-tête requis dans le répertoire inc avec ce fichier d'en-tête.
Si vous ne savez pas comment ajouter les fichiers d'en-tête et compiler le programme, suivez la vidéo au bas de cette page. Et si vous êtes curieux de savoir comment fonctionne le code à l'intérieur du fichier d'en-tête, vous pouvez consulter le PIC avec un didacticiel LCD. Le fichier d'en-tête utilisé dans ce projet est très similaire à celui qui y est expliqué, nous n'entrerons donc pas dans les détails.
Programme LCD pour microcontrôleur STM8S
Pour la démonstration, nous programmerons notre contrôleur STM8S pour afficher une chaîne simple comme «Circuit Digest», puis nous incrémenterons une valeur «Test» pour chaque seconde dans la deuxième ligne. Le programme complet se trouve au bas de cette page. L'explication est la suivante.
Nous démarrons notre programme en définissant les broches et en ajoutant les fichiers d'en-tête requis comme toujours. Dans notre schéma de circuit décrit ci-dessus, nous avons connecté LCD_RS à PA1, nous l'avons donc défini comme LCD_RS GPIOA, GPIO_PIN_1. De même, nous avons fait la même chose pour d'autres broches. S'ils suivent un circuit différent, assurez-vous de modifier ces valeurs en conséquence.
#define LCD_RS GPIOA, GPIO_PIN_1 #define LCD_EN GPIOA, GPIO_PIN_2 #define LCD_DB4 GPIOD, GPIO_PIN_1 #define LCD_DB5 GPIOD, GPIO_PIN_2 #define LCD_DB6 GPIOD, GPIO_PIN_3
Ensuite, dans notre programme principal, nous avons déclaré les variables requises pour cet exemple de code. Nous avons une variable de test appelée test_var qui est initialisée à zéro, nous incrémenterons la variable et l'afficherons sur l'écran LCD. Les caractères d1 à d4 représentent les 4 chiffres de la variable de test car notre LCD ne peut pas afficher directement la valeur int, nous devons les convertir en caractères.
// Déclarations de variables int test_var = 0; char d4, d3, d2, d1;
La fonction LCD_Begin () est utilisée pour initialiser l'écran LCD. Cette fonction initialisera toutes les broches GPIO requises et mettra également l'écran LCD en mode LCD 16x2. Ensuite, nous avons la fonction LCD_Clear () qui est utilisée pour effacer toutes les valeurs sur l'écran LCD, cela effacera tout sur l'écran LCD afin qu'il soit propre d'écrire de nouvelles valeurs. Ensuite, nous avons la fonction LCD_Set_Cursor (x, y) où x et y sont les positions auxquelles nous devons écrire notre nouveau caractère. Par exemple, (1,1) signifie la première ligne et la première colonne, de même (2,12) signifie la deuxième ligne 12 colonne, de même. Notez que nous avons 2 lignes et 16 colonnes ici, comme nous l'avons vu précédemment.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Maintenant, l'écran LCD est réglé, effacé et le curseur est à l'endroit. La prochaine chose est d'imprimer quelque chose sur l'écran. Nous pouvons utiliser LCD_Print_String («Sample String») pour imprimer une chaîne sur l'écran LCD et LCD_Print_Char (a) pour imprimer une valeur de caractère sur l'écran LCD. Dans notre programme ici, nous avons imprimé «STM8S103F3P3 LCD» et créé un délai de 5 secondes en utilisant le code ci-dessous.
Lcd_Print_String ("LCD STM8S103F3P3"); delay_ms (5000);
Après le délai de 5 secondes, nous effaçons à nouveau l'écran LCD et affichons «Circuit Digest» dans la première ligne et «Test:» I la deuxième ligne.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String ("Résumé du circuit"); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Test:");
A l' intérieur du tout en boucle, nous diviser la valeur de la variable entière test_var en caractères individuels afin qu'il puisse être affiché sur l'écran LCD à l' aide des opérateurs de division simple et module. Nous avons également ajouté «0» pour convertir la valeur ASCII en caractère.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Ensuite, nous avons mis le curseur sur (2,6) car nous avons déjà écrit «Test:» dans la deuxième ligne qui fait 6 caractères. Si nous écrasons, le caractère existant sera remplacé par un nouveau caractère sur l'écran LCD. Nous avons également ajouté un délai de 1 seconde et incrémenter la variable.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); delay_ms (1000); test_var ++;
STM8 avec LCD - Fonctionnement
Pour tester notre programme, téléchargez simplement le code sur notre contrôleur et allumez-le avec le port micro-USB. Notez que l'écran LCD nécessite 5V pour fonctionner, il est donc obligatoire d'alimenter la carte à partir du port USB. Nous l'avons précédemment alimenté directement à partir de ST-link car nous n'avions pas besoin de l'alimentation 5V.
Comme vous pouvez le voir, l'écran LCD fonctionne comme prévu, la valeur de la variable de test étant incrémentée toutes les secondes environ. Notez également que nous n'avons pas utilisé de minuteries et que nous n'avons utilisé que la fonction de délai pour créer ce délai, alors ne vous attendez pas à ce que la durée du délai soit précise, nous utiliserons des minuteries plus tard dans un autre tutoriel à cette fin.
Le fonctionnement complet du projet peut être trouvé dans la vidéo ci-dessous. J'espère que vous avez apprécié le tutoriel et appris quelque chose d'utile. Si vous avez des questions, laissez-les dans la section commentaires ou utilisez nos forums pour d'autres questions techniques.