Перейти к содержанию

Четырехразрядный семисегментный индикатор

Ардуино четырехразрядный семисегментный индикатор

Arduino 4-х разрядный семи сегментный индикатор используется для создания счетчиков или таймеров и для вывода информации с датчиков в проектах. На этом дисплее производится модуль TM1637 Ардуино, который проще использовать. Рассмотрим распиновку четырёхразрядного 7 сегментного дисплея Ардуино, как подключить модуль к плате и рассмотрим примеры использования индикатора с примерами программ.

Необходимые компоненты:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • 4 разрядный 7 сегментный индикатор
  • резисторы
  • тактовая кнопка
  • макетная плата
  • коннекторы
  • библиотека TimerOne.h

Дополнительные материалы на эту тему:

  1. Одноразрядный семисегментный индикатор
  2. Модуль четырёхразрядного индикатора TM1637
  3. Часы-будильник на дисплее TM1637 Arduino

Распиновка сегментов у модуля четырехсимвольного индикатора практически не отличается от распиновки семисегментного индикатора для Ардуино. Модуль индикатора 4×7 отличается количеством цифр (символов) — каждая цифра активируется выключением соответствующего катода на модуле. Таким образом, все светодиоды сегмента на четырех разрядах (например, A-A-A-A) подключены параллельно к общему катоду.

4 разрядный 7 сегментный индикатор распиновка

4 разрядный 7 сегментный индикатор распиновка

Характеристики 4 разрядный 7 сегментный индикатор

  • Напряжение питания: от 3 В до 5 В
  • Максимальный потребляемый ток: 150 мА (при питании 5 В)
  • Диапазон рабочих температур: от -40°C до +85°C

Включением сегмента на модуле легко управлять, рассмотрим в теории небольшой пример. Первоначально на 4 разряда (D1, D2, D3, D4) подается напряжение. Чтобы активировать сегмент A на втором разряде, необходимо подать напряжение на контакт A (анод). Но сегмент не включится, пока мы не отключим напряжение на выводе D2. Таким образом, может быть зажжен любой светодиод (сегмент) на модуле дисплея.

Проблема с подключением и программированием от Ардуино заключается в том, что на четырехразрядном 7-сегментном индикаторе одновременно может отображаться только одна цифра. Поэтому необходимо вывести желаемое число на каждый разряд на короткое время. Человеческий глаз не успевает воспринять быстрое переключение светодиодов и создается впечатление, что все сегменты на разрядах светятся одновременно.

Как подключить четырехразрядный семисегментный индикатор к Ардуино

Как подключить четырехразрядный семисегментный индикатор к Ардуино

В первом примере мы продемонстрируем простую программу, чтобы вы могли четко понять, как работает 4-значный 7-сегментный дисплей для Arduino. Схема подключения индикатора к микроконтроллеру показана на рисунке выше, но в первом примере в программе используются не все контакты у микроконтроллера Arduino. Подключите четырехразрядный семисегментный индикатор к плате, согласно схеме, и загрузите код.

Скетч управление 4 разрядным 7 сегментным дисплеем


#define g  11
#define d1 A1
#define d2 A2
#define d3 A3
#define d4 A4

void setup() {
   pinMode(g, OUTPUT);
   pinMode(d1, OUTPUT);
   pinMode(d2, OUTPUT);
   pinMode(d3, OUTPUT);
   pinMode(d4, OUTPUT);

   digitalWrite(d1, HIGH);
   digitalWrite(d2, HIGH);
   digitalWrite(d3, HIGH);
   digitalWrite(d4, HIGH);

   digitalWrite(g, HIGH);
   delay(1000);
}

void loop() {
   digitalWrite(d1, LOW);
   digitalWrite(d4, HIGH);
   delay(200);
   digitalWrite(d2, LOW);
   digitalWrite(d1, HIGH);
   delay(200);
   digitalWrite(d3, LOW);
   digitalWrite(d2, HIGH);
   delay(200);
   digitalWrite(d4, LOW);
   digitalWrite(d3, HIGH);
   delay(200);
}

Секундомер с кнопкой на 4-х разрядном индикаторе

Секундомер с кнопкой на 4-х разрядном индикаторе

В этом простом примере мы соберем схему — таймер на Ардуино с четырехразрядным семисегментным светодиодным индикатором. Перед загрузкой скетча необходимо подключить кнопку таймера к пину A0 и установить библиотеку в Arduino IDE TaimerOne.h. Таймер запускается только при нажатии кнопки, при отпускании кнопки таймер останавливается, а при повторном нажатии на кнопку сбрасывается на нуль.

Скетч 4 разрядный 7 сегментный дисплей с кнопкой

#include "TimerOne.h"

#define a 5
#define b 6
#define c 7
#define d 8
#define e 9
#define f 10
#define g 11

#define d1 A1
#define d2 A2
#define d3 A3
#define d4 A4

long n = 0;
int x = 100;
int count = 0;

void setup() {
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);

  pinMode(d1, OUTPUT);
  pinMode(d2, OUTPUT);
  pinMode(d3, OUTPUT);
  pinMode(d4, OUTPUT);
  
  pinMode(A0, INPUT);

  Timer1.initialize(100000);
  Timer1.attachInterrupt( add );
}

void loop() {
  while (digitalRead(A0) == LOW) {
    clearLEDs();
    pickDigit(0);
    pickNumber((n / 1000));
    delay(5);

    clearLEDs();
    pickDigit(1);
    pickNumber((n % 1000) / 100);
    delay(5);

    clearLEDs();
    pickDigit(2);
    pickNumber(n % 100 / 10);
    delay(5);

    clearLEDs();
    pickDigit(3);
    pickNumber(n % 10);
    delay(5);
  }
  if (digitalRead(A0) == HIGH) { n = 0; count = 0; }
}

void pickDigit(int x) {
  digitalWrite(d1, HIGH);
  digitalWrite(d2, HIGH);
  digitalWrite(d3, HIGH);
  digitalWrite(d4, HIGH);
  switch (x) {
    case 0: digitalWrite(d1, LOW);  break;
    case 1: digitalWrite(d2, LOW);  break;
    case 2: digitalWrite(d3, LOW);  break;
    default: digitalWrite(d4, LOW); break;
  }
}

void pickNumber(int x) {
  switch (x) {
    default: zero();   break;
    case 1: one();     break;
    case 2: two();     break;
    case 3: three();  break;
    case 4: four();    break;
    case 5: five();     break;
    case 6: six();       break;
    case 7: seven(); break;
    case 8: eight();  break;
    case 9: nine();   break;
  }
}

void clearLEDs() {
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void zero() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
}

void one() {
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void two() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
}

void three() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
}

void four() {
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void five() {
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void six() {
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void seven() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void eight() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void nine() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void add() {
  count ++;
  if (count == 10) {
    count = 0;  n++;
    if (n == 10000) { n = 0; }
  }
}

Заключение. Цикл void add считает секунды после нажатия кнопки. Когда первая цифра четырехзначного индикатора Arduino переполняется (счетчик переменной становится больше 9) — счетчик увеличивается на единицу. Если целью проекта является отображение температуры от датчика ds18b20 или времени, то для этого потребуется многоразрядный дисплей или несколько одноразрядных 7 сегментных индикаторов.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

newzaym
➜