Comment connecter un écran LCD à Arduino
19 mai 2023
L'écran LCD (Liquid Crystal Display) est un écran couramment utilisé pour les projets Arduino, car il permet d'afficher facilement des informations telles que du texte et des caractères de base à l'utilisateur. Il s'agit d'un écran utile tant pour les débutants que pour les utilisateurs expérimentés, et c'est généralement l'un des premiers écrans utilisés par les personnes qui commencent à utiliser une carte Arduino.
Ce tutoriel vous montrera comment connecter et interagir entre un écran LCD 16x2 et une carte Arduino UNO à l'aide d'une communication série.
Les principes présentés dans ce tutoriel peuvent également s'appliquer à d'autres écrans LCD et cartes de développement. C'est parti !
LCD - Tutoriel Arduino - Table des matières
- Matériel et outils nécessaires
- Brochage LCD
- Brochage Arduino
- Circuit - schéma de connexion et schéma pour la communication SPI
- Exemple de code utilisant l'interface SPI
- Bonjour tout le monde !
- Afficher le texte sur la première et la deuxième ligne
- Afficher un texte long
- Blink - Afficher du texte avec un curseur clignotant
- Curseur + défilement automatique du texte
- Défilement automatique du texte
- Réglage du contraste de l'écran LCD
- Comment utiliser le rétroéclairage LCD
- Tableaux de caractères/polices
- Circuit - schéma de connexion et schéma pour la communication RS232 TTL
- Bonjour tout le monde ! Exemple de code utilisant l'interface RS232 TTL
- Dépannage de votre écran LCD - Projet Arduino
- Ressources supplémentaires
Matériel et outils nécessaires
Les écrans LCD sont disponibles en différentes tailles et configurations, mais le plus couramment utilisé est le LCD 16x2. Il comporte 2 lignes pouvant contenir 16 caractères chacune.
Nous utiliserons l'écran Newhaven 16x2 référence NHD-0216K3Z-NSW-BBW-V3, qui intègre un microcontrôleur PIC16F690. Cet écran LCD prend en charge trois interfaces série : I2C, SPI et RS-232 (TTL). Cet article se concentrera sur les interfaces SPI et RS-232 et fournira des exemples de code pour les deux.
Cet écran est disponible à l'achat ici. La fiche technique et les spécifications du produit peuvent être consultées ou téléchargées ici.
Veuillez noter que l'utilisation de l'interface SPI nécessite de souder une résistance à l'écran, contrairement à l'interface RS-232 TTL. Par conséquent, si vous préférez suivre ce tutoriel sans souder la résistance, vous pouvez suivre les instructions relatives à l'interface RS-232 TTL et la section contenant des exemples de code.
Ce dont vous aurez besoin pour connecter Arduino à un écran LCD
- Écran LCD 16x2
- Connecteur à broches à une rangée
- Arduino UNO
- planche à pain
- Fils de raccordement
- Soudure et fer à souder
- Câble USB A mâle vers B mâle (câble d'imprimante)
- IDE Arduino
- Résistance de 0 ohm (facultative - pour la communication SPI uniquement)
Nous vous recommandons de lire notre article de blog intitulé « Comment protéger les appareils électroniques contre les décharges électrostatiques » avant de vous lancer dans ce tutoriel, en particulier si vous êtes novice en matière d'électronique.
Brochage LCD 16x2
Le LCD Newhaven 16x2 caractères offre un moyen simple d'interagir avec la carte Arduino UNO à l'aide d'une communication série. Les broches du port P1 sont spécialement conçues pour la communication série RS232 TTL, tandis que celles du port P2 sont destinées à la communication série I2C et SPI.
Description des broches P1 - Communication RS232 TTL
| Numéro de broche | Symbole | Description de la fonction |
|---|---|---|
| 1 | RX | Entrée série RS-232 (TTL) |
| 2 | V SS | Sol |
| 3 | V DD | Tension d'alimentation (+5,0 V) |
Description des broches P2 - Communication SPI et I2C
| Numéro de broche | Symbole | Description de la fonction |
|---|---|---|
| 1 | SPISS | Sélection esclave SPI (NC en mode I2C) |
| 2 | SDO | Pas de connexion |
| 3 | SCK/SCL | Horloge série |
| 4 | SDI/SDA | Entrée de données série (SPI) / Données série (I2C) |
| 5 | V SS | Sol |
| 6 | V DD | Tension d'alimentation (+5,0 V) |
Les spécifications complètes du brochage LCD peuvent être consultées ici.
Brochage Arduino
La carte Arduino UNO dispose de 20 broches d'entrée/sortie, dont 14 broches numériques et 6 broches analogiques. Pour ce projet, nous utiliserons les broches 5V et GND des signaux d'alimentation, les broches 10, 11 et 12 pour SPI ou I2C, et la broche 7 pour RS232 TTL.
Le schéma complet du brochage de l'Arduino UNO peut être consulté ici.
Circuit - Schéma de connexion et schéma de communication SPI
L'interface périphérique série (SPI) est un bus de communication série synchrone utilisé pour les communications à courte distance et à haut débit entre plusieurs appareils. Le circuit de connexion pour la communication SPI entre l'Arduino (appareil maître) et l'écran LCD (appareil esclave) utilise cinq fils pour communiquer, comme décrit dans le tableau ci-dessous :
| Arduino | LCD | Type de connexion |
|---|---|---|
| Broche 5 V | Broche 6 : V DD | Puissance |
| Broche de terre | Broche 5 : Masse | Sol |
| Broche 10 : Sélection esclave | Broche 3 : SCK/SCL | Horloge série |
| Broche 11 : MISO | Broche 4 : Entrée de données série (SPI) / Données série (I2C) | Entrée de données série |
| Broche 12 : MOSI | Broche 1 : SPISS | Sélection d'esclave SPI |
Remarque :
Pour activer le SPI, R1 doit être ouvert et R2 doit être raccourci comme indiqué dans la fiche technique. De plus, avant de commencer, assurez-vous que l'Arduino est hors tension pendant le câblage du circuit.
Circuit de câblage SPI
Schéma de câblage SPI
Arduino - Exemple de code LCD utilisant l'interface SPI
Les exemples de code suivants montrent comment utiliser la communication série entre Arduino et un écran LCD 16x2 caractères à l'aide de l'interface SPI. Vous trouverez des commentaires utiles dans les exemples de code, mais analysons certaines des fonctions ci-dessous :
- Le
SPI_Out()La fonction envoie des commandes et des données à l'écran LCD via SPI. Pour ce faire, elle parcourt les 8 bits de l'octet d'entrée et envoie la valeur de chaque bit à l'écran LCD. - Le
Définir_Broches()La fonction configure les broches SPI comme broches de sortie. - Le
Définir_Contraste()Cette fonction permet de régler le contraste de l'écran LCD. - Le
Set_Backlight()Cette fonction permet de régler le rétroéclairage de l'écran LCD. - Le
Afficher_clair()La fonction efface l'écran LCD. - Le
Set_Cursor()Cette fonction active ou désactive le curseur clignotant sur l'écran LCD, en fonction du paramètre d'entrée. - Le
configuration()La fonction est la fonction principale et est exécutée une fois au démarrage de l'Arduino. Elle sert à initialiser les paramètres, les variables et à exécuter toutes les autres fonctions et configurations nécessaires au projet. - Le
boucle()La fonction s'exécute en boucle continue pendant toute la durée d'alimentation de la carte Arduino. Dans certains exemples ci-dessous, cette fonction est vide et ne fait rien, car nous avons seulement besoin d'exécuter certaines fonctions une seule fois.
Arduino - Exemples de code LCD utilisant SPI :
- Bonjour tout le monde !
- Afficher le texte sur la première et la deuxième ligne
- Afficher un texte long
- Afficher du texte avec un curseur clignotant
- Curseur + défilement automatique du texte
- Défilement automatique
- Contraste
- Rétroéclairage
- Tableaux de caractères/polices
Vous pouvez adapter et développer les exemples de code afin qu'ils répondent aux exigences spécifiques de votre projet basé sur Arduino.
Bonjour tout le monde !
L'exemple de code suivant affiche « Hello Word ! » sur l'écran LCD.
/* SPI Wiring Reference for: NHD-0216K3Z-NSW-BBW-V3
---------------------------
LCD | Arduino
---------------------------
1(SPISS) --> 12
2(SDO) --> No Connect
3(SCK) --> 10
4(SDA) --> 11
5(VSS) --> Ground
6(VDD) --> 5V
*/
/*****************************************************
Arduino pin definition
/*****************************************************/
#define SPISS_PIN 12
#define SDA_PIN 11
#define SCK_PIN 10
/*****************************************************
SPI function to send command and data.
For more information on SPI please visit our Support Center
/*****************************************************/
void SPI_Out(unsigned char a) {
digitalWrite(SPISS_PIN, LOW);
for (int n = 0; n < 8; n++) {
if ((a & 0x80) == 0x80) {
digitalWrite(SDA_PIN, HIGH);
delayMicroseconds(200);
}
else {
digitalWrite(SDA_PIN, LOW);
}
delayMicroseconds(200);
a = a << 1;
digitalWrite(SCK_PIN, LOW);
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
}
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
digitalWrite(SPISS_PIN, HIGH);
}
/*****************************************************
Set Arduino UNO IO ports as Output mode
/*****************************************************/
void Set_Pins() {
pinMode(SPISS_PIN, OUTPUT);
pinMode(SCK_PIN, OUTPUT);
pinMode(SDA_PIN, OUTPUT);
}
/*****************************************************
Set LCD Contrast
/*****************************************************/
void Set_Contrast() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x52); //contrast command
SPI_Out(0x28); //set contrast value
delayMicroseconds(500);
}
/*****************************************************
Set LCD Backlight
/*****************************************************/
void Set_Backlight() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x53); //backlight command
SPI_Out(0x08); //set backlight value
delayMicroseconds(100);
}
/*****************************************************
Clear LCD
/*****************************************************/
void Clear_Display() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x51); //clear display command
delayMicroseconds(1500);
}
/*****************************************************
Set cursor
Mode = 0 sets Blinking cursor off
Mode = 1 sets Blinking cursor on
/*****************************************************/
void Set_Cursor(int mode) {
SPI_Out(0xfe); //prefix command
if (mode == 0) {
SPI_Out(0x4c); //Blinking cursor off
}
else if (mode == 1) {
SPI_Out(0x4b); //Blinking cursor on
}
delayMicroseconds(100);
}
/*****************************************************
Write "Hello World!" to LCD
/*****************************************************/
void Hello_World() {
SPI_Out(0x48); // H
SPI_Out(0x65); // E
SPI_Out(0x6C); // l
SPI_Out(0x6C); // l
SPI_Out(0x6F); // o
SPI_Out(0x11); // Blank
SPI_Out(0x57); // W
SPI_Out(0x6f); // o
SPI_Out(0x72); // r
SPI_Out(0x6c); // l
SPI_Out(0x64); // d
SPI_Out(0x21); // !
}
/*****************************************************
Main function
/*****************************************************/
void setup() {
Set_Pins(); //set IO ports
Set_Cursor(0); //turns off blinking cursor
Set_Contrast(); //set display contrast
Set_Backlight(); //set display backlight
Clear_Display(); //clear display
Hello_World(); //display "Hello World!"
}
void loop() {
}
Afficher le texte sur la première et la deuxième ligne
Ce code affichera le texte « Première ligne » dans la première ligne et « Deuxième ligne » dans la deuxième ligne.
/*****************************************************
This code was written for the Arduino UNO using SPI Interface.
This code displays text in row one and row two of LCD.
/* SPI Wiring Reference for: NHD-0216K3Z-NSW-BBW-V3
---------------------------
LCD | Arduino
---------------------------
1(SPISS) --> 12
2(SDO) --> No Connect
3(SCK) --> 10
4(SDA) --> 11
5(VSS) --> Ground
6(VDD) --> 5V
*/
/*****************************************************
Arduino pin definition
/*****************************************************/
#define SPISS_PIN 12
#define SDA_PIN 11
#define SCK_PIN 10
/*****************************************************
SPI function to send command and data.
For more information on SPI please visit our Support Center
/*****************************************************/
void SPI_Out(unsigned char a) {
digitalWrite(SPISS_PIN, LOW);
for (int n = 0; n < 8; n++) {
if ((a & 0x80) == 0x80) {
digitalWrite(SDA_PIN, HIGH);
delayMicroseconds(200);
}
else {
digitalWrite(SDA_PIN, LOW);
}
delayMicroseconds(200);
a = a << 1;
digitalWrite(SCK_PIN, LOW);
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
}
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
digitalWrite(SPISS_PIN, HIGH);
}
/*****************************************************
Set Arduino UNO IO ports as Output mode
/*****************************************************/
void Set_Pins() {
pinMode(SPISS_PIN, OUTPUT);
pinMode(SCK_PIN, OUTPUT);
pinMode(SDA_PIN, OUTPUT);
}
/*****************************************************
Set LCD Contrast
/*****************************************************/
void Set_Contrast() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x52); //contrast command
SPI_Out(0x28); //set contrast value
delayMicroseconds(500);
}
/*****************************************************
Set LCD Backlight
/*****************************************************/
void Set_Backlight() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x53); //backlight command
SPI_Out(0x08); //set backlight value
delayMicroseconds(100);
}
/*****************************************************
Clear LCD
/*****************************************************/
void Clear_Display() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x51); //clear display command
delayMicroseconds(1500);
}
/*****************************************************
Write "First Line" to row one on LCD
/*****************************************************/
void Send_First_Line_Text() {
SPI_Out(0x46); // F
SPI_Out(0x69); // i
SPI_Out(0x72); // r
SPI_Out(0x73); // s
SPI_Out(0x74); // t
SPI_Out(0x20); // blank space
SPI_Out(0x6c); // l
SPI_Out(0x69); // i
SPI_Out(0x6e); // n
SPI_Out(0x65); // e
}
/*****************************************************
Write "Second Line" to row two on LCD
/*****************************************************/
void Send_Second_Line_Text() {
SPI_Out(0x53); // S
SPI_Out(0x65); // e
SPI_Out(0x63); // c
SPI_Out(0x6f); // o
SPI_Out(0x6e); // n
SPI_Out(0x64); // d
SPI_Out(0x20); // blank space
SPI_Out(0x6c); // l
SPI_Out(0x69); // i
SPI_Out(0x6e); // n
SPI_Out(0x65); // e
}
/*****************************************************
Set Row address
Line = 1 sets for first row
Line = 2 sets for second row
/*****************************************************/
void Set_Row(int line) {
SPI_Out(0xfe); //prefix command
SPI_Out(0x45); //set cursor command
if (line == 1) {
SPI_Out(0x00); //cursor position: row one, column one
}
else if (line == 2) {
SPI_Out(0x40); //cursor position: row two, column one
}
delayMicroseconds(100);
}
/*****************************************************
Main function
/*****************************************************/
void setup() {
Set_Pins(); //set IO ports
Set_Contrast(); //set display contrast
Set_Backlight(); //set display backlight
Clear_Display(); //clear display
Set_Row(1);
Send_First_Line_Text(); //writes to first line of display
Set_Row(2);
Send_Second_Line_Text(); //writes to second line of display
delay(1000);
}
void loop() {
}
Afficher un texte long
Ce code affiche du texte qui s'étend sur la deuxième ligne. Pour cet exemple, nous afficherons le texte «NHD-0216K3Z-NSW-BBW-V3 ».
/*****************************************************
This code displays the part number: NHD-0216K3Z-NSW-BBW-V3.
/* SPI Wiring Reference for: NHD-0216K3Z-NSW-BBW-V3
---------------------------
LCD | Arduino
---------------------------
1(SPISS) --> 12
2(SDO) --> No Connect
3(SCK) --> 10
4(SDA) --> 11
5(VSS) --> Ground
6(VDD) --> 5V
*/
/*****************************************************
Arduino pin definition
/*****************************************************/
#define SPISS_PIN 12
#define SDA_PIN 11
#define SCK_PIN 10
/*****************************************************
SPI function to send command and data.
For more information on SPI please visit our Support Center
/*****************************************************/
void SPI_Out(unsigned char a) {
digitalWrite(SPISS_PIN, LOW);
for (int n = 0; n < 8; n++) {
if ((a & 0x80) == 0x80) {
digitalWrite(SDA_PIN, HIGH);
delayMicroseconds(200);
}
else {
digitalWrite(SDA_PIN, LOW);
}
delayMicroseconds(200);
a = a << 1;
digitalWrite(SCK_PIN, LOW);
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
}
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
digitalWrite(SPISS_PIN, HIGH);
}
/*****************************************************
Set Arduino UNO IO ports as Output mode
/*****************************************************/
void Set_Pins() {
pinMode(SPISS_PIN, OUTPUT);
pinMode(SCK_PIN, OUTPUT);
pinMode(SDA_PIN, OUTPUT);
}
/*****************************************************
Set LCD Contrast
/*****************************************************/
void Set_Contrast() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x52); //contrast command
SPI_Out(0x28); //set contrast value
delayMicroseconds(500);
}
/*****************************************************
Set LCD Backlight
/*****************************************************/
void Set_Backlight() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x53); //backlight command
SPI_Out(0x08); //set backlight value
delayMicroseconds(100);
}
/*****************************************************
Clear LCD
/*****************************************************/
void Clear_Display() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x51); //clear display command
delayMicroseconds(1500);
}
/*****************************************************
Set cursor
Mode = 0 sets Blinking cursor off
Mode = 1 sets Blinking cursor on
/*****************************************************/
void Set_Cursor(int mode) {
SPI_Out(0xfe); //prefix command
if (mode == 0) {
SPI_Out(0x4c); //Blinking cursor off
}
else if (mode == 1) {
SPI_Out(0x4b); //Blinking cursor on
}
delayMicroseconds(100);
}
/*****************************************************
Set Row address
Line = 1 sets for first row
Line = 2 sets for second row
/*****************************************************/
void Set_Row(int line) {
SPI_Out(0xfe); //prefix command
SPI_Out(0x45); //set cursor command
if (line == 1) {
SPI_Out(0x00); //cursor position: row one, column one
}
else if (line == 2) {
SPI_Out(0x40); //cursor position: row two, column one
}
delayMicroseconds(100);
}
/*****************************************************
Write "NHD-0216K3Z-NSW-BBW-V3" to LCD
/*****************************************************/
void Part_Number() {
Set_Row(1);
SPI_Out(0x4e); // N
SPI_Out(0x48); // H
SPI_Out(0x44); // D
SPI_Out(0xb0); // -
SPI_Out(0x30); // 0
SPI_Out(0x32); // 2
SPI_Out(0x31); // 1
SPI_Out(0x36); // 6
SPI_Out(0x4b); // K
SPI_Out(0x33); // 3
SPI_Out(0x5a); // Z
SPI_Out(0xb0); // -
SPI_Out(0x4e); // N
SPI_Out(0x53); // S
SPI_Out(0x57); // W
SPI_Out(0xb0); // -
Set_Row(2);
SPI_Out(0x42); // B
SPI_Out(0x42); // B
SPI_Out(0x57); // W
SPI_Out(0xb0); // -
SPI_Out(0x56); // V
SPI_Out(0x33); // 3
}
/*****************************************************
Main function
/*****************************************************/
void setup() {
Set_Pins(); //set IO ports
Set_Cursor(0); //turns off blinking cursor
Set_Contrast(); //set display contrast
Set_Backlight(); //set display backlight
Clear_Display(); //clear display
Part_Number(); //display "NHD-0216K3Z-NSW-BBW-V3"
}
void loop() {
}
Blink - Afficher du texte avec un curseur clignotant
Ce code affiche du texte avec un curseur clignotant. Pour cet exemple, nous afficherons le texte «NHD-0216K3Z-NSW-BBW-V3 ».
/*****************************************************
This code displays the part number: NHD-0216K3Z-NSW-BBW-V3 with cursor on.
/* SPI Wiring Reference for: NHD-0216K3Z-NSW-BBW-V3
---------------------------
LCD | Arduino
---------------------------
1(SPISS) --> 12
2(SDO) --> No Connect
3(SCK) --> 10
4(SDA) --> 11
5(VSS) --> Ground
6(VDD) --> 5V
*/
/*****************************************************
Arduino pin definition
/*****************************************************/
#define SPISS_PIN 12
#define SDA_PIN 11
#define SCK_PIN 10
/*****************************************************
SPI function to send command and data.
For more information on SPI please visit our Support Center
/*****************************************************/
void SPI_Out(unsigned char a) {
digitalWrite(SPISS_PIN, LOW);
for (int n = 0; n < 8; n++) {
if ((a & 0x80) == 0x80) {
digitalWrite(SDA_PIN, HIGH);
delayMicroseconds(200);
}
else {
digitalWrite(SDA_PIN, LOW);
}
delayMicroseconds(200);
a = a << 1;
digitalWrite(SCK_PIN, LOW);
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
}
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
digitalWrite(SPISS_PIN, HIGH);
}
/*****************************************************
Set Arduino UNO IO ports as Output mode
/*****************************************************/
void Set_Pins() {
pinMode(SPISS_PIN, OUTPUT);
pinMode(SCK_PIN, OUTPUT);
pinMode(SDA_PIN, OUTPUT);
}
/*****************************************************
Set LCD Contrast
/*****************************************************/
void Set_Contrast() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x52); //contrast command
SPI_Out(0x28); //set contrast value
delayMicroseconds(500);
}
/*****************************************************
Set LCD Backlight
/*****************************************************/
void Set_Backlight() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x53); //backlight command
SPI_Out(0x08); //set backlight value
delayMicroseconds(100);
}
/*****************************************************
Clear LCD
/*****************************************************/
void Clear_Display() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x51); //clear display command
delayMicroseconds(1500);
}
/*****************************************************
Set cursor
Mode = 0 sets Blinking cursor off
Mode = 1 sets Blinking cursor on
/*****************************************************/
void Set_Cursor(int mode) {
SPI_Out(0xfe); //prefix command
if (mode == 0) {
SPI_Out(0x4c); //Blinking cursor off
}
else if (mode == 1) {
SPI_Out(0x4b); //Blinking cursor on
}
delayMicroseconds(100);
}
/*****************************************************
Set Row address
Line = 1 sets for first row
Line = 2 sets for second row
/*****************************************************/
void Set_Row(int line) {
SPI_Out(0xfe); //prefix command
SPI_Out(0x45); //set cursor command
if (line == 1) {
SPI_Out(0x00); //cursor position: row one, column one
}
else if (line == 2) {
SPI_Out(0x40); //cursor position: row two, column one
}
delayMicroseconds(100);
}
/*****************************************************
Write "NHD-0216K3Z-NSW-BBW-V3" to LCD
delay(500) = 500 Milliseconds
/*****************************************************/
void Part_Number() {
Set_Row(1);
SPI_Out(0x4e); // N
delay(500);
SPI_Out(0x48); // H
delay(500);
SPI_Out(0x44); // D
delay(500);
SPI_Out(0xb0); // -
delay(500);
SPI_Out(0x30); // 0
delay(500);
SPI_Out(0x32); // 2
delay(500);
SPI_Out(0x31); // 1
delay(500);
SPI_Out(0x36); // 6
delay(500);
SPI_Out(0x4b); // K
delay(500);
SPI_Out(0x33); // 3
delay(500);
SPI_Out(0x5a); // Z
delay(500);
SPI_Out(0xb0); // -
delay(500);
SPI_Out(0x4e); // N
delay(500);
SPI_Out(0x53); // S
delay(500);
SPI_Out(0x57); // W
delay(500);
SPI_Out(0xb0); // -
Set_Row(2);
delay(500);
SPI_Out(0x42); // B
delay(500);
SPI_Out(0x42); // B
delay(500);
SPI_Out(0x57); // W
delay(500);
SPI_Out(0xb0); // -
delay(500);
SPI_Out(0x56); // V
delay(500);
SPI_Out(0x33); // 3
}
/*****************************************************
Main function
/*****************************************************/
void setup() {
Set_Pins(); //set IO ports
Set_Contrast(); //set display contrast
Set_Backlight(); //set display backlight
Clear_Display(); //clear display
Set_Cursor(1); //turns on blinking cursor
Part_Number(); //display "NHD-0216K3Z-NSW-BBW-V3"
}
void loop() {
}
Curseur + défilement automatique du texte
Ce code affiche d'abord le texte avec le curseur dessus, puis initialise le défilement automatique vers la droite.
/*****************************************************
This code was written for the Arduino UNO using SPI Interface.
This code displays the part number: NHD-0216K3Z-NSW-BBW-V3 while shifting to the right with a blinking cursor.
/* SPI Wiring Reference for: NHD-0216K3Z-NSW-BBW-V3
---------------------------
LCD | Arduino
---------------------------
1(SPISS) --> 12
2(SDO) --> No Connect
3(SCK) --> 10
4(SDA) --> 11
5(VSS) --> Ground
6(VDD) --> 5V
*/
/*****************************************************
Arduino pin definition
/*****************************************************/
#define SPISS_PIN 12
#define SDA_PIN 11
#define SCK_PIN 10
/*****************************************************
SPI function to send command and data.
For more information on SPI please visit our Support Center
/*****************************************************/
void SPI_Out(unsigned char a) {
digitalWrite(SPISS_PIN, LOW);
for (int n = 0; n < 8; n++) {
if ((a & 0x80) == 0x80) {
digitalWrite(SDA_PIN, HIGH);
delayMicroseconds(200);
}
else {
digitalWrite(SDA_PIN, LOW);
}
delayMicroseconds(200);
a = a << 1;
digitalWrite(SCK_PIN, LOW);
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
}
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
digitalWrite(SPISS_PIN, HIGH);
}
/*****************************************************
Set Arduino UNO IO ports as Output mode
/*****************************************************/
void Set_Pins() {
pinMode(SPISS_PIN, OUTPUT);
pinMode(SCK_PIN, OUTPUT);
pinMode(SDA_PIN, OUTPUT);
}
/*****************************************************
Set LCD Contrast
/*****************************************************/
void Set_Contrast() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x52); //contrast command
SPI_Out(0x28); //set contrast value
delayMicroseconds(500);
}
/*****************************************************
Set LCD Backlight
/*****************************************************/
void Set_Backlight() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x53); //backlight command
SPI_Out(0x08); //set backlight value
delayMicroseconds(100);
}
/*****************************************************
Clear LCD
/*****************************************************/
void Clear_Display() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x51); //clear display command
delayMicroseconds(1500);
}
/*****************************************************
Set cursor
Mode = 0 sets Blinking cursor off
Mode = 1 sets Blinking cursor on
/*****************************************************/
void Set_Cursor(int mode) {
SPI_Out(0xfe); //prefix command
if (mode == 0) {
SPI_Out(0x4c); //Blinking cursor off
}
else if (mode == 1) {
SPI_Out(0x4b); //Blinking cursor on
}
delayMicroseconds(100);
}
/*****************************************************
Set Row address
Line = 1 sets for first row
Line = 2 sets for second row
/*****************************************************/
void Set_Row(int line) {
SPI_Out(0xfe); //prefix command
SPI_Out(0x45); //set cursor command
if (line == 1) {
SPI_Out(0x00); //cursor position: row one, column one
}
else if (line == 2) {
SPI_Out(0x40); //cursor position: row two, column one
}
delayMicroseconds(100);
}
/*****************************************************
Write "NHD-0216K3Z-NSW-BBW-V3" to LCD
/*****************************************************/
void Part_Number() {
Set_Row(1);
SPI_Out(0x4e); // N
SPI_Out(0x48); // H
SPI_Out(0x44); // D
SPI_Out(0xb0); // -
SPI_Out(0x30); // 0
SPI_Out(0x32); // 2
SPI_Out(0x31); // 1
SPI_Out(0x36); // 6
SPI_Out(0x4b); // K
SPI_Out(0x33); // 3
SPI_Out(0x5a); // Z
SPI_Out(0xb0); // -
SPI_Out(0x4e); // N
SPI_Out(0x53); // S
SPI_Out(0x57); // W
SPI_Out(0xb0); // -
Set_Row(2);
SPI_Out(0x42); // B
SPI_Out(0x42); // B
SPI_Out(0x57); // W
SPI_Out(0xb0); // -
SPI_Out(0x56); // V
SPI_Out(0x33); // 3
}
/*****************************************************
Set Shifting mode
Mode = 0 Move display one place to the left
Mode = 1 Move display one place to the right
delay(500) = 500 Milliseconds
/*****************************************************/
void Set_Shift(int mode) {
SPI_Out(0xfe); //prefix command
if (mode == 0) {
SPI_Out(0x55); //Move display one place to the left
}
else if (mode == 1) {
SPI_Out(0x56); //Move display one place to the right
}
delay(500);
}
/*****************************************************
Main function
/*****************************************************/
void setup() {
Set_Pins(); //set IO ports
Set_Contrast(); //set display contrast
Set_Backlight(); //set display backlight
Clear_Display(); //clear display
Set_Cursor(1); //turns on blinking cursor
Part_Number(); //display "NHD-0216K3Z-NSW-BBW-V3"
}
/*****************************************************
Loop function
/*****************************************************/
void loop() {
Set_Shift(1); //shift display to the right
}
Défilement automatique du texte
Ce code fait défiler automatiquement le texte «NHD-0216K3Z-NSW-BBW-V3 ».
/*****************************************************
This code was written for the Arduino UNO using SPI Interface.
This code displays the part number: NHD-0216K3Z-NSW-BBW-V3 while shifting to the right.
/* SPI Wiring Reference for: NHD-0216K3Z-NSW-BBW-V3
---------------------------
LCD | Arduino
---------------------------
1(SPISS) --> 12
2(SDO) --> No Connect
3(SCK) --> 10
4(SDA) --> 11
5(VSS) --> Ground
6(VDD) --> 5V
*/
/*****************************************************
Arduino pin definition
/*****************************************************/
#define SPISS_PIN 12
#define SDA_PIN 11
#define SCK_PIN 10
/*****************************************************
SPI function to send command and data.
For more information on SPI please visit our Support Center
/*****************************************************/
void SPI_Out(unsigned char a) {
digitalWrite(SPISS_PIN, LOW);
for (int n = 0; n < 8; n++) {
if ((a & 0x80) == 0x80) {
digitalWrite(SDA_PIN, HIGH);
delayMicroseconds(200);
}
else {
digitalWrite(SDA_PIN, LOW);
}
delayMicroseconds(200);
a = a << 1;
digitalWrite(SCK_PIN, LOW);
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
}
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
digitalWrite(SPISS_PIN, HIGH);
}
/*****************************************************
Set Arduino UNO IO ports as Output mode
/*****************************************************/
void Set_Pins() {
pinMode(SPISS_PIN, OUTPUT);
pinMode(SCK_PIN, OUTPUT);
pinMode(SDA_PIN, OUTPUT);
}
/*****************************************************
Set LCD Contrast
/*****************************************************/
void Set_Contrast() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x52); //contrast command
SPI_Out(0x28); //set contrast value
delayMicroseconds(500);
}
/*****************************************************
Set LCD Backlight
/*****************************************************/
void Set_Backlight() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x53); //backlight command
SPI_Out(0x08); //set backlight value
delayMicroseconds(100);
}
/*****************************************************
Clear LCD
/*****************************************************/
void Clear_Display() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x51); //clear display command
delayMicroseconds(1500);
}
/*****************************************************
Set cursor
Mode = 0 sets Blinking cursor off
Mode = 1 sets Blinking cursor on
/*****************************************************/
void Set_Cursor(int mode) {
SPI_Out(0xfe); //prefix command
if (mode == 0) {
SPI_Out(0x4c); //Blinking cursor off
}
else if (mode == 1) {
SPI_Out(0x4b); //Blinking cursor on
}
delayMicroseconds(100);
}
/*****************************************************
Set Row address
Line = 1 sets for first row
Line = 2 sets for second row
/*****************************************************/
void Set_Row(int line) {
SPI_Out(0xfe); //prefix command
SPI_Out(0x45); //set cursor command
if (line == 1) {
SPI_Out(0x00); //cursor position: row one, column one
}
else if (line == 2) {
SPI_Out(0x40); //cursor position: row two, column one
}
delayMicroseconds(100);
}
/*****************************************************
Write "NHD-0216K3Z-NSW-BBW-V3" to LCD
/*****************************************************/
void Part_Number() {
Set_Row(1);
SPI_Out(0x4e); // N
SPI_Out(0x48); // H
SPI_Out(0x44); // D
SPI_Out(0xb0); // -
SPI_Out(0x30); // 0
SPI_Out(0x32); // 2
SPI_Out(0x31); // 1
SPI_Out(0x36); // 6
SPI_Out(0x4b); // K
SPI_Out(0x33); // 3
SPI_Out(0x5a); // Z
SPI_Out(0xb0); // -
SPI_Out(0x4e); // N
SPI_Out(0x53); // S
SPI_Out(0x57); // W
SPI_Out(0xb0); // -
Set_Row(2);
SPI_Out(0x42); // B
SPI_Out(0x42); // B
SPI_Out(0x57); // W
SPI_Out(0xb0); // -
SPI_Out(0x56); // V
SPI_Out(0x33); // 3
}
/*****************************************************
Set Shifting mode
Mode = 0 Move display one place to the left
Mode = 1 Move display one place to the right
delay(500) = 500 Milliseconds
/*****************************************************/
void Set_Shift(int mode) {
SPI_Out(0xfe); //prefix command
if (mode == 0) {
SPI_Out(0x55); //Move display one place to the left
}
else if (mode == 1) {
SPI_Out(0x56); //Move display one place to the right
}
delay(500);
}
/*****************************************************
Main function
/*****************************************************/
void setup() {
Set_Pins(); //set IO ports
Set_Contrast(); //set display contrast
Set_Backlight(); //set display backlight
Clear_Display(); //clear display
Set_Cursor(0); //turns off blinking cursor
Part_Number(); //display "NHD-0216K3Z-NSW-BBW-V3"
}
/*****************************************************
Loop function
/*****************************************************/
void loop() {
Set_Shift(1); //shift display to the right
}
Réglage du contraste de l'écran LCD
Ce code affiche le texte «NHD-0216K3Z-NSW-BBW-V3 » tout en modifiant le contraste.
/*****************************************************
This code was written for the Arduino UNO using SPI Interface.
This code displays the part number: NHD-0216K3Z-NSW-BBW-V3 while changing the contrast.
/* SPI Wiring Reference for: NHD-0216K3Z-NSW-BBW-V3
---------------------------
LCD | Arduino
---------------------------
1(SPISS) --> 12
2(SDO) --> No Connect
3(SCK) --> 10
4(SDA) --> 11
5(VSS) --> Ground
6(VDD) --> 5V
*/
/*****************************************************
Arduino pin definition
/*****************************************************/
#define SPISS_PIN 12
#define SDA_PIN 11
#define SCK_PIN 10
/*****************************************************
SPI function to send command and data.
For more information on SPI please visit our Support Center
/*****************************************************/
void SPI_Out(unsigned char a) {
digitalWrite(SPISS_PIN, LOW);
for (int n = 0; n < 8; n++) {
if ((a & 0x80) == 0x80) {
digitalWrite(SDA_PIN, HIGH);
delayMicroseconds(200);
}
else {
digitalWrite(SDA_PIN, LOW);
}
delayMicroseconds(200);
a = a << 1;
digitalWrite(SCK_PIN, LOW);
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
}
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
digitalWrite(SPISS_PIN, HIGH);
}
/*****************************************************
Set Arduino UNO IO ports as Output mode
/*****************************************************/
void Set_Pins() {
pinMode(SPISS_PIN, OUTPUT);
pinMode(SCK_PIN, OUTPUT);
pinMode(SDA_PIN, OUTPUT);
}
/*****************************************************
Set LCD Contrast
/*****************************************************/
void Set_Contrast() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x52); //contrast command
SPI_Out(0x32); //set contrast value
delayMicroseconds(500);
}
/*****************************************************
Set LCD Backlight
/*****************************************************/
void Set_Backlight() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x53); //backlight command
SPI_Out(0x08); //set backlight value
delayMicroseconds(100);
}
/*****************************************************
Clear LCD
/*****************************************************/
void Clear_Display() {
SPI_Out(0xFE); //prefix command
SPI_Out(0x51); //clear display command
delayMicroseconds(1500);
}
/*****************************************************
Set cursor
Mode = 0 sets Blinking cursor off
Mode = 1 sets Blinking cursor on
/*****************************************************/
void Set_Cursor(int mode) {
SPI_Out(0xfe); //prefix command
if (mode == 0) {
SPI_Out(0x4c); //Blinking cursor off
}
else if (mode == 1) {
SPI_Out(0x4b); //Blinking cursor on
}
delayMicroseconds(100);
}
/*****************************************************
Set Row address
Line = 1 sets for first row
Line = 2 sets for second row
/*****************************************************/
void Set_Row(int line) {
SPI_Out(0xfe); //prefix command
SPI_Out(0x45); //set cursor command
if (line == 1) {
SPI_Out(0x00); //cursor position: row one, column one
}
else if (line == 2) {
SPI_Out(0x40); //cursor position: row two, column one
}
delayMicroseconds(100);
}
/*****************************************************
Write "NHD-0216K3Z-NSW-BBW-V3" to LCD
/*****************************************************/
void Part_Number() {
Set_Row(1);
SPI_Out(0x4e); // N
SPI_Out(0x48); // H
SPI_Out(0x44); // D
SPI_Out(0xb0); // -
SPI_Out(0x30); // 0
SPI_Out(0x32); // 2
SPI_Out(0x31); // 1
SPI_Out(0x36); // 6
SPI_Out(0x4b); // K
SPI_Out(0x33); // 3
SPI_Out(0x5a); // Z
SPI_Out(0xb0); // -
SPI_Out(0x4e); // N
SPI_Out(0x53); // S
SPI_Out(0x57); // W
SPI_Out(0xb0); // -
Set_Row(2);
SPI_Out(0x42); // B
SPI_Out(0x42); // B
SPI_Out(0x57); // W
SPI_Out(0xb0); // -
SPI_Out(0x56); // V
SPI_Out(0x33); // 3
}
/*****************************************************
Function to:
- change contrast from highest --> lowest
- change contrast from lowest --> highest
delay(100) = 100 Milliseconds
/*****************************************************/
void Contrast_Cycle() {
for (int x = 50; x >= 0; x--) {
SPI_Out(0xFE); //High to Low contrast loop
SPI_Out(0x52);
SPI_Out(x);
delay(100);
}
for (int x = 0; x <= 50; x++) {
SPI_Out(0xFE); //Low to High contrats loop
SPI_Out(0x52);
SPI_Out(x);
delay(100);
}
}
/*****************************************************
Main function
/*****************************************************/
void setup() {
Set_Pins(); //set IO ports
Set_Contrast(); //set display contrast
Set_Backlight(); //set display backlight
Clear_Display(); //clear display
Set_Cursor(0); //turns off blinking cursor
Part_Number(); //display "NHD-0216K3Z-NSW-BBW-V3"
}
/*****************************************************
Loop function
/*****************************************************/
void loop() {
Contrast_Cycle(); //cycle through contrast
}
Comment utiliser le rétroéclairage LCD
Il existe différentes méthodes pour contrôler ou régler le rétroéclairage de l'écran LCD. Les deux méthodes les plus courantes pour contrôler ou régler le rétroéclairage de l'écran LCD sont l'utilisation d'une commande ou d'un potentiomètre.
Pour nos écrans en série tels que le NHD-0216K3Z-NSW-BBW-V3, le rétroéclairage peut être contrôlé via une commande. Le Backlight_loop() Cette fonction règle la luminosité du rétroéclairage de la valeur la plus élevée à la plus faible, puis de la plus faible à la plus élevée, dans une boucle constante.
Le code ci-dessous affiche le texte «NHD-0216K3Z-NSW-BBW-V3 » tout en modifiant l'intensité du rétroéclairage.
/*****************************************************
This code was written for the Arduino UNO using SPI Interface.
This code displays the part number: NHD-0216K3Z-NSW-BBW-V3 while changing the backlight.
/* SPI Wiring Reference for: NHD-0216K3Z-NSW-BBW-V3
---------------------------
LCD | Arduino
---------------------------
1(SPISS) --> 12
2(SDO) --> No Connect
3(SCK) --> 10
4(SDA) --> 11
5(VSS) --> Ground
6(VDD) --> 5V
*/
/*****************************************************
Arduino pin definition
/*****************************************************/
#define SPISS_PIN 12
#define SDA_PIN 11
#define SCK_PIN 10
/*****************************************************
SPI function to send command and data.
For more information on SPI please visit our Support Center
/*****************************************************/
void SPI_OUT(unsigned char a) {
digitalWrite(SPISS_PIN, LOW);
for (int n = 0; n < 8; n++) {
if ((a & 0x80) == 0x80) {
digitalWrite(SDA_PIN, HIGH);
delayMicroseconds(200);
}
else {
digitalWrite(SDA_PIN, LOW);
}
delayMicroseconds(200);
a = a << 1;
digitalWrite(SCK_PIN, LOW);
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
}
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
digitalWrite(SPISS_PIN, HIGH);
}
/*****************************************************
Set Arduino UNO IO ports as Output mode
/*****************************************************/
void Set_Pins() {
pinMode(SPISS_PIN, OUTPUT);
pinMode(SCK_PIN, OUTPUT);
pinMode(SDA_PIN, OUTPUT);
}
/*****************************************************
Set LCD Contrast
/*****************************************************/
void Set_Contrast() {
SPI_OUT(0xFE); //prefix command
SPI_OUT(0x52); //contrast command
SPI_OUT(0x28); //set contrast value
delayMicroseconds(500);
}
/*****************************************************
Set LCD Backlight
/*****************************************************/
void Set_Backlight() {
SPI_OUT(0xFE); //prefix command
SPI_OUT(0x53); //backlight command
SPI_OUT(0x08); //set backlight value
delayMicroseconds(100);
}
/*****************************************************
Clear LCD
/*****************************************************/
void Clear_Display() {
SPI_OUT(0xFE); //prefix command
SPI_OUT(0x51); //clear display command
delayMicroseconds(1500);
}
/*****************************************************
Set cursor
Mode = 0 sets Blinking cursor off
Mode = 1 sets Blinking cursor on
/*****************************************************/
void Set_Cursor(int mode) {
SPI_OUT(0xfe); //prefix command
if (mode == 0) {
SPI_OUT(0x4c); //Blinking cursor off
}
else if (mode == 1) {
SPI_OUT(0x4b); //Blinking cursor on
}
delayMicroseconds(100);
}
/*****************************************************
Set Row address
Line = 1 sets for first row
Line = 2 sets for second row
/*****************************************************/
void Set_Row(int line) {
SPI_OUT(0xfe); //prefix command
SPI_OUT(0x45); //set cursor command
if (line == 1) {
SPI_OUT(0x00); //cursor position: row one, column one
}
else if (line == 2) {
SPI_OUT(0x40); //cursor position: row two, column one
}
delayMicroseconds(100);
}
/*****************************************************
Write "NHD-0216K3Z-NSW-BBW-V3" to LCD
/*****************************************************/
void Part_Number() {
Set_Row(1);
SPI_OUT(0x4e); // N
SPI_OUT(0x48); // H
SPI_OUT(0x44); // D
SPI_OUT(0xb0); // -
SPI_OUT(0x30); // 0
SPI_OUT(0x32); // 2
SPI_OUT(0x31); // 1
SPI_OUT(0x36); // 6
SPI_OUT(0x4b); // K
SPI_OUT(0x33); // 3
SPI_OUT(0x5a); // Z
SPI_OUT(0xb0); // -
SPI_OUT(0x4e); // N
SPI_OUT(0x53); // S
SPI_OUT(0x57); // W
SPI_OUT(0xb0); // -
Set_Row(2);
SPI_OUT(0x42); // B
SPI_OUT(0x42); // B
SPI_OUT(0x57); // W
SPI_OUT(0xb0); // -
SPI_OUT(0x56); // V
SPI_OUT(0x33); // 3
}
/*****************************************************
Function to:
- change backlight from highest --> lowest
- change backlight from lowest --> highest
delay(500) = 500 Milliseconds
/*****************************************************/
void Backlight_loop() {
for (int x = 8; x >= 0; x--) {
SPI_OUT(0xFE); //High to Low Backlight loop
SPI_OUT(0x53);
SPI_OUT(x);
delay(500);
}
for (int x = 0; x <= 8; x++) {
SPI_OUT(0xFE); //Low to High Backlight loop
SPI_OUT(0x53);
SPI_OUT(x);
delay(500);
}
}
/*****************************************************
Main function
/*****************************************************/
void setup() {
Set_Pins(); //set IO ports
Set_Contrast(); //set display contrast
Set_Backlight(); //set display backlight
Clear_Display(); //clear display
Set_Cursor(0); //turns off blinking cursor
Part_Number(); //display "NHD-0216K3Z-NSW-BBW-V3"
}
/*****************************************************
Loop function
/*****************************************************/
void loop() {
Backlight_loop(); //High to Low Backlight loop
}
Tableaux de caractères/polices
Ce code affiche les caractères de la table de polices incluse dans l'écran LCD.
/*****************************************************
This code was written for the Arduino UNO using SPI Interface.
This code displays the font table characters.
/* SPI Wiring Reference for: NHD-0216K3Z-NSW-BBW-V3
---------------------------
LCD | Arduino
---------------------------
1(SPISS) --> 12
2(SDO) --> No Connect
3(SCK) --> 10
4(SDA) --> 11
5(VSS) --> Ground
6(VDD) --> 5V
*/
/*****************************************************
Arduino pin definition
/*****************************************************/
#define SPISS_PIN 12
#define SDA_PIN 11
#define SCK_PIN 10
/*****************************************************
SPI function to send command and data.
For more information on SPI please visit our Support Center
/*****************************************************/
void SPI_out(unsigned char a) {
digitalWrite(SPISS_PIN, LOW);
for (int n = 0; n < 8; n++) {
if ((a & 0x80) == 0x80) {
digitalWrite(SDA_PIN, HIGH);
delayMicroseconds(200);
}
else {
digitalWrite(SDA_PIN, LOW);
}
delayMicroseconds(200);
a = a << 1;
digitalWrite(SCK_PIN, LOW);
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
}
digitalWrite(SCK_PIN, HIGH);
delayMicroseconds(200);
digitalWrite(SPISS_PIN, HIGH);
}
/*****************************************************
Set Arduino UNO IO ports as Output mode
/*****************************************************/
void Set_Pins() {
pinMode(SPISS_PIN, OUTPUT);
pinMode(SCK_PIN, OUTPUT);
pinMode(SDA_PIN, OUTPUT);
}
/*****************************************************
Set LCD Contrast
/*****************************************************/
void Set_Contrast() {
SPI_out(0xFE); //prefix command
SPI_out(0x52); //contrast command
SPI_out(0x28); //set contrast value
delayMicroseconds(500);
}
/*****************************************************
Set LCD Backlight
/*****************************************************/
void Set_Backlight() {
SPI_out(0xFE); //prefix command
SPI_out(0x53); //backlight command
SPI_out(0x08); //set backlight value
delayMicroseconds(100);
}
/*****************************************************
Clear LCD
/*****************************************************/
void Clear_Display() {
SPI_out(0xFE); //prefix command
SPI_out(0x51); //clear display command
delayMicroseconds(1500);
}
/*****************************************************
Set cursor
Mode = 0 sets Blinking cursor off
Mode = 1 sets Blinking cursor on
/*****************************************************/
void Set_Cursor(int mode) {
SPI_out(0xfe); //prefix command
if (mode == 0) {
SPI_out(0x4c); //Blinking cursor off
}
else if (mode == 1) {
SPI_out(0x4b); //Blinking cursor on
}
delayMicroseconds(100);
}
/*****************************************************
Set Row address
Line = 1 sets for first row
Line = 2 sets for second row
/*****************************************************/
void Set_Row(int line) {
SPI_out(0xfe); //prefix command
SPI_out(0x45); //set cursor command
if (line == 1) {
SPI_out(0x00); //cursor position: row one, column one
}
else if (line == 2) {
SPI_out(0x40); //cursor position: row two, column one
}
delayMicroseconds(100);
}
/*****************************************************
Display font characters
-change the row address every 16 characters displayed
-used Clear_Display() function to clear the display
and change the row to the first row
delay(500) = 500 Milliseconds
/*****************************************************/
void Font_Table_Characters() {
Clear_Display();
for (int i = 0; i < 64; i++) {
if (i == 16 || i == 48) {
Set_Row(2);
}
else if (i == 32 || i == 64) {
Clear_Display();
if (i == 64) {
i = 0;
}
}
SPI_out(i + 32);
delay(500);
}
}
/*****************************************************
Main function
/*****************************************************/
void setup() {
Set_Pins(); //set IO ports
Set_Contrast(); //set display contrast
Set_Backlight(); //set display backlight
Clear_Display(); //clear display
Set_Cursor(0); //turns off blinking cursor
}
/*****************************************************
Loop function
/*****************************************************/
void loop() {
Font_Table_Characters(); //Display font characters
}
Circuit - Schéma de connexion et schéma électrique pour communication RS232 TTL
RS232 TTL est un protocole de communication série qui utilise les spécifications de type RS232, mais avec des niveaux logiques TTL (0 V à Vcc, généralement 3,3 V ou 5 V). Le circuit de connexion RS232 TTL entre Arduino et l'écran Newhaven à 16 caractères n'utilise que trois fils :
| Arduino | LCD | Type de connexion |
|---|---|---|
| Broche 5 V | Broche 3 : V DD | Puissance |
| Broche de terre | Broche 2 : Masse | Sol |
| Broche 7 : broche d'E/S numérique | Broche 1 : RX | Port d'entrée série RS-232 (TTL) |
Remarque :
R1 et R2 sur l'écran doivent être ouverts pour activer RS232 TTL, comme spécifié dans la fiche technique.
Circuit de câblage RS232 TTL
Schéma de câblage RS232 TTL
Nous avons créé un tutoriel détaillé et adapté aux débutants sur Instructables pour la communication RS232 TTL. Le tutoriel comprend toutes les étapes nécessaires à la réalisation de ce projet. Découvrez-le ici : www.instructables.com/Arduino-LCD-Tutorial/
Arduino - LCD Hello World ! Exemple de code utilisant la communication série RS232 TTL
L'exemple de code suivant affiche « Hello Word ! » sur l'écran LCD à l'aide d'une communication RS232 TTL.
NHD-0216K3Z-NSW-BBW-V3 ***************************************************** Ce code a été écrit pour l'Arduino UNO utilisant l'interface RS-232. /* Référence de câblage RS-232 pour : NHD-0216K3Z-NSW-BBW-V3 --------------------------- LCD | Arduino --------------------------- 1(RX) --> 7 2(VSS) --> Masse 3(VDD) --> 5V */ #define P1 7 //RX broche sur laquelle recevoir les données série. /***************************************************** Configuration RS-232 pour les commandes et les données. Pour plus d'informations sur RS-232, veuillez consulter notre Centre d'assistance. /*****************************************************/ #include#define RxPin P1 SoftwareSerial NHD_LCD = SoftwareSerial(P1, RxPin); /***************************************************** Set LCD Contrast /*****************************************************/ void Set_Contrast() { NHD_LCD.write(0xFE); //Prefix command NHD_LCD.write(0x52); //Contrast command NHD_LCD.write(0x28); //Set contrast value delayMicroseconds(500); } /***************************************************** Clear LCD /*****************************************************/ void Clear_display() { NHD_LCD.write(0xFE); //Prefix command NHD_LCD.write(0x51); //Clear Display delayMicroseconds(1500); } /***************************************************** Set Arduino UNO IO ports as Output mode /*****************************************************/ void Set_Pins() { pinMode(RxPin, OUTPUT); } /***************************************************** Set LCD Backlight /*****************************************************/ void Set_Backlight() { NHD_LCD.write(0xFE); //prefix command NHD_LCD.write(0x53); //Backlight command NHD_LCD.write(0x08); //Set backlight value delayMicroseconds(100); } /***************************************************** Set cursor Mode = 0 sets Blinking cursor off Mode = 1 sets Blinking cursor on /*****************************************************/ void Set_Cursor(int mode) { NHD_LCD.write(0xFE); //Prefix command if (mode == 0) { NHD_LCD.write(0x4c); //Turn blinking cursor off } else if (mode == 1) { NHD_LCD.write(0x4b); //Turn blinking cursor on } delayMicroseconds(100); } /***************************************************** Write "Hello World!" to LCD /*****************************************************/ void Hello_World() { NHD_LCD.write(0x48); // H NHD_LCD.write(0x65); // e NHD_LCD.write(0x6C); // l NHD_LCD.write(0x6C); // l NHD_LCD.write(0x6F); // o NHD_LCD.write(0x11); // Blank NHD_LCD.write(0x57); // W NHD_LCD.write(0x6f); // o NHD_LCD.write(0x72); // r NHD_LCD.write(0x6c); // l NHD_LCD.write(0x64); // d NHD_LCD.write(0x21); // ! } /***************************************************** Main function /*****************************************************/ void setup() { NHD_LCD.begin(9600); //Sets 9600 Baud Rate the display can receive and transmit data at a rate of 9600 bits per second by default. delay(15); Set_Pins(); //Set IO ports Set_Cursor(0); //Turns off blinking cursor Set_Contrast(); //Set display Contrast Set_Backlight(); //Set display Backlight Clear_display(); //Clear display Hello_World(); //Display "Hello Wolrd!" } void loop() { }
Dépannage de votre écran LCD - Projet Arduino
Ci-dessous, nous aborderons certaines mesures courantes à prendre lorsque vous rencontrez des difficultés ou des problèmes avec votre projet Arduino - LCD.
- Vérifiez les connexions des câbles: le problème le plus courant lors du raccordement d'un écran LCD à un Arduino est un câblage incorrect. Vérifiez vos connexions câblées par rapport au schéma de brochage et au circuit fournis afin de garantir une connectivité correcte. De plus, gardez à l'esprit que NHD-0216K3Z-NSW-BBW-V3 peut être configuré pour fonctionner avec les interfaces SPI, I2C et RS232 TTL. Une résistance de 0 ohm doit être soudée sur la section R2 du circuit imprimé pour fonctionner avec l'interface SPI.
- Inspectez les composants: recherchez tout signe visible de dommage sur l'Arduino, l'écran LCD ou les fils de connexion.
- Vérifiez le code: assurez-vous que le code téléchargé sur votre Arduino est correct et ne contient aucune erreur.
- Vérifiez l'alimentation électrique: assurez-vous que votre source d'alimentation est suffisante pour alimenter à la fois l'Arduino et l'écran LCD.
- Testez avec un écran LCD dont vous savez qu'il fonctionne correctement: si le problème persiste, essayez de connecter un autre écran LCD dont vous savez qu'il fonctionne correctement à votre Arduino. Cela vous aidera à déterminer si le problème provient de l'écran LCD ou de la carte Arduino elle-même.
- Régler le contraste: Si vous avez des difficultés à voir le texte affiché sur l'écran LCD, essayez de régler le contraste à l'aide de la fonction logicielle.
Définir_Contraste(), décrit ci-dessus. Différentes conditions d'éclairage peuvent nécessiter différents réglages de contraste pour une visibilité optimale. - Vérifiez la version de l'IDE Arduino: assurez-vous que vous utilisez la dernière version de l'IDE Arduino. Les versions obsolètes peuvent contenir des bogues ou être incompatibles avec votre projet.
- Testez les fonctionnalités individuelles: si vous rencontrez des problèmes avec certaines fonctionnalités spécifiques, telles que le défilement ou le contrôle du contraste, essayez d'exécuter un code plus simple, comme l'exemple « Hello World ! », afin d'isoler le problème. Cela peut vous aider à déterminer si le problème est lié au code ou au matériel.
- Demandez de l'aide à la communauté: si vous ne parvenez pas à résoudre le problème après avoir suivi les étapes de dépannage ci-dessus, pensez à demander de l'aide à la communauté en ligne. Les forums en ligne, tels que le forum d'assistance Newhaven Display,Arduino Stack Exchange ouArduino.cc, sont d'excellentes ressources pour obtenir l'aide d'utilisateurs expérimentés.
En suivant ces étapes de dépannage, vous devriez être en mesure de diagnostiquer et de résoudre la plupart des problèmes liés à la connexion d'un écran LCD à une carte Arduino. N'oubliez pas que la patience et le souci du détail sont essentiels lors du dépannage de projets électroniques.
Ressources supplémentaires
- Site officiel d'Arduino UNO.
- Description du produit LCD 16x2.
- Fiche technique et spécifications du produit LCD 16x2.
- Tutoriel Instructables Arduino-LCD adapté aux débutants
- Forum d'assistance pour les écrans LCD à caractères.
- Lisez notre guide du débutant sur le prototypage d'écrans.
- Exemple de code LCD caractère.
- Apprenez à protéger vos appareils électroniques contre les décharges électrostatiques.
- Découvrez les différents types d'écrans LCD.
- Découvrez les modes LCD.