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