C’est juste un petit instructable pour aider les gens à utiliser rapidement un afficheur 7 segments avec disons un Arduino ou autre microcontrôleur. Ces écrans nécessitent 8 datalines et c’est un peu beaucoup à sacrifier sur la plupart des microcontrôleurs, donc il y a une meilleure façon: à l’aide d’un registre à décalage HC595 ou HCT595. Dans ce cas l’affichage doit seulement 3 lignes de données.
Maintenant, il peut être un peu intimidant pour les débutants à comprendre quelles broches pour connecter avec quoi et puis comment obtenir les numéros appropriés à la lumière, mais si vous respectez quelques règles de base, il est assez facile. (Note. la plupart des lieux que j’ai vérifié la HCT595 est sensiblement plus cher que le HC595, à moins que u vraiment besoin/envie/ont la version HCT, choisissez la version HC.)
Pour une chose... il n’importe pas vraiment quelles broches de l’affichage 7 segments, vous vous connectez à la datapins de la 595, parce que vous pouvez le trier tout ça dans le code du programme, mais il est plus facile de s’en tenir à certaines connexions standards.
Si vous regardez le diagramme de l’écran, vous verrez que les segments ont un nom plus ou moins normalisé: A-G et DP. Si vous connectez le 595 comme suit :
Q0 -> A
Q1 -> B
Q2 -> C
Q3 -> D
Q4 -> E
Q5 -> F
Q6 -> G
Q7 -> DP
puis le codage devient normalisé ainsi.
Déterminer quel code pin correspond à quel segment se fait rapidement avec un multimètre, tout comme établir si vous avez une cathode commune ou affichage d’anode commune. Un coup d’oeil à l’arrière, généralement déjà vous indique quel est le lien commun. Très souvent, c’est la fiche centrale en haut et en bas.
Comme le segment 7 affichage - comme LED - ne peut pas vraiment prendre le 5 volts complet de la plupart des microcontrôleurs, une résistance à chaque ligne est nécessaire. J’utilise 470 ohms. Il est possible de n'utiliser qu’une seule résistance dans l’attitude commune, mais ensuite l’intensité lumineuse sera différente selon la quantité de segments de l’activité.
Tout cela est facile à souder quelques perf-Conseil d’administration, comme le montre l’image, évidemment si votre NIP lay-out est différent du mien, vous devrez modifier les connexions... ou envoyer une valeur différente à la HC595. Le circuit que j’ai donné est pour un affichage de cathode commune, mais bien sûr pour un affichage d’anode commune le principe est le même, quoique que l'on relie la commune anode à + Vcc.
Le code est assez explicite. Évidemment on ne peut pas, envoyez simplement un caractère « 0 » ou « 9 » vers l’écran afin d’obtenir le nombre désiré. Chaque numéro nécessite une quantité spécifique de segments à la lumière et qui correspond à des ports spécifiques de la 595 à être haute ou basse. Ainsi, par exemple pour le « 8 », vous avez besoin tous les segments de ligne vers le haut, sauf le point décimal et selon notre méthode standardisée de la connexion, exige le nombre 127 à être envoyer à la 595 (127 = 01111111 = tous les segments sauf dp). Si vous voulez le « 8 » et le DP, envoyer le nombre 255.
Donc, le plus simple est de simplement mis en place un tableau avec les valeurs requises pour chaque numéro et utiliser le nombre comme un index dans ce tableau. Donc si vous voulez un « 0 » vous utilisez membre « 0 » du tableau (c'est-à-dire 63), pour le 1 vous utilisez membre 1 du tableau (c'est-à-dire la valeur 6) etc..
Si vous voulez le point numérique s’allume aussi bien, il suffit d’ajouter « 128 » à la valeur qui est envoyée.
The coding then is as follows /* Using the 74HC595 shift register with a 7 segment display */ int latchpin = 5;// connect to pin 12 on the '595 int clockpin = 7; // connect to pin 11 on the '595 int datapin = 6; // connect to pin 14 on the '595 // the array contains the binary value to make digits 0-9// uncomment the proper line for common cathode or common anode int segment[10] = {63,6,91,79,102,109,125,7,127,111 }; // for common cathode //int segment[10] = {192,249,164,176,153,146,130,248,128,144 }; // for common anode //These values are always the right ones if you follow the rule of Q0->A, Q1->B etc. void setup() { pinMode(latchpin, OUTPUT); pinMode(clockpin, OUTPUT); pinMode(datapin, OUTPUT); } void loop() { digitalWrite(latchpin, LOW); shiftOut(datapin, clockpin, MSBFIRST, 0); // clear the display digitalWrite(latchpin, HIGH); delay(1000); for (int lus=0; lus<10; lus++) // counts from 0 to 9, using the values in the array // those values correspond to the binary outputs 0~9 // to get the digital point: add 128 { digitalWrite(latchpin, LOW); shiftOut(datapin, clockpin, MSBFIRST, segment[lus]+128); digitalWrite(latchpin, HIGH); delay(800); } digitalWrite(latchpin, LOW); shiftOut(datapin, clockpin, MSBFIRST, 0); // clear the display digitalWrite(latchpin, HIGH); delay(800); digitalWrite(latchpin, LOW); shiftOut(datapin, clockpin, MSBFIRST, 128); // light the decimal point digitalWrite(latchpin, HIGH); delay(800); }