Telechargé par marcusndiaye1996

Fonctions LCD4bits.h

publicité
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
Bibliothèque de fonctions en langage C
Afficheur LCD 2x16 alphanumérique
Nabil Al-HOSSRI, département GEII IUT Bordeaux1
E-mail: [email protected]
Introduction
Cette bibliothèque (dans sa version 2), des fonctions et des routines, peut gérer un LCD 2x16
alphanumérique compatible HITACHI, opérant en mode 4 bits ou 8 bits. Elle est écrite en
langage C (portable), ce qui la rend facilement adaptable à tous type de microcontrôleurs et
compilateurs. Pour améliorer sa portabilité, on a évité d’utiliser des directives d’assemblage
spécifiques à un compilateur particulier (comme par exemple la directive #pragma).
Ces fonctions et routines sont, en outre, capables de :

initialiser le LCD,

gérer le curseur,

afficher un caractère ou un texte directement dans la RAM du LCD,

effectuer des conversions Hexa/Ascii, Float/Ascii, … et en afficher les résultats
directement dans la RAM du LCD,

afficher la tension mesurée par le convertisseur analogique/numérique du micro utilisé
sous la forme X.XXXXXX (mantisse avec un maximum de 6 chiffres),

afficher l'heure au format HH:MM:SS,

créer des caractères spéciaux et les afficher par la suite.
Le LCD, dans cette bibliothèque, peut être adressé en mode 4 ou 8 bits (pour avoir plus
d’informations, clic ici
). Ces deux modes de fonctionnement imposent, en réalité, des
routines d'initialisations et de positionnement distinctes. La description des différentes
fonctions de cette bibliothèque se subdivise alors en deux groupes de fonctions :
o
o
fonctions d'initialisation où l'on distingue les deux modes,
fonctions d'affichage qui sont communes pour les deux modes.
Description des fonctions
Le tableau suivant montre le développement de ces différentes routines suivant la structure
générale d'un fichier en-tête
:
______________________________________________________________________________ 1
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
/* Fichier en-tête : LCD4bits.h et LCD8bits (version 2)
Créé pour le site NumEctron et mis à jour le 13 avril 2009
Home: http://nalhossri.free.fr
e-mail: [email protected] et [email protected]
Copyright © N. AL HOSSRI IUT GEII Bordeaux
All rights reserved
Do not modify!
*/
/*==============================================================*/
#ifndef LCD4BITS_H ou LCD8BITS_H
#define LCD4BITS_H ou LCD8BITS_H
projet).
//facultatif (mais il faut faire attention de ne pas
// inclure le même .h plus d'une fois dans un
/**********************************************************************************
Afficheur LCD 2x16 caractères
On présente dans ce qui suit deux bibliothèques de fonctions et routines gérant respectivement un
afficheur LCD alphanumérique opérant en mode 4 bits et en mode 8 bits. Les broches de commandes et
de données sont initialisées à l'intérieur de la fonction init_lcd.
Grace à l'utilisation de la technique dite "champ de bits" le choix de brochage des bits de données et de
commandes entre le LCD (en mode 4 bits) et le micro est libre. Ceci permet de rendre les broches,
spécifiques à d’autres applications, disponibles.
/*********************************************************************************/
typedef unsigned char byte;
//facultative pour CODE WARRIOR.
typedef unsigned int word;
//facultative pour CODE WARRIOR.
typedef unsigned long dword;
//facultative pour CODE WARRIOR.
/**********************************************************************************/
/* Déclaration d’un champ de bits */
union {
struct {
byte bit0:1,
bit1:1,
bit2:1,
bit3:1,
bit4:1,
bit5:1,
bit6:1,
bit7:1;
}bits;
byte octet;
} mon_octet ;
//une union de nom mon_octet constituée par une structure de 8 bits
//et un byte à la même adresse mémoire.
//une structure 8 bits (champ de bits).
//un byte (octet).
//accès à l'octet complet par mon_octet.octet et
//accès aux bits par mon_octet.bits.bitx .
/*********************************************************************************/
/* Définition des broches utilisées */
//Le brochage adopté est sur un seul port (PORTB du HC08) :
//Il peut être modifié en fonction de la configuration matérielle de votre application.
______________________________________________________________________________ 2
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
PTB3
PTB4
PTB5
PTB6
PTB0
PTB1
PTB2
MC68HC908GP32
+5v
10k
VSS
VDD
VEE
RS
RW
E
D0
D1
D2
D3
D4
D5
D6
D7
A
K
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Contraste
Mode 4 bits
/* Modifier ce qui est en rouge (qui dépend uniquement du micro utilisé, dans notre cas, le HC08) dans
les lignes ci-dessous en fonction de la configuration matérielle souhaitée. */
//bits de données du LCD = utilisation
#define DATA4 PTB_PTB3
//bit
#define DATA5 PTB_PTB4
//bit
#define DATA6 PTB_PTB5
//bit
#define DATA7 PTB_PTB6
//bit
//bits de direction des
#define DDR_DATA4
#define DDR_DATA5
#define DDR_DATA6
#define DDR_DATA7
des 4 broches du micro au choix:
3 du PORTB ou toute autre broche.
4 du PORTB ou toute autre broche.
5 du PORTB ou toute autre broche.
6 du PORTB ou toute autre broche.
broches de données:
DDRB_DDRB3
DDRB_DDRB4
DDRB_DDRB5
DDRB_DDRB6
// bit de direction de la broche PTB_PTB3.
//bits de commande du LCD = utilisation des 3 broches du micro au choix:
#define LCD_RS PTB_PTB0
//LCD_RS = bit 0 du PORTB ou toute autre broche.
#define LCD_RW PTB_PTB1
//LCD_RW = bit 1 du PORTB ou toute autre broche.
#define LCD_E PTB_PTB2
//LCD_E = bit 2 du PORTB ou toute autre broche.
//bits de direction des broches de commande:
#define DDR_LCD_RS DDRB_DDRB0
// bit de direction de la broche PTB_PTB0.
#define DDR_LCD_RW DDRB_DDRB1
#define DDR_LCD_E DDRB_DDRB2
______________________________________________________________________________ 3
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
En mode 8 bits
PTB5
PTB6
PTB7
PTA0
PTA1
PTA2
PTA3
PTA4
PTA5
PTA6
PTA7
MC68HC908GP32
+5v
10k
VSS
VDD
VEE
RS
RW
E
D0
D1
D2
D3
D4
D5
D6
D7
A
K
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Contraste
Mode 8 bits
/* Modifier, ce qui est en rouge (qui dépend uniquement du micro utilisé, dans notre cas, le HC08),
dans les lignes ci-dessous en fonction de la configuration matérielle souhaitée. */
//bits de données (8 bits côte à côte) du LCD:
#define PORT_DATA PTA
//bits de direction (8 bits) des broches de données:
#define DDR_DATA DDRA
//bits de commande (3 bits) du LCD = utilisation des 3 broches du micro au choix:
#define LCD_RS PTB_PTB5
//LCD_RS = bit 5 du PORTB.
#define LCD_RW PTB_PTB6
#define LCD_E PTB_PTB7
//bits de direction (3 bits) des broches de commande:
#define DDR_LCD_RS DDRB_DDRB5
// bit de direction de la broche PTB_PTB5.
#define DDR_LCD_RW DDRB_DDRB6
#define DDR_LCD_E DDRB_DDRB7
/*********************************************************************************/
/* Déclaration des fonctions élaborées */
void
void
void
void
void
void
void
void
void
void
ecr_ctrl(byte ctrl);
ecr_data(byte data);
busy_lcd(void);
init_lcd(byte curseur);
xy_lcd(byte x, byte y);
aff_car(byte c);
aff_txt(byte *message);
efface_lcd(void);
defini_cars(const byte *c, byte char_code);
onoff_lcd(byte onoff);
/* Fonctions additionnelles permettant de gérer les différentes conversions HEXA/ASCII, FLOAT/ASCII...,
______________________________________________________________________________ 4
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
et affichage direct dans la RAM du LCD : */
void
void
void
void
aff_base(dword hexa, byte base);
aff_float(float data, byte decimale);
aff_CAN(byte CAN, byte decimal);
aff_heure(byte heures, byte minutes, byte secondes);
/* Temporisation logicielle: */
void tempo_ms(word temps);
//*********************************************************************************
/* Constante utile pour la conversion HEXA/ASCII. Elle contient les codes ascii des caractères de 0 à F.
ex: h[12]=code ascii (0x43) du caractère C. */
const byte *h="0123456789ABCDEF";
//*********************************************************************************
#include "car_spec.h"
//table définissant quelques caractères spéciaux.
/**********************************************************************************
void ecr_ctrl(byte ctrl)
Envoie un octet ctrl de contrôle pour modifier la configuration du LCD. L'envoi au LCD de cet octet se fait
en mode deux fois 4 bits.
**********************************************************************************/
void ecr_ctrl(byte ctrl){
//utilise la variable mon_octet.octet pour avoir accès aux bits de ctrl :
mon_octet.octet=ctrl;
//met d'abord les 4 bits de poids forts de ctrl sur les 4 lignes DATA 7-4 utilisées du LCD
//(mode 4 bits)
DATA4
DATA5
DATA6
DATA7
=
=
=
=
mon_octet.bits.bit4;
mon_octet.bits.bit5;
mon_octet.bits.bit6;
mon_octet.bits.bit7;
LCD_RS=0;
LCD_RW=0;
LCD_E=1;
LCD_E=0;
//envoie un octet de commande.
//écriture dans la RAM du LCD.
//validation par l'impulsion E.
//met par la suite les 4 bits de poids faible de ctrl sur les 4 lignes DATA 7-4
//utilisées du LCD (mode 4 bits)
DATA4 = mon_octet.bits.bit0;
DATA5 = mon_octet.bits.bit1;
DATA6 = mon_octet.bits.bit2;
DATA7 = mon_octet.bits.bit3;
LCD_E=1;
LCD_E=0;
//validation par l'impulsion E.
//test du bit Busy ou attente de #2ms pour que le LCD soit prêt.
busy_lcd();
}
______________________________________________________________________________ 5
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
En mode 8 bits
void ecr_ctrl(byte ctrl){
}
PORT_DATA=ctrl;
LCD_RS=0;
LCD_RW=0;
LCD_E=1;
LCD_E=0;
busy_lcd();
//ctrl est placé sur bus.
//envoie un octet de commande.
//écriture dans la RAM du LCD.
//validation par l'impulsion E.
//test du busy.
**********************************************************************************/
void ecr_data(byte data){
//utilise la variable mon_octet.octet pour avoir accès aux bits de data.
mon_octet.octet=data;
//met d'abord les 4 bits de poids forts de data sur les 4 lignes DATA 7-4 utilisées du
//LCD (mode 4 bits)
DATA4 = mon_octet.bits.bit4;
DATA5 = mon_octet.bits.bit5;
DATA6 = mon_octet.bits.bit6;
DATA7 = mon_octet.bits.bit7;
LCD_RS=1;
LCD_RW=0;
LCD_E=1;
LCD_E=0;
//envoie un octet de donnée.
//écriture dans la RAM du LCD.
//validation par l'impulsion E.
//met par la suite les 4 bits de poids faible de ctrl sur les 4 lignes DATA 7-4
//utilisées du LCD (mode 4 bits)
DATA4 = mon_octet.bits.bit0;
DATA5 = mon_octet.bits.bit1;
DATA6 = mon_octet.bits.bit2;
DATA7 = mon_octet.bits.bit3;
LCD_E=1;
LCD_E=0;
//validation par l'impulsion E.
//test du bit Busy ou attente de #2ms pour que le LCD soit prêt.
busy_lcd();
}
En mode 8 bits
void ecr_data(byte data){
}
PORT_DATA=data;
LCD_RS=1;
LCD_RW=0;
LCD_E=1;
LCD_E=0;
busy_lcd();
//met l’octet data sur les lignes de données.
//envoie un octet de donnée.
//écriture dans la RAM du LCD.
//validation par l'impulsion E.
//Test du busy.
/**********************************************************************************
______________________________________________________________________________ 6
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
busy_lcd(void)
Teste (bit busy) si le LCD est prêt à recevoir un octet de donnée ou un octet de commande.
**********************************************************************************/
void busy_lcd(void){
//initialise les 4 lignes DATA 7-4 du micro en entrée.
DDR_DATA4=0;
DDR_DATA5=0;
DDR_DATA6=0;
DDR_DATA7=0;
LCD_RS=0;
LCD_RW=1;
//envoie un octet de commande.
//lecture de la RAM du LCD.
do{
LCD_E=1;
mon_octet.bits.bit7=DATA7; //transfert le bit busy (DATA7) vers le bit7 de mon_octet.
LCD_E=0;
LCD_E=1;
//retard.
LCD_E=1;
//validation par la deuxième impulsion E.
LCD_E=0;
}while(mon_octet.bits.bit7 == 1);
//boucle si busy est à un.
LCD_RW=0;
//écriture dans la RAM du LCD.
//initialise les 4 lignes DATA 7-4 du micro en sortie.
DDR_DATA4=1;
DDR_DATA5=1;
DDR_DATA6=1;
DDR_DATA7=1;
}
En mode 8 bits
void busy_lcd(void){
signed char temp;
DDR_DATA=0;
LCD_RS=0;
LCD_RW=1;
do{
LCD_E=1;
temp=PORT_DATA;
LCD_E=0;
LCD_E=1;
LCD_E=1;
LCD_E=0;
//PORT_DATA en entrée.
//lecture de la RAM du LCD.
//PORT_DATA dans temp.
//retard.
//validation par la deuxième impulsion E.
} while(temp<0);
//boucle si busy est à un.
LCD_RW=0;
DDR_DATA=0xFF;
//écriture dans la RAM du LCD.
//PORT_DATA en sortie.
}
______________________________________________________________________________ 7
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
/**********************************************************************************
void init_lcd(byte curseur)
Initialise le LCD et les PORTs utilisés.
Paramètres
o
o
o
curseur = 0 : curseur fixe hors service, affichage actif.
curseur = 1 : curseur en service, affichage actif.
curseur = 2 : curseur clignotant en service, affichage actif.
**********************************************************************************/
void init_lcd(byte curseur){
//initialise les 4 lignes DATA 7-4 du micro utilisé en sortie.
DDR_DATA4=1;
DDR_DATA5=1;
DDR_DATA6=1;
DDR_DATA7=1;
//initialise les broches de contrôle du LCD en sortie.
DDR_LCD_RS=1;
DDR_LCD_E=1;
DDR_LCD_RW=1;
busy_lcd();
ecr_ctrl(0x28);
ecr_ctrl(0x06);
//droite).
ecr_ctrl(0x01);
//test du bit Busy ou attente de #50ms pour que le LCD soit prêt.
//adressage 4 Bits, afficheur 2 lignes.
//incrémente l'adresse DD-RAM (l'affichage se décale vers la
//effacement de l'écran et curseur positionné en haut à gauche.
switch(curseur){
case 0:
case 1:
case 2:
}
ecr_ctrl(0x0C);
break;
//curseur hors service, affichage actif.
ecr_ctrl(0x0E);
break;
//curseur en service, affichage actif.
ecr_ctrl(0x0F);
break;
//curseur clignotant en service.
default:
break;
};
En mode 8 bits
void init_lcd(byte curseur){
DDR_DATA=0xFF;
//PORT_DATA en sortie.
//initialise les broches de contrôle du LCD en sortie:
DDR_LCD_RS=1;
DDR_LCD_RW=1;
DDR_LCD_E=1;
busy_lcd();
//test du busy ou attente de #50ms pour que le LCD soit prêt.
______________________________________________________________________________ 8
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
ecr_ctrl(0x38);
ecr_ctrl(0x06);
ecr_ctrl(0x01);
//adressage 8 Bits, afficheur 2 lignes.
//incrémente l'adresse DD-RAM (l'affichage se décale vers la droite).
//effacement de l'écran et curseur positionné en haut à gauche.
switch(curseur){
case 0:
ecr_ctrl(0x0C);
break;
//curseur hors service, affichage actif.
case 1:
case 2:
}
ecr_ctrl(0x0E);
break;
ecr_ctrl(0x0F);
break;
default:
break;
};
//curseur en service, affichage actif.
//curseur clignotant en service.
/**********************************************************************************
void xy_lcd(byte x, byte y)
Positionne le curseur aux coordonnées (x, y) : 1 <= x <= 16 et 1 <= y <= 2.
**********************************************************************************/
void xy_lcd(byte x, byte y){
if (y==1)
ecr_ctrl(0x80+x-1);
//positionne la ligne 1 aux coordonnées (x, 1).
if (y==2)
ecr_ctrl(0xC0+x-1);
//positionne la ligne 2 aux coordonnées (x, 2).
}
/**********************************************************************************
void aff_car(byte c)
Affiche à la position du curseur le caractère dont le code ascii est c.
**********************************************************************************/
void aff_car(byte c){
}
ecr_data (c);
/**********************************************************************************
void aff_txt(byte *message)
Affiche, à la position du curseur, le texte « message ».
*message : pointeur sur le message stocké en ROM (mémoire Flash).
Option
\r placé dans message provoque le retour au début de la ligne suivante.
**********************************************************************************/
void aff_txt(byte *message){
while(*message!= '\0') {
//écriture sur le LCD de toute la chaîne.
______________________________________________________________________________ 9
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
if(*message=='\r')
xy_lcd(1,2);
else
aff_car(*message);
};
//écriture sur le LCD d'un caractère du message.
message++;
}
/**********************************************************************************
void efface_lcd(void)
Efface l'écran et positionne le curseur en haut à gauche.
**********************************************************************************/
void efface_lcd(void){
}
ecr_ctrl(0x01);
/**********************************************************************************
void defini_cars(const byte *c, char_code)
Définit, dans le tableau c, un caractère personnalisé de 8x8 points. Le LCD utilisé admet au maximum 8
caractères spéciaux.
char_code : étant le code du caractère à définir. Il doit satisfaire : 0 <= char_code <= 7.
**********************************************************************************/
void defini_cars(const byte *c, byte char_code){
byte i=0,a;
a=(char_code<<3)|0x40;
for(i=0; i<8; i++){
};
//les caractères sont logés dans le CGRAM du LCD à partir
//de l'adresse 0x40.
ecr_ctrl(a);
ecr_data(c[i]);
a++;
}
/**********************************************************************************
void onoff_lcd(byte onoff)
Allume ou éteint l'affichage. Le contenu de La RAM du LCD n'est pas affecté.
onoff = 1: allumé ; onoff = 0: éteint.
**********************************************************************************/
void onoff_lcd(byte onoff){
}
if(onoff==1)
ecr_ctrl(0x0C);
else
ecr_ctrl(0x08);
/**********************************************************************************
void aff_base(dword hexa, byte base)
Affiche, sur le LCD, hexa en base : 2 (binaire) <= base <= 16 (hexadécimale). Les zéros à gauche sont
retirés.
______________________________________________________________________________ 10
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
L’affichage est limité à des valeurs entières positives comprises entre 0 et 2^32=4294967295 du fait
que hexa soit du type dword. Cependant cette limite est contournable en changeant le type de hexa,
mais à mon avis celle-ci est suffisante dans la majorité des applications.
Paramètre
base : au choix de 2 à 16.
**********************************************************************************/
void aff_base(dword hexa, byte base){
après.
byte i=0;
//compteur.
static byte buf[32]; //buffer de stockage; static car il est appelé de la fonction aff_float juste
/* remplit buf[i] par le code ascii du résultat de l’opération (hexa%base) (cf constante *h déclarée en
entête). */
do{
buf[i]=h[hexa%base];
//conversion Hexa/ASCII de la fin vers le début.
hexa=hexa/base;
i++;
}while(hexa);
/* affiche le contenu du buffer, de la fin vers le début et caractère par caractère, directement dans la
RAM du LCD. */
do{
i--;
aff_car(buf[i]);
} while(i>0);
}
/**********************************************************************************
void aff_float(float data, byte decimal)
Convertit, arrondit et affiche, à la position du curseur, data (type float 32 bits) au format décimal avec 1
à 6 décimales.
decimal: nombre de chiffres décimaux souhaités après la virgule. Il doit satisfaire: 0 <= decimal <= 6,
decimal=0: n’affiche que la partie entière de data.
**********************************************************************************/
void aff_float(float data, byte decimal){
byte i;
dword dec, dec10=10;
if(data<0){
aff_car('-');
data*=-1;
}
//si data est négatif affiche '-'.
//data est rendu positif.
for(i=0; i< decimal; i++)
dec10*=10;
dec=dec10*(data-(dword)data);
//dec10=10^(decimal+1).
//partie décimale, à (decimal+1) chiffres, est rangé dans dec,
if(dec%10>=5)
dec+=10;
//puis arrondis à la valeur supérieure.
if(dec > dec10-1){
data +=1;
dec=0;
//si Overflow,
//ajoute 1 à la partie entière,
//et la partie décimale est mise à 0.
______________________________________________________________________________ 11
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
}
aff_base(data, 10);
//tronque data et affiche la partie entière.
if(decimal !=0){
aff_car('.');
dec10/=100;
dec=dec/10;
//dec10=10^(decimal-1).
//dec est à decimal chiffres.
while(dec/dec10==0 && decimal>1){
aff_car('0');
}
dec10/=10;
decimal--;
aff_base(dec, 10);
}
//affiche les éventuels zéros à gauche de la
//partie décimale.
//affiche le reste de la partie décimale.
}
/**********************************************************************************
void aff_CAN(byte CAN, byte decimal)
Le résultat (CAN) de la conversion A/N, issu du CAN du micro, est converti en tension et inscrit dans la
RAM d'affichage du LCD.
0 <= decimal <=7 : étant le nombre de chiffres souhaité de la partie décimale.
**********************************************************************************/
void aff_CAN(byte CAN, byte decimal){
}
aff_float(5.0*CAN/255, decimal);
//plein d’échelle = 5 volts et résolution = 8 bits.
aff_txt(" V");
//affiche l’unité de mesure.
/**********************************************************************************
void aff_heure(byte heures, byte minutes, byte secondes)
Affiche à la position du curseur l'heure, sous la forme HH:MM:SS.
**********************************************************************************/
void aff_heure(byte heures, byte minutes,byte secondes){
if(heures < 10)
aff_car('0');
//affiche 0 pour les dizaines.
aff_base(heures, 10);
aff_car(':');
//insertion ':'.
if(minutes < 10)
aff_car('0');
//affiche 0 pour les dizaines.
aff_base(minutes, 10);
aff_car(':');
//insertion ':'.
if(secondes < 10)
aff_car('0');
//affiche 0 pour les dizaines.
aff_base(secondes, 10);
}
/**********************************************************************************
______________________________________________________________________________ 12
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
void tempo_ms(word temps)
Temporisation logicielle avec un pas de #1 ms. Elle est utile, par exemple, pour faire clignoter
l'affichage, …
**********************************************************************************/
void tempo_ms(word temps){
word j=0,i=0;
for(j = 0;j < temps ; j++)
for(i = 0; i <90 ; i++);
}
//répète temps x 1ms.
//un pas 1ms pour un quartz de 10MHz.
//*********************************************************************************
#endif
/************************************* FIN ***************************************/
Comment ça marche, en pratique, toutes ces fonctions et routines ?

Inclure, dans votre programme source, le fichier en-tête LCD4bits.h ou LCD8bits.h qui
sont téléchargeables à la fin de cet article. Il suffit pour cela d’écrire (par exemple) :
#include "LCD4bits.h",

Initialiser, dans votre programme principal, le LCD à l’aide de la fonction init_lcd,

Insérer, après init_lcd, les fonctions souhaitées.
Et voila ce que vous pouvez obtenir quel que soit le mode de fonctionnement du LCD :
1. Curseur invisible :
init_lcd (0) ;
2. Curseur fixe visible :
init_lcd (1) ;
3. Curseur clignotant :
init_ lcd (2) ;
4. Après init_lcd (0), affiche la lettre ‘A’ :
init_lcd (0) ;
Aff_car (‘A’) ;
5. Positionne le curseur au coordonnée (4,2) et affiche la
lettre ‘B’ :
init_lcd (0) ;
xy_lcd (4,2) ;
aff_car (‘B’) ;
6. Après init_lcd (0), affiche un texte :
init_lcd (0) ;
aff_txt ("numEctron");
______________________________________________________________________________ 13
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
7. Affiche une page de deux lignes :
init_lcd (0) ;
aff_txt ("numEctron\rbonjour");
8. Convertit, en virgule flottante, l’opération 11.0/3 et
affiche le résultat :
init_lcd (0) ;
aff_float (11.0/3, 6);
9. Convertit, en virgule flottante, l’opération (-11.0/3) et
affiche le résultat :
init_lcd (0) ;
aff_float (-11.0/3, 6);
10. Convertit, en base 2, le nombre 0xFFFF et affiche le
résultat :
init_lcd (0) ;
aff_base (0xFFFF, 2) ;
11. Convertit, en base 3, le nombre 0xFFFF et affiche le
résultat :
init_lcd (0) ;
aff_base (0xFFFF, 3) ;
12. Convertit, en base 4, le nombre 0xFFFF et affiche le
résultat :
init_lcd (0) ;
aff_base (0xFFFF, 4) ;
13. Convertit, en base 8, le nombre 0xFFFF et affiche le
résultat :
init_lcd (0) ;
aff_base (0xFFFF, 8) ;
14. Convertit, en base 10, le nombre 0xFFFF et affiche le
résultat :
init_lcd (0) ;
aff_base (0xFFFF, 10) ;
15. Convertit, en base 16, le nombre 0xFFFF et affiche le
résultat :
init_lcd (0) ;
aff_base (0xFFFF, 16) ;
16. Affiche l’heure sous la forme HH : MM : SS :
init_lcd (0) ;
aff_heure (9, 3, 5) ;
______________________________________________________________________________ 14
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
17. Affiche le résultat de la conversion A/N (résolution 8
bits) sous la forme D.DD V :
init_lcd (0) ;
aff_CAN (128, 2) ;
19. Affiche, à la position (3, 1), le mot "être" :
18. Affiche, à la position (3, 1), la lettre ‘é’ :
init_lcd (0) ;
defini_cars (car3, 0);
xy_lcd (3, 1);
aff_car (0);
init_lcd (0) ;
defini_cars (car7, 0);
xy_lcd (3, 1);
aff_car (0);
aff_txt ("tre");
20. Clignotement de l’affichage, et la RAM du LCD est
intacte. Premier écran (affichage pendant une seconde) :
init_lcd (0) ;
aff_txt (" Clignotement\r"
" RAM intacte");
while (1){
tempo_ms (1000);
21. Deuxième écran (affichage pendant une seconde) :
onoff_lcd (0);
tempo_ms (1000);
22. Le premier écran est de retour :
onoff_lcd (1);
}
23. Affiche, à la position du curseur, le caractère Ω :
init_lcd (0) ;
aff_car (0xF4);
24. Affiche, à la position (5,1), le caractère  :
init_lcd (0) ;
xy_lcd (5, 1);
aff_car (0xF7);
______________________________________________________________________________ 15
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
____________________________________________________________________________________
Enjoy it !

Vous pouvez maintenant télécharger les fichiers en-tête, LCD4bits.h, LCD8bits.h et
car_spec.h, qui sont prêts à être inclus dans un programme source grâce à la
directive #INCLUDE
ici
______________________________________________________________________________ 16
Bibliothèque de fonctions en langage C- LCD
Nabil AL HOSSRI
Téléchargement
Explore flashcards