Contrôle d'un afficheur 4x7 segments avec une carte NodeMCU ESP8266 et un Shift Register SN74HC595N

Поделиться
HTML-код
  • Опубликовано: 8 фев 2025
  • Grâce au Shift Register 74HC595, il est possible de connecter les 12 pins d'un afficheur 4x7segments sur une carte NodeMCU, et ce en relayant les 7 segments et le point décimal (a,b,c,d,e,f,g,.), c'est à dire les 8 Outputs à travers le 74HC595 de type SIPO et générant 3 Inputs (data, latch, clock).
    Code :
    #include "Timer.h"
    Timer t;
    long number = 0;
    int digit_1 = 0;
    int digit_2 = 0;
    int digit_3 = 0;
    int digit_4 = 0;
    int timer_event = 0;
    int cathode_1 = 5;
    int cathode_2 = 4;
    int cathode_3 = 0;
    int cathode_4 = 2;
    int latchPin = 15;
    int clockPin = 14;
    int dataPin = 13;
    int count = 3, b;
    int digits[4] ;
    int cathodePins[4] = {5, 4, 0, 2};
    byte numbers[10] {B00000011, B10011111,B00100101,B00001101,B10011001,B01001001,B01000001,B00011111,B00000001,B00001001};
    void setup() {
    Serial.begin(9600);
    pinMode(cathode_1, OUTPUT);
    pinMode(cathode_2, OUTPUT);
    pinMode(cathode_3, OUTPUT);
    pinMode(cathode_4, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(latchPin, OUTPUT);
    pinMode(dataPin, OUTPUT);
    digitalWrite(cathode_1, HIGH);
    digitalWrite(cathode_2, HIGH);
    digitalWrite(cathode_3, HIGH);
    digitalWrite(cathode_4, HIGH);
    Serial.println("Please enter a number between 0 and 9999");
    }
    void loop() {
    t.update();
    if (Serial.available()) {
    t.stop(timer_event);
    cathode_high();
    String s = Serial.readString();
    number = (long)s.toInt();
    if (number sup 9999) { //remplacer sup par le symbole supérieur
    Serial.println("Invalid number!
    Please enter a number between 0 and 9999");
    } else {
    break_number(number);
    timer_event = t.every(1, display_number);
    }
    }
    }
    void break_number(long num) {
    digit_1 = num / 1000;
    digits[0] = digit_1;
    int dig_1_remove = num - (digit_1 * 1000);
    digit_2 = dig_1_remove / 100;
    digits[1] = digit_2;
    int dig_2_remove = dig_1_remove - (digit_2 * 100);
    digit_3 = dig_2_remove / 10;
    digits[2] = digit_3;
    digit_4 = dig_2_remove - (digit_3 * 10);
    digits[3] = digit_4;
    }
    void display_number() {
    cathode_high();
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, numbers[digits[count]]);
    for(b=0;b inf 4;b++) if(count!=b) digitalWrite(cathodePins[b], LOW); //repmlacer inf par le symbole inférieur
    digitalWrite(latchPin, HIGH);
    count--;
    if (count == -1) {
    count = 3;
    }
    }
    void cathode_high() {
    digitalWrite(cathode_1, HIGH);
    digitalWrite(cathode_2, HIGH);
    digitalWrite(cathode_3, HIGH);
    digitalWrite(cathode_4, HIGH);
    }
    Liens utiles :
    www.geekering....
    lastminuteengi...
  • НаукаНаука

Комментарии •