Bibliothèque de fonctions C LCD 2x16

Telechargé par marcusndiaye1996
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
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 fonctions d'initialisation où l'on distingue les deux modes,
o fonctions d'affichage qui sont communes pour les deux modes.
Description des fonctions
Le tableau suivant montre leveloppement de ces différentes routines suivant la structure
générale d'un fichier en-tête :
______________________________________________________________________________
Bibliothèque de fonctions en langage C- LCD Nabil AL HOSSRI
1
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: nalhossri@free.fr et nabil.al-hossri@u-bordeaux1.fr
Copyright © N. AL HOSSRI IUT GEII Bordeaux
All rights reserved
Do not modify!
*/
/*==============================================================*/
#ifndef LCD4BITS_H ou LCD8BITS_H //facultatif (mais il faut faire attention de ne pas
#define LCD4BITS_H ou LCD8BITS_H // inclure le même .h plus d'une fois dans un
projet).
/**********************************************************************************
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 { //une union de nom mon_octet constituée par une structure de 8 bits
//et un byte à la même adresse mémoire.
struct { //une structure 8 bits (champ de bits).
byte bit0:1,
bit1:1,
bit2:1,
bit3:1,
bit4:1,
bit5:1,
bit6:1,
bit7:1;
}bits;
byte octet; //un byte (octet).
} mon_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.
______________________________________________________________________________
Bibliothèque de fonctions en langage C- LCD Nabil AL HOSSRI
2
numEctron http://nalhossri.free.fr
____________________________________________________________________________________
10k
PTB6
PTB5
PTB4
PTB1
PTB3
PTB2
PTB0
MC68HC908GP32
+5v
VSS
VDD
VEE
RS
RW
E
D0
D1
D2
D3
D4
D5
D6
D7
A
K
1
2
16
3
4
5
6
7
8
9
10
11
12
13
14
15
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 des 4 broches du micro au choix:
#define DATA4 PTB_PTB3 //bit 3 du PORTB ou toute autre broche.
#define DATA5 PTB_PTB4 //bit 4 du PORTB ou toute autre broche.
#define DATA6 PTB_PTB5 //bit 5 du PORTB ou toute autre broche.
#define DATA7 PTB_PTB6 //bit 6 du PORTB ou toute autre broche.
//bits de direction des broches de données:
#define DDR_DATA4 DDRB_DDRB3 // bit de direction de la broche PTB_PTB3.
#define DDR_DATA5 DDRB_DDRB4
#define DDR_DATA6 DDRB_DDRB5
#define DDR_DATA7 DDRB_DDRB6
//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
______________________________________________________________________________
Bibliothèque de fonctions en langage C- LCD Nabil AL HOSSRI
3
numEctron http://nalhossri.free.fr
____________________________________________________________________________________
En mode 8 bits
10k
PTA7
PTA6
PTA5
PTB6
PTA4
PTB7
PTB5
MC68HC908GP32
+5v
PTA3
PTA2
PTA1
PTA0
VSS
VDD
VEE
RS
RW
E
D0
D1
D2
D3
D4
D5
D6
D7
A
K
1
2
16
3
4
5
6
7
8
9
10
11
12
13
14
15
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 ecr_ctrl(byte ctrl);
void ecr_data(byte data);
void busy_lcd(void);
void init_lcd(byte curseur);
void xy_lcd(byte x, byte y);
void aff_car(byte c);
void aff_txt(byte *message);
void efface_lcd(void);
void defini_cars(const byte *c, byte char_code);
void onoff_lcd(byte onoff);
/* Fonctions additionnelles permettant de gérer les différentes conversions HEXA/ASCII, FLOAT/ASCII...,
______________________________________________________________________________
Bibliothèque de fonctions en langage C- LCD Nabil AL HOSSRI
4
numEctron http://nalhossri.free.fr
____________________________________________________________________________________
et affichage direct dans la RAM du LCD : */
void aff_base(dword hexa, byte base);
void aff_float(float data, byte decimale);
void aff_CAN(byte CAN, byte decimal);
void 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 = mon_octet.bits.bit4;
DATA5 = mon_octet.bits.bit5;
DATA6 = mon_octet.bits.bit6;
DATA7 = mon_octet.bits.bit7;
LCD_RS=0; //envoie un octet de commande.
LCD_RW=0; //écriture dans la RAM du LCD.
LCD_E=1; //validation par l'impulsion E.
LCD_E=0;
//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; //validation par l'impulsion E.
LCD_E=0;
//test du bit Busy ou attente de #2ms pour que le LCD soit prêt.
busy_lcd();
}
______________________________________________________________________________
Bibliothèque de fonctions en langage C- LCD Nabil AL HOSSRI
5
1 / 16 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!