Imprimer
lcd4323
Bac STI2D

TP n°33 : Afficheur LCD

Noms :  
Centre d'intérêt : CI 2 Instrumentation / Acquisition et restitution de grandeurs physiques
Classe : Sti2d Sin
Id programme : sin15, sin31  
Conditions : Seul , durée  3 heures.
Matériel :

- PC
une carte Arduino Uno
- un shield "
clavier-lcd" 

Logiciels : - Arduino ide
- Utiliser le navigateur chrome
Document : 

Cours sur l'afficheur LCD

I. Objectifs

II. Présentation

 

Vous utiliserez la carte Arduino Uno avec un shield « LCD Keypad » de chez DFROBOT.

 Carte arduino Shield LCD

Ce shield est composée d'un afficheur LCD standard, de 5 boutons poussoirs et de quelques picots pour des entrées-sorties analogiques ou numériques. Le schéma de la carte shield LCD est le suivant :

 

 Schéma schield LCD

 

 

 III. L'afficheur LCD

 Répondre aux questions en vous aidant de la fiche de cours sur les afficheurs LCD.

 

 

Action

Code Hexa D7-D0

Inhiber l’afficheur (Display OFF)

 

Valider l’afficheur (Display ON) sans curseur ni clignotement

 

Ramener le curseur en haut à gauche (Return Home)

 

Effacer l’afficheur

 

Configurer l’afficheur :
8 bits, affichage sur une ligne, grands caractères

 

 

 

B

O

N

J

O

U

R

 

 

 

 

 

 

 

 

 Lorsque la mémoire est vide, elle contient des codes $FF, expliquer pourquoi l’afficheur affiche des rectangles noirs à la mise sous tension.

 

 

IV. Affectation des Entrées-sorties

Afin de faciliter l'écriture de nos programmes, nous allons nommer chacune des broches utilisées à l'aide de l'instruction « #define ». L'instruction #define est un élément très utile du langage C qui permet au programmeur de donner un nom à une constante avant que le programme soit compilé. Les constantes ainsi définie dans le langage Arduino ne prennent aucune place supplémentaire en mémoire dans le microcontrôleur. Le compilateur remplacera les références à ces constantes par la valeur définie au moment de la compilation.

 

Exemple pour la broche 8 nous écrirons : #define RS 8 // RS est connecté à D8

 

Ainsi il suffira d'écrire digitalWrite(RS,HIGH) pour placer un niveau haut sur cette broche 8. Ceci rend le programme plus lisible, il n'est pas nécessaire d'avoir en permanence le schéma structurel sous les yeux.

 

 

#define RS 8 // RS est connecté à D8, broche 8 de l'Arduino

#define E ___ // E est connecté à ____

#define D4 ___ // D4 est connecté à ____

#define D5 ___ // D5 est connecté à ____

#define D6 ___ // D6 est connecté à ____

#define D7 ___ // D7 est connecté à ____

 

V. Initialisation de l'afficheur

 

void setup()

{

/* brochage du microcontrôleur */

pinMode(RS, OUTPUT);

.......// à compléter pour les autres broches

 

/* initialisation de l'afficheur LCD */

envoiCommande(0x33); // initialisation

envoiCommande(0x....); // mode 4 bits

envoiCommande(0x....); // paramétrage 4bits, + d'une ligne, matrice 5x7

envoiCommande(0x....); // activation écran, pas de curseur, pas de clignotement

envoiCommande(0x....); // efface l'afficheur

envoiCommande(0x....); // ecriture de la gauche vers la droite sans activer le suivi de curseur

envoiCommande(0x....); // Return Home pour le curseur

}

 

VI. Envoi des octets

 

Pour spécifier l'adresse de la case où vous voulez démarrer l'affichage, vous devez envoyer l'instruction suivante avant d'envoyer vos caractères :

 

D7

D6

D5

D4

D3

D2

D1

D0

1

adresse de la case

 

 

 

exemple : l'appel de envoiCommande(0x81) place le curseur de l'afficheur sur la première ligne et le deuxième colonne car 0x81 = B10000001.

 

VII. Amélioration de la fonction afficheBonjour : utilisation des tableaux

La fonction afficheBonjour() a une structure très lourde, on répète souvent la même chose. Il faut trouver une autre manière de l'écrire, plus compacte.

Vous allez ranger les codes dans une table, encore appelée tableau, et aller les chercher en fonction d'un indice. Par exemple : message[0] = 'B' ('B' = code ASCII du caractère B)

message[0]

message[1]

message[2]

message[3]

message[4]

message[5]

message[6]

B

O

N

J

O

U

R

Ici le tableau s'appelle message, l'indice va de 0 à 6.

 

byte message[7]={'B','O','N','J','O','U','R'};

Cette ligne déclare un tableau de 7 caractères de type octet (byte). Les ' ' permettent de ne pas avoir à rechercher les codes ASCII des lettres : Le compilateur remplacera par exemple 'B' par 0x42.

Pour envoyer le message « BONJOUR » vers l'afficheur, nous utilisons alors une boucle for afin de parcourir le tableau. Voici le nouvel algorithme de la fonction afficheBonjour() ;

début

Pour i de 0 à 7

envoiCaractere(message[i]) // envoi de message[0] à message [6]

fin pour

envoiCommande(0x02) // Return Home pour le curseur

fin

 

 

VIII. Utilisation d'une bibliothèque

Maintenant que vous savez programmer l'afficheur LCD, vous allez découvrir une façon beaucoup plus simple de le commander, en utilisant une bibliothèque ou librairie (library en anglais). Les bibliothèques sont développées par les constructeurs de carte Arduino ou encore par des particuliers qui mettent à disposition leur programme afin de faciliter la programmation.

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, ); // brochage de RS, E, D4, D5, D6, D7

 

void setup() {

lcd.begin(16, 2); // afficheur de 16 lignes de 2 colonnes

lcd.print("hello, world!");

}

void loop() {

lcd.setCursor(0, 1); // curseur colonne 0 ligne 1

lcd.print(millis()/1000);

}

 

La première ligne du programme, #include <LiquidCrystal.h>, prévient le compilateur que vous allez utiliser la bibliothèque LiquidCrystal.h.

La ligne LiquidCrystal lcd(8, ); crée un objet appelé lcd de la classe LiquidCrystal en passant en paramètres le brochage de l'afficheur : RS, E, D4, D5, D6, D7.

 

 

Le contenu complet des fonctions écrites dans la bibliothèque LiquidCrystal est disponible à l'adresse http://arduino.cc/en/Reference/LiquidCrystal.

 

 

IX. Lire les Boutons-Poussoirs

L'objectif est d'écrire un programme de test du bon fonctionnement des boutons poussoirs de la carte shield. Le programme écrit sur l'afficheur LCD :

 

Les boutons poussoirs sont câblés sur l'entrée analogique A0. Le potentiel sur cette broche varie en fonction du bouton appuyé.

 

 Source : Lycée Le Dantec Lannion

Affichages : 1916