Динамическая индикация и 7 сегментный индикатор, модуль на двух 74HC595, код из видео

4bit Digital Tube LED Display Module — Обзор модуля с семисегментным индикатором и двумя сдвиговыми регистрами 74HC595. разберем работу с динамической индикацией.

Особенности модуля:

Модуль базируется на двух сдвиговых регистрах TM74HC595 к которым подключен 4х разрядный 7 сегментный индикатор ZS3641BS. Схема похожего модуля, с двумя индикаторами ZS3641BS и 8 сегментами ниже, отличие только в дополнительном индикаторе.

Один TM74HC595 управляет сегментами, причем всеми разом, ибо они все параллельны, а второй управляет разрядами. Если на один регистр отправить байт, в котором будет символ, он будет на всех четырех разрядах, но отобразится на том, который будет включен вторым регистром, и соответственно для этого, на него нужно отправить второй байт.

Динамическая индикация:

Для отображения всех разрядов применяется динамическая индикация, что это и как работает показано в видео ниже.

Код из видео:

код
 
#define SCLK 7  // пины ардуины
#define RCLK 6     
#define DIO 5    
 
byte digitBuffer[4];
  
void setup(){  
  pinMode(RCLK, OUTPUT);
  pinMode(SCLK, OUTPUT);
  pinMode(DIO, OUTPUT);  
}


void loop(){  
  // заполняем массив
  digitBuffer[0] = 1; 
  digitBuffer[1] = 2;
  digitBuffer[2] = 3;
  digitBuffer[3] = 4;
  
  // однократно выводим данные из массива на 7сигмент
  // тоесть функция должна постоянно крутится.
  showDisplay(); 
  
}

void showDisplay(){
  
  const byte digit[10] = {  // маска для 7 сигментного индикатора  
      0b11000000, // 0
      0b11111001, // 1
      0b10100100, // 2
      0b10110000, // 3
      0b10011001, // 4
      0b10010010, // 5
      0b10000010, // 6
      0b11111000, // 7
      0b10000000, // 8
      0b10010000, // 9 
  };

  const byte chr[4] = { // маска для разряда
      0b00001000,  
      0b00000100,  
      0b00000010,  
      0b00000001  
  };

  // отправляем в цикле по два байта в сдвиговые регистры
  for(byte i = 0; i <= 3; i++){ 
    digitalWrite(RCLK, LOW); // открываем защелку
      shiftOut(DIO, SCLK, MSBFIRST, digit[digitBuffer[i]]);  // отправляем байт с "числом"
      shiftOut(DIO, SCLK, MSBFIRST, chr[i]);   // включаем разряд
    digitalWrite(RCLK, HIGH); // защелкиваем регистры
    delay(1); // ждем немного перед отправкой следующего "числа"
  }  
}

Подключение модуля к Arduino:

Подключать индикатор можно на любые свободные выходы Arduino, питание у модуля 5 вольт.

Софт:

Для работы с модулем можно использовать код выше, можно использовать библиотеки, например эту.

Купить:

Модуль был приобретен на али, тут.