0% ont trouvé ce document utile (0 vote)
61 vues2 pages

LCD

Transféré par

Mlik Med Koussay
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
61 vues2 pages

LCD

Transféré par

Mlik Med Koussay
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

// PIC18F4520 Configuration Bit Settings

#include <xc.h>
#include <stdio.h> // Pour utiliser sprintf
#define _XTAL_FREQ 4000000 // Fréquence de l'oscillateur

// Définition des broches de contrôle pour l'afficheur LCD


#define RS PORTCbits.RC0 // RS -> Sélection des données (1) ou des commandes (0)
#define RW PORTCbits.RC1 // RW -> Sélection lecture (1) ou écriture (0)
#define EN PORTCbits.RC2 // EN -> Activation de l'horloge LCD

// Fonction pour envoyer une commande au LCD


void lcd_cmd(unsigned char cmd) {
// Envoyer les 4 bits supérieurs
PORTC = (cmd & 0xF0); // Masque pour les bits supérieurs
EN = 1; // Activer l'horloge du LCD
RW = 0; // Mode écriture
RS = 0; // RS=0 pour la commande
__delay_ms(2); // Délai pour que le LCD traite la commande
EN = 0; // Désactiver l'horloge

// Envoyer les 4 bits inférieurs


PORTC = ((cmd << 4) & 0xF0); // Décaler pour les bits inférieurs
EN = 1;
RW = 0;
RS = 0;
__delay_ms(2);
EN = 0;
}

// Fonction pour envoyer des données au LCD


void lcd_data(unsigned char data) {
// Envoyer les 4 bits supérieurs
PORTC = (data & 0xF0); // Masque pour les bits supérieurs
EN = 1;
RW = 0;
RS = 1; // RS=1 pour envoyer des données
__delay_ms(2);
EN = 0;

// Envoyer les 4 bits inférieurs


PORTC = ((data << 4) & 0xF0); // Décaler pour les bits inférieurs
EN = 1;
RW = 0;
RS = 1;
__delay_ms(2);
EN = 0;
}

// Fonction pour initialiser le LCD


void lcd_init() {
lcd_cmd(0x02); // Initialiser en mode 4 bits
lcd_cmd(0x28); // Configurer : 4 bits, 2 lignes, 5x7 matrice
lcd_cmd(0x0C); // Activer l'affichage, désactiver le curseur
lcd_cmd(0x06); // Mode d'incrément automatique du curseur
lcd_cmd(0x01); // Effacer l'affichage
__delay_ms(2); // Petit délai pour stabiliser le LCD
}
// Fonction pour afficher une chaîne de caractères sur le LCD
void lcd_string(const char* str) {
unsigned char i = 0;
while (str[i] != '\0') { // Boucle jusqu'à la fin de la chaîne
lcd_data(str[i]); // Envoyer chaque caractère au LCD
i++;
}
}

// Fonction principale
void main() {
int a = 1; // Variable à afficher sur le LCD
char buffer[16]; // Tampon pour convertir l'entier en chaîne de caractères

TRISC = 0x00; // Configurer le PORTC comme sortie pour le LCD


lcd_init(); // Initialiser l'afficheur LCD

while (1) {
lcd_cmd(0x80); // Positionner le curseur sur la première ligne, première
position
lcd_string("bonjour"); // Afficher "bonjour" sur la première ligne

// Convertir l'entier 'a' en chaîne de caractères et l'afficher


lcd_cmd(0xC0); // Positionner le curseur sur la deuxième ligne, première
position
sprintf(buffer, "%d", a); // Convertir 'a' en chaîne de caractères
lcd_string(buffer); // Afficher la valeur de 'a'

__delay_ms(1000); // Délai de 1 seconde pour la stabilité (facultatif)

a++; // Incrémenter 'a' pour le test


}
}

Vous aimerez peut-être aussi