Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

Compteur sept segments (langage c)



  1. #1
    hh27

    Exclamation Compteur sept segments (langage c)

    Je voudrais réaliser un programme (en langage C) pour compter de 0 à 99, mais c'est compliqué vu que je veux afficher sur des afficheurs sept segments. En fait, je voudrais que quand un afficheur (A) arrive à 9, il fasse basculer l'autre afficheur (B) à 1 et que l'afficheur (A) passe à 0.

    AB
    01
    ...
    AB
    09
    ensuite
    AB
    10
    ...

    J'espère que vous m'avez compris, j'attends vos réponses. Merci

    -----


  2. Publicité
  3. #2
    DAUDET78

    Re : Compteur sept segments (langage c)

    Bonjour Hh27 et bienvenue sur FUTURA

    Ce n'est pas une question de "C" ou de patois, c'est un problème d'écriture d'organigramme (et ensuite de traduction avec le langage que tu veux). Ca se fait avec des rectangles pour les actions et des losanges pour les décisions.

    1/ une horloge arrive? non on va à 1/
    2/ on incrémente une variable_unité
    3/ la variable_unité est plus grande que 9? non, on va à 1/
    4/ on met la variable_unité à 0
    5/ on incrémente une variable_dizaine
    6/ la variable_dizaine est plus grande que 9? non, on va à 1/
    7/ on met la variable_dizaine à 0
    8/ on va à 1/

    Que maintenant tu sortes tes deux variables sur des afficheurs 7 segment .... je te laisses faire (appel d'un sous-programme en 2/ et 4/ et 5/ et 7/ pour visualiser le changement)
    Dernière modification par DAUDET78 ; 27/01/2009 à 15h51.
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  4. #3
    hh27

    Cool Re : Compteur sept segments (langage c)

    Merci d'avoir répondu. En fait, si, il s'agit bien d'une question de langage informatique, car je sais ce que je veux faire (même si ça n'a pas été bien formulé). Je voudrais juste de l'aide pour faire le programme qui après me servira à compter avec des afficheurs.

  5. #4
    DAUDET78

    Re : Compteur sept segments (langage c)

    Alors il faut commencer par le B A BA
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  6. #5
    hh27

    Thumbs down Re : Compteur sept segments (langage c)

    Merci, ça m'aide pas vraiment, le B A BA je l'ai...

  7. A voir en vidéo sur Futura
  8. #6
    DAUDET78

    Re : Compteur sept segments (langage c)

    Donc il n'y a plus qu'à pisser de la ligne de programme ..... ne compte pas sur moi pour le faire !
    L'age n'est pas un handicap .... Encore faut-il arriver jusque là pour le constater !

  9. Publicité
  10. #7
    hh27

    Re : Compteur sept segments (langage c)

    Merci beaucoup, je vais me vider de suite...

  11. #8
    Tony78

    Re : Compteur sept segments (langage c)

    Bonjour hh27,

    Pourrais-tu nous en dire un peu plus sur ton système ?
    Aurais-tu un schéma représentant le circuit en question ?

    Au niveau du programme, pars-tu de quelquechose d'existant ou bien es-tu devant une feuille blanche ?
    Si tu as déjà quelquechose, as-tu réussi à contrôler correctement tes afficheurs un par un ?

  12. #9
    hh27

    Cool Re : Compteur sept segments (langage c)

    je suis sans doute sur une piste, j'en ai parlé avec quelqu'un que je connais, apparament c'est un soucis mathématique à appliquer sur un programme, mais ça m'a pas l'air simple, je vais voir, si j'ai encore des soucis, je vous tiens au courant, merci quand même.

    A bientôt, peut-être!

  13. #10
    Tony78

    Re : Compteur sept segments (langage c)

    Problème mathématique ?

    Hm...tu veux dire récupérer les dizaines et unités de ton nombre à afficher (Je ne vois pas ce qu'il pourrait y avoir d'autre comme maths dans ton système) ?
    Code:
    unités = valeur % 10; //Valeur modulo 10...pour plus d'explications...google sera ton ami :)
    dizaines = (int)(valeur / 10); // Tu divises ta valeur par 10 et force le résultat (cast) en entier : La partie décimale est perdue, il reste la partie entière

  14. #11
    hh27

    Smile Re : Compteur sept segments (langage c)

    Ouais c'est ce qu'on m'a dit, en fait, donc je devrais m'en sortir
    Merci quand même de m'offrir votre aide.

  15. #12
    Jack

    Re : Compteur sept segments (langage c)

    Je n'arrive pas à trouver où est le problème. Il suffit de faire un compteur qui s'incrémente au rythme de l'horloge (tu n'as pas précisé la source du comptage) et qu'on remet à 0 lorsqu'il atteint 100.

    On envoie les unités sur un afficheur et les dizaines sur l'autre.

    Après,il faut voir en fonction de l'électronique. Par exemple, faut-il gérer le multiplexage des afficheurs ou pas?

    A+

  16. Publicité
  17. #13
    hh27

    Smile Re : Compteur sept segments (langage c)

    Et bien, la première parti, je sais faire, c'est déjà prêt d'ailleurs, mais c'est pour programmer la séparation dizaine/unité dans mon programme que ça se complique, et oui, il a aussi le multiplexage à prendre en compte.

    Mais, comme je l'ai dit, je suis sur la voie, merci encore de m'apporter votre aide.

  18. #14
    Jack

    Re : Compteur sept segments (langage c)

    mais c'est pour programmer la séparation dizaine/unité dans mon programme que ça se complique


    celà résout-il ton problème? :

    Code:
    int compteur, dizaine, unite;
    
    ...
    
    unite = compteur % 10;
    dizaine = compteur / 10;
    
    ...

  19. #15
    Eric0269

    Re : Compteur sept segments (langage c)

    Salut hh27,
    ,une autre solution :
    #include <stdio.h>

    unsigned char A, B;

    void incremente()
    {
    B++;
    if (B > 9) {
    A++;
    if (A > 9) {
    A = 0;
    }
    B = 0;
    }
    }

    int main(void)
    {
    A = B = 0;
    while (1) {
    printf("%d%d\n", A, B);
    incremente();
    usleep(500);
    }
    return 0;
    }
    Peut pas faire mieux.
    E.

    PS: préférer les balises "code" qui permettent de garder l'indentation (c'est fait pour çà
    Dernière modification par Jack ; 28/01/2009 à 10h38.

  20. #16
    whoami

    Re : Compteur sept segments (langage c)

    Bonjour,
    Citation Envoyé par Eric0269 Voir le message
    Peut pas faire mieux.
    Si, ne serait-ce qu'en évitant d'utiliser des variables globales.

  21. #17
    polo974

    Re : Compteur sept segments (langage c)

    Citation Envoyé par whoami Voir le message
    Bonjour,
    Si, ne serait-ce qu'en évitant d'utiliser des variables globales.
    variable locale = sur la pile qu'il faut donc gérer,passer,... ça prend du temps, ça consomme, finalement, c'est vachement bien, les variables globales!!!

    Même s'il ne faut pas en abuser...

  22. #18
    Eric0269

    Re : Compteur sept segments (langage c)

    Peut importe.
    L'idée était de présenter un bout de code à hh27 et ce, de manière la plus simple possible.
    Après selon les compilateurs, les cibles visées (cpu, µcontroleur), et l'optimisation souhaitée (taille, vitesse), on peut adopter un codage spécifique.
    E.

  23. Publicité
  24. #19
    whoami

    Re : Compteur sept segments (langage c)

    Bonjour,
    Citation Envoyé par polo974 Voir le message
    variable locale = sur la pile qu'il faut donc gérer,passer,... ça prend du temps, ça consomme, finalement, c'est vachement bien, les variables globales!!!

    Même s'il ne faut pas en abuser...
    Pour programmer proprement, il s'agit même de les proscrire totalement.

    Elles ne servent qu'à écrire du code peu lisible (donc peu maintenable), non réutilisable, etc. Bref, tout ce qu'il ne faut pas faire.

    Et les gains que tu cites sont absolument négligeables face à ceux qui sont générés, beaucoup plus importants.

  25. #20
    Eric0269

    Re : Compteur sept segments (langage c)

    Peut me faire
    Code:
    #include <stdio.h>
    
    void incremente(unsigned char *A, unsigned char *B)
    {
      (*B)++;
      if (*B > 9) {
        (*A)++;
        if (*A > 9) {
          *A = 0;
        }
        *B = 0;
      }
    }
    
    int main(void)
    {
      unsigned char A, B;
      A = B = 0;
      while (1) {
        printf("%d%d\n", A, B);
        incremente(&A, &B);
        usleep(500);
      }
      return 0;
    }
    Bon, j'espère que hh27 y trouvera son compte, avec ou sans variables globales.
    E.

  26. #21
    whoami

    Re : Compteur sept segments (langage c)

    Bonjour,

    Voilà, c'est mieux.

    Sauf que ... (je sais, ça te fait...) j'aurais plutôt écrit

    Code:
    ...
    
    void incremente(unsigned char *A, unsigned char *B)
    {
      (*B)++;
      if (*B > 9) {
        *B = 0;
        (*A)++;
        if (*A > 9) {
          *A = 0;
        }
      }
    }
    pour éviter la dispersion de l'attention en éloignant les 2 opérations de même niveau dans le bloc if (*B > 9) {

  27. #22
    HULK28

    Re : Compteur sept segments (langage c)

    Bonjour,

    si tu utilises un PIC avec des afficheurs cathodes communes par exemple voici un exemple de programme:

    Tu afficheras 00,01,02.....99 avec une incrémentation à chaque seconde.

    Code:
    unsigned short i, j, voie, mask_1, mask_2;
    
    unsigned short mask(unsigned short num) {  // datas pour chaque chiffre de 0 à 9
      switch (num) {
        case 0 : return 0x3F;                                
        case 1 : return 0x06;
        case 2 : return 0x5B;
        case 3 : return 0x4F;
        case 4 : return 0x66;
        case 5 : return 0x6D;
        case 6 : return 0x7D;
        case 7 : return 0x07;
        case 8 : return 0x7F;
        case 9 : return 0x6F;
      } 
    }
    
    
    void interrupt() {  // activation séquentielle de chaque Digit
      if (voie==0) {
        PORTA = 0;
        PORTD = mask_2;    // prepare le masque du digit
        PORTA = 2;              // active le 1er digit, désactive le 2eme digit.
        voie = 1;
      } else {
        PORTA = 0;
        PORTD = mask_1;   // prepare le masque du digit               
        PORTA = 1;          // active le 1er digit, désactive le 2eme digit.        
        voie = 0;
      }
      TMR0 = 0;
      INTCON = 0x20;
    }
    
    void main() {
      OPTION_REG  = 0x80;
      mask_2        = 0x3F;
      j           =   0;
      TMR0        =   0;
      INTCON      = 0xA0;                
      PORTA       =   0;
      TRISA       =   0;  
      PORTD       =   0;
      TRISD       =   0;
    
      do {
        for (i = 0; i<=99; i++) {        // compte de 0 to 99
          j     = i % 10u;
          mask_1  = mask(j);               // prepare le Digit1
          j     = (char)(i / 10u) % 10u;
          mask2  = mask(j);               // prepare le Digit2
          Delay_ms(1000);        // attente d'une seconde
        }
      } while (1);             
    }
    @+
    Tout est bien qui finit.

  28. #23
    polo974

    Re : Compteur sept segments (langage c)

    Citation Envoyé par whoami Voir le message
    Bonjour,

    Pour programmer proprement, il s'agit même de les proscrire totalement.

    Elles ne servent qu'à écrire du code peu lisible (donc peu maintenable), non réutilisable, etc. Bref, tout ce qu'il ne faut pas faire.

    Et les gains que tu cites sont absolument négligeables face à ceux qui sont générés, beaucoup plus importants.
    Comme toujours, ça dépend du domaine...
    Quand on cherche la beauté dogmatique, on arrive à des trucs absurdes où on finit par pondre une usine à gaz qui consomme des kW, là où un micro 4 bit à 32768Hz suffit...
    ici (ce forum), c'est l'électronique, donc le monde réel à son ot à dire...

  29. #24
    whoami

    Re : Compteur sept segments (langage c)

    Bonjour,
    Citation Envoyé par polo974 Voir le message
    Comme toujours, ça dépend du domaine...
    Quand on cherche la beauté dogmatique, on arrive à des trucs absurdes où on finit par pondre une usine à gaz qui consomme des kW, là où un micro 4 bit à 32768Hz suffit...
    ici (ce forum), c'est l'électronique, donc le monde réel à son ot à dire...
    Je ne vois pas en quoi le fait d'éviter des variables globales te conduirait à "une usine à gaz qui consomme des kW". Ai-je parlé de changer le matériel ?

    Je suis parfaitement conscient des contraintes matérielles.

    Mais ça ne m'empêche pas de soutenir que tant qu'elles ne se font pas sentir, ce qui est sans le moindre doute le cas pour le petit programme concernant ce sujet, il faut travailler proprement, ne serait-ce que pour ne pas en perdre l'habitude.
    J'ai vu, lu, et dû corriger nombre de codes pour des Pic en raison de codes mal écrits, abusant entre autres de variables globales, alors que ça passait tranquillement avec une écriture propre, sans pour autant remettre en cause le matériel choisi.

  30. Publicité

Sur le même thème :

Discussions similaires

  1. un compteur => un afficheur 7 segments
    Par Antoane dans le forum Électronique
    Réponses: 18
    Dernier message: 27/03/2012, 06h56
  2. Cablage compteur 7 segments
    Par charly123 dans le forum Électronique
    Réponses: 4
    Dernier message: 18/04/2008, 09h18
  3. Afficheur sept segments
    Par smokerlous dans le forum Électronique
    Réponses: 1
    Dernier message: 29/03/2008, 20h35
  4. Compteur - Afficheurs 7 segments
    Par italiano76 dans le forum Électronique
    Réponses: 68
    Dernier message: 14/05/2007, 18h24
  5. résistance pour afficheur sept segments
    Par sevynaej dans le forum Électronique
    Réponses: 2
    Dernier message: 23/02/2005, 08h31