pages

24 janv. 2016

Utilisation de la fonction printf()

L'utilisation de la fonction printf() dans un programme C est courante car elle permet une mise en forme de l'affichage.
affichage mesure



Printf() et XC8



pour obtenir cet affichage il suffit d'écrire : 

printf("Vbatterie = %.2f V \n",vbat)

L'utilisation de cette fonction dans un programme pour un microcontrôleur peut être intéressante pour  par exemple :

  • l'affichage sur un écran lcd,
  • envoyer des données formatées sur une liaison série,
  • ou tout autre liaison (CAN, ...).


Regardons la structure de cette fonction :

printf(control, var1, var2, ...) 

avec control qui contient deux types d'objets :
  
des caractères qui seront recopier tel quel, par ex "Vbatterie = "
    et des spécifications de conversion, par ex "%.2f".


    Attention, il n'est pas nécessaire d'avoir systématiquement des spécifications de conversion.

    Nous allons bien sûr nous intéresser à ces spécifications de conversion qui commencent par %  puis :
    • des arguments,
    • un caractère de conversion.

    Les arguments peuvent être :
    • un signe "-" qui indique que le cadrage de la valeur convertie se fera à gauche,
    • des chiffres pour indiquer la largeur minimale ou le nombre minimum de caractères à afficher, si ces chiffres commencent par "0" les caractères de remplissage seront des "0" sinon les caractères de remplissage seront des blanc,
    • un point pour séparer la largeur minimale de la suite,
    • des chiffres pour indiquer la précision (nombre de chiffres à afficher à droite du point décimal,
    • un modificateur pour indiquer comment sera interprété l'argument.


    Les caractères de conversion sont :
    • d : entier décimal signé,
    • o : entier base huit (octal) non signé,
    • u : entier décimal non signé,
    • x : entier base 16(hexadécimal) non signé,
    • X : entier base 16 (hexadécimal) non signé en majuscules,
    • c : un seul caractère,
    • s : une chaîne ( fin = caractère nul '\0' ou précision),
    • e : float ou double,
    • E : float ou double en majuscules,
    • f : float ou double en décimal,
    • g : comme e ou f suivant la précision,
    • G : comme g mais en majuscules
    Le nombre de variables est normalement identique au nombre de spécifications de conversion.
                          Après relecture cela n'est pas très enthousiasmant, donc quelques exemples pour illustrer le paragraphe précédent :

                          Déclarations des variables utilisées :

                            int cmpt = -128, val = 128; 
                            double vbat = 12.46789;
                            char *chaine = "chaine de caracteres";

                          Exemples :

                            printf("Salut Patou149\n");                     --> Salut Patou149
                            printf("Vbatterie = %.2f V \n",vbat);      --> Vbatterie  = 12.47 V
                            printf("Vbatterie = %.4f V \n",vbat);      --> Vbatterie = 12.4679 V
                            printf("Dec = %u Hex = %x ",val,val);   --> Dec = 128 Hex = 80
                            printf("Dec signe = %d",cmpt);             --> Dec signe = -128
                            printf("%s",chaine);                               --> chaine de caracteres


                          Quelques indications supplémentaires :

                            - pour afficher "%" il faut écrire "%%",
                            - pour afficher une variable avec le chiffre précédé du signe +, il faut écrire %+d par ex pour un entier décimal signé,
                            - de même pour insérer un espace avant la variable : % d.

                          Oui mais pour utiliser cette fonction "printf()" dans un programme en C pour mon pic, je fais comment ?
                          pas de panique, c'est très simple il suffit de créer une fonction "putch(char c)" dans votre programme et cette fonction sera du style :

                          void putch(char c)
                          {
                              LCD_data(c);
                          }
                          

                          avec "LCD_data(c)" votre fonction qui affiche un caractère sur votre afficheur lcd.

                          La fonction "printf()" utilise "putch()" pour afficher sur le périphérique de sortie standard (l'écran sur un ordi) les caractères nécessaires.

                          En redéfinissant la fonction "putch()" il est donc possible de choisir le périphérique de sortie, cela peut être un écran lcd mais aussi une liaison série ou autre.

                          Il suffit pour cela d'appeler la fonction adéquate dans "putch()".

                          Ex pour une liaison série :

                          void putch(char c)
                          {
                              Serie_data(c);
                          }
                          

                          A+

                          Aucun commentaire:

                          Enregistrer un commentaire