Ignorer la navigation

Fiche N°8 : Gestion d'un afficheur 7 segments

Utilisation du buzzer de la carte DangerShield à l'aide d'une boucle WHILE

 
L'afficheur 7 segments de la carte DangerShield est commandé par le composant 74HC595N. Il s'agit d'un registre à décalage de 8 bits (8 Bit Shift Register). Ce registre « reçoit » par une liaison série les codes (sous le format byte) et il les affiche sur ses sorties Q.


Schéma de l'afficheur de la carte « dangerShield » :

 

Définition des codes à envoyer à l'afficheur pour avoir les chiffres :

chiffre | DP(point) GFEDCBA (led correspondante)
1. En analysant les codes binaires associés au chiffres :
Pour allumer une Led de l'afficheur, faut-il envoyer un 0 ou un 1 ?


2. Dessiner, en rouge, sur l'afficheur correspondant au chiffre 9 (en bas du tableau ci-contre), les leds allumées. En déduire le code binaire pour afficher le chiffre 9 :


3. Quelle diode commande le bit de poids fort (bit de gauche) ?

                                        

 

4.Compléter le programme ci-dessous (code binaire des leds pour le chiffre 9)

Remarque : on notera qu'une table de variable de type byte ( = 8 bits) a été crée pour mémoriser les codes des 10 chiffres (elle se nomme numeri[i] où i est un index dont la valeur peut aller de 0 à 9). Cette table possède donc 10 cases. Ainsi le contenu de numeri[0] est B11000000, celui de numeri[5] est B10010010, etc. Le chiffre entre crochet est l'index qui permet d'accéder au contenu de la case mémoire voulue.


//**** début du programme *********//

// definition des variables //
int i = 0;
byte j;

const byte numeri[10] = {
  B11000000, // 0  leds correspondant au chiffre 0 //
  B11111001, // 1
  B10100100, // 2
  B10110000, // 3
  B10011001, // 4
  B10010010, // 5
  B10000010, // 6
  B11111000, // 7
  B10000000, // 8
  B ………... , // 9     à compléter   //
};

// definition des adresses pour communiquer avec le CI commande l'afficheur //
int LATCH_PIN = 7; // on aurait aussi put utiliser: #define LATCH_PIN 7 //
int CLOCK_PIN = 8;
int DATA_PIN = 4;

void setup()
{
  pinMode(LATCH_PIN, OUTPUT); // parametrage des sorties Arduino //
  pinMode(CLOCK_PIN, OUTPUT); // parametrage des sorties Arduino //
  pinMode(DATA_PIN,OUTPUT);   // parametrage des sorties Arduino //
}

void loop()
{
      for (int i=9; i>-1; i--)
      {
        j = numeri[i];   // affectation à j du code 8 bits
        digitalWrite(LATCH_PIN, LOW);  // mise en route de la liaison série //
        shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, j); // envoi du byte j//
        digitalWrite(LATCH_PIN, HIGH); // arrêt de la liaison série //
        delay(500);   // attente
      }
}
//**** fin du programme ****//



5. Écrivez le programme précédent, testez-le et décrivez ce qui se passe.

6. Modifiez le programme pour inverser l'ordre d'affichage. Faire valider par le professeur.