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... Наука