Afficher la valeur d'une variable sur un lcd
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Afficher la valeur d'une variable sur un lcd



  1. #1
    invitea5fe4634

    Question Afficher la valeur d'une variable sur un lcd


    ------

    Salut à tous,
    dans le cadre d'un PPE, nous devons programmer une carte EasyPic 4 en langage C (jusque là ça va), mais dans ma partie du programme, je dois afficher la valeur d'une variable (comprise entre 0.1 et 99.9 inclus, donc décimale) sur un écran LCD Xiamen Ocular (GDM0802A il me semble, mais je vous repréciserai ça demain si besoin est).
    La programmation se fait avec MikroC, et l'écran marche sans problème. Je peux par exemple coder:
    Code:
    char *text= "gwarf";
    
    void main() {
    
    
         LCD_Init(&PORTD); // Initialise le LCD connecté au Port D
    
         LCD_Cmd(LCD_CLEAR); // Efface l'écran
         LCD_Cmd(LCD_CURSOR_OFF); // Pas de curseur
         LCD_Out(1,1, text); // Ecrit sur le LCD, 1ere ligne, 1ere colonne
         Delay_ms(250);       //attend 250 ms
         LCD_Out(2,6,"mais pourquoi"); // Ecrit sur le LCD, 2e ligne, 6e colonne
    et ça m'affiche sur le LCD:
    gwarf
    mais pourquoi
    Mais dès que je lui demande de m'afficher la valeur d'une variable (définie comme float), il coince et me met des erreurs:

    Code:
    float *text= "debit choisi";
    float *debit= "10.3";
    
    
    void main() {
    
    
         LCD_Init(&PORTD); 
         LCD_Cmd(LCD_CLEAR); 
         LCD_Cmd(LCD_CURSOR_OFF); 
         LCD_Out(1,1, text); 
         Delay_ms(250);
         LCD_Out(2,6,debit);
    
               }
    Là par exemple ça ne marche pas...

    -----

  2. #2
    Jack
    Modérateur

    Re : Afficher la valeur d'une variable sur un lcd

    float *text= "debit choisi";
    float *debit= "10.3";
    Tout simplement parce qu'un pointeur sur des float ne convient pas .Il faut écrire:
    char *text= "debit choisi";
    char *debit= "10.3";

    Je te rappelle qu'une chaine de caractères est manipulée par un pointeur de caractères en C.

    A+

  3. #3
    invite0e5af214

    Re : Afficher la valeur d'une variable sur un lcd

    Et si tu veux afficher une VARIABLE, alors tu dois concevoir ou utiliser une fonction qui convertira un float en une chaine de caractères.

    Si je peux me permettre une remarque .... : Il est bon d'éviter autant que possible l'utilisation des flottants avec des petites unités comme les PIC.
    Ces microcontrolleurs ne sont absolument pas fait pour ca et sont donc obligés de faire des tonnes de calculs pour compenser cette lacune.
    Ce qui implique que ton compilateur, à la vue du moindre float va charger toute une librairie des fonctions qui vont avec....tout ca pour un PIC qui n'a pas une mémoire programme "ilimitée".

    Après si c'est vraiment INDISPENSABLE......


    Bonne chance

  4. #4
    invitef86a6203

    Re : Afficher la valeur d'une variable sur un lcd

    mettre la valeur à afficher dans une variable binaire.
    Les variables sont globales, comme sur le prog initial.

    On considère que la valeur sera multipliée par 10 soit de 0-999.
    On économisera la division en insérant simplement un point à l'affichage , entre 99 et 9 soit 99.9.
    Le caractères ASCII de '0' est 0x30 si on incrémente 0x30 jusqu' à 0x39 on aura les caractères de 0 à 9.

    Ici on prend debit en int sur 16 bits (vérifier si le int du compilo fait bien 16 bits)
    On créé un Buffer d'affichage contenant par défaut "00.0"
    Ces caractères seront remplacés par les bons lors du passage dans la routine de conversion binaire > ASCII

    En C la fonction serait sprintf, mais les "float" et les "sprintf" risque de saturer vite fait le petit µc.

    programme non testé;
    Code:
    char *text= "debit choisi";
    char *Buffer= "10.3";
    int debit;
    
    void main() {
    
         debit = 103;
         LCD_Init(&PORTD); 
         LCD_Cmd(LCD_CLEAR); 
         LCD_Cmd(LCD_CURSOR_OFF); 
         LCD_Out(1,1, text); 
         Delay_ms(250);
         ConvAscii()
         LCD_Out(2,6,Buffer);
         }
    
    ConvAscii()
    {
    int val;
    	Buffer[0] = 0x30 ; '0'
    	Buffer[1] = 0x30 ; '0'
    	Buffer[3] = 0x30 ; '0'
    	val = debit;
    	While (val>100) 
    		{
    		Buffer[0]++;
    		val = val -100;
    		}
    	While (val>10) 
    		{
    		Buffer[1]++;
    		val = val -10;
    		}
    	Buffer[3] += val;
    }

  5. A voir en vidéo sur Futura
  6. #5
    invitea5fe4634

    Thumbs up Re : Afficher la valeur d'une variable sur un lcd

    Merci pour vos réponses! Je teste ça demain
    En attendant, je vais suivre la suite des cours sur le Site du Zér0 histoire de savoir ce qu'est exactement une chaîne de caractères ^^ .

  7. #6
    invite0e5af214

    Re : Afficher la valeur d'une variable sur un lcd

    Code:
    "Je suis une chaine de caractères"


    Plus précisement, ce qui se trouve entre guillemets est un pointeur sur une chaine de caractères.

    C'est pourquoi quand tu faisais :
    Code:
    float *txt = "10.3"
    Tu demandais à ce qu'un float* soit égal à un char*
    D'où tes erreurs

Discussions similaires

  1. Comment définir une variable pour l'afficher sur un LCD
    Par invite3c35244f dans le forum Électronique
    Réponses: 4
    Dernier message: 21/11/2007, 09h46
  2. PIC, afficher l'heure sur un LCD ?
    Par invite116c4f9b dans le forum Électronique
    Réponses: 2
    Dernier message: 23/10/2007, 18h34
  3. Afficher une image sur un écran LCD
    Par invite1f3675f2 dans le forum Électronique
    Réponses: 5
    Dernier message: 05/06/2007, 22h28
  4. Afficher infos sur un LCD via un PC
    Par invite071acae1 dans le forum Électronique
    Réponses: 2
    Dernier message: 22/03/2007, 16h08
  5. Afficher valeur HTML Java
    Par inviteeab4d8e2 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 8
    Dernier message: 01/03/2005, 17h38
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...