Afficheur lcd refuse de compter au dela de 255
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Afficheur lcd refuse de compter au dela de 255



  1. #1
    invite7dc03981

    Afficheur lcd refuse de compter au dela de 255


    ------

    Bonsoir à tous,

    Je rencontre un petit problème avec mon afficheur lcd 2*16 caractére lm1602 acheté chez gotronic, le probleme est que je n'arrive pas a afficher un nombre plus grand que 255 sur l'afficheur!!!! Alors le char compte de 0 à 255 mais je le remplace par un int ou short mais pareil l'afficheur ne veut pas dépasser 255, j'ai meme creer une variable result de type short qui mulitplie par 10 le chiffre cnt, par exemple si cnt est de 30, il doit m'afficher 300 mais non il accepte pas, par contre de 0 jusqu'a 255 il accepte alors c'est quoi le probleme??



    Code:
    #define  BP1       PORTC.F0
    #define  BP2       PORTC.F1
    #define  RESET     PORTC.F2
    
    
    
    unsigned short cnt=0;
    unsigned short result;
    
    char txt0[] = "H";
    char txt1[] = "Cl: ";
    char txt2[] = "Estimation Rec: ";
    char txt3[] = "E";
    
    int txt[6];
    
    
    // LCD module connections
    sbit LCD_RS at RB4_bit;
    sbit LCD_EN at RB5_bit;
    sbit LCD_D4 at RB6_bit;
    sbit LCD_D5 at RB1_bit;
    sbit LCD_D6 at RB2_bit;
    sbit LCD_D7 at RB3_bit;
    
    sbit LCD_RS_Direction at TRISB4_bit;
    sbit LCD_EN_Direction at TRISB5_bit;
    sbit LCD_D4_Direction at TRISB6_bit;
    sbit LCD_D5_Direction at TRISB1_bit;
    sbit LCD_D6_Direction at TRISB2_bit;
    sbit LCD_D7_Direction at TRISB3_bit;
    
    
    
    void main() {
      INTCON.GIE=1;
      INTCON.INTE=1;
      INTCON.INTF=0;
      TRISC=1;
      PORTC=0;
      TRISB.F0=1;
      ANSEL  = 0;                              // Configure AN pins as digital I/O
      ANSELH = 0;
      Lcd_Init();                              // Initialize LCD
      Lcd_Cmd(_LCD_CLEAR);                     // Clear display
      Lcd_Cmd(_LCD_CURSOR_OFF);                // Cursor off
      Lcd_Out(1, 3, txt0);
      Lcd_Out(2, 2, txt1);
     
     
      WordToStr(cnt, txt);                   // Transform counter value to string
      Lcd_Out(2, 10, txt);                   // Display counter value on LCD
      
      while(1){
      if(BP1==1) {
      delay_ms(150);
      while(!BP1);
      delay_ms(150);
      cnt++;
      WordToStr(cnt, txt);                   // Transform counter value to string
      Lcd_Out(2, 10, txt);                   // Display counter value on LCD
    
      }
      
      else if(RESET==1){
      cnt=0;
      WordToStr(cnt, txt);                   // Transform counter value to string
      Lcd_Out(2, 10, txt);                   // Display counter value on LCD
      }
    
    
      else if(BP2==1){
      Lcd_Cmd(_LCD_CLEAR);                     // Clear display
      Lcd_Cmd(_LCD_CURSOR_OFF);                // Cursor off
      Lcd_Out(1, 2, txt2);
      Lcd_Out(2, 11, txt3);
      result=cnt*10;
      WordToStr(result, txt);                   // Transform counter value to string
      Lcd_Out(2, 2, txt);                   // Display counter value on LCD
      delay_ms(2000);
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Out(1, 3, txt0);
      Lcd_Out(2, 2, txt1);
      WordToStr(cnt, txt);                   // Transform counter value to string
      Lcd_Out(2, 10, txt);                   // Display counter value on LCD
      }
    
    
    
      }
      }

    -----

  2. #2
    jojo150393

    Re : Afficheur lcd refuse de compter au dela de 255

    Salut,
    j'imagine que c'est la fonction WordToStr(cnt, txt) qui permet de faire la conversion int/ascii. Elle doit donc faire la conversion que sur un octet et non pas un "word" comme elle indique. Si tu veux afficher des nombres plus grand, il va surement falloir te faire ta propre fonction.

  3. #3
    flyingrock

    Re : Afficheur lcd refuse de compter au dela de 255

    Bonjour,

    A mon avis le problème vient de la déclaration de la variable "cnt", elle est déclarée en unsigned short soit de 0 à 255.
    Essai de mettre unsigned int.

    @+

  4. #4
    invite7dc03981

    Re : Afficheur lcd refuse de compter au dela de 255

    Super merci, le probleme est partiellement réglé, j'ai remplacé par des int et effectvement l'afficheur affiche jusqu'a 65.000 logique par contre j'ai vouli aller plus loin vers les 200.000 et la j'ai unsigned lont int pour les deux variables cnt et result mais l'afficheur depasse plus 65.000 cette fois alors que unsigned long int est capable de compter jusqu'a plus de 2 millions ile me semble? un souci au niveau de la taille des bits de l'ordi?

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

    Re : Afficheur lcd refuse de compter au dela de 255

    Au lieu de mettre WordToStr(cnt, txt) tu le remplaces par LongWordToStr ou LongToStr et ça devrait le faire.

    @+

  7. #6
    invite7dc03981

    Re : Afficheur lcd refuse de compter au dela de 255

    Salut flyingrock merci t'es génial ca marche très bien, j'aurai une autre question, lorsque l'afficheur affiche le nombre 250000 par exemple c'est pas obligatoire mais j'aimerai qu'il affiche 250.000 avec un point pour que ce soit bien lisible ou encore 2500 je voudrai qu'il affiche 2.500, avez vous une idée de comment on peut faire?

    Merci encore

  8. #7
    flyingrock

    Re : Afficheur lcd refuse de compter au dela de 255

    Code:
                void aff_cnt_dtmf ()
               {
               static char ch1;
               lcd_out(4,15,"D");
          ch1 = (cnt_timeout_veille_dtmf / 10000) % 10;
          Lcd_Chr(4,16,48+ch1);
          ch1 = (cnt_timeout_veille_dtmf / 1000) % 10;
          Lcd_Chr(4,17,48+ch1);
          ch1 = (cnt_timeout_veille_dtmf / 100) % 10;
          Lcd_Chr(4,18,48+ch1);
          ch1 = (cnt_timeout_veille_dtmf / 10) % 10;
          Lcd_Chr(4,19,48+ch1);
           ch1 = (cnt_timeout_veille_dtmf % 10) ;
          Lcd_Chr(4,20,48+ch1);
    
               }
    Je t'ai mis un bout de code comme exemple, l'idée c'est de prendre ta valeur et la décomposer en caractères en faisant une succession de divisions.
    Puis tu affiches un par un ces caractères à l’endroit que tu veux de ton écran, et tu ajoutes a la position que tu veux ton point avec lcd_out(2,8,"."); par exemple.

Discussions similaires

  1. afficheur lcd
    Par invitef0165562 dans le forum Électronique
    Réponses: 14
    Dernier message: 06/07/2011, 00h57
  2. Réponses: 1
    Dernier message: 30/10/2010, 21h56
  3. afficheur LCD
    Par invite74119562 dans le forum Électronique
    Réponses: 0
    Dernier message: 29/04/2008, 14h01
  4. afficheur lcd en afficheur 7 segment
    Par invite3cc40cdb dans le forum Électronique
    Réponses: 3
    Dernier message: 04/02/2008, 10h43
  5. 85.255.113.114,85.255.112.83
    Par invitef0ba6147 dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 3
    Dernier message: 07/01/2008, 19h22
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...