Рубрики
Схемы на Arduino

Подключение семисегментного дисплея к Arduino Uno

В этой статье мы рассмотрим подключение семисегментного дисплея (индикатора) к плате Arduino Uno. Дисплей может отображать цифры от 0 до 9. Вначале рассмотрим общие принципы работы семисегментного дисплея.

Семисегментный дисплей (индикатор) получил такое название потому, что он содержит семь светоизлучающих элементов (сегментов). Каждый из этих сегментов содержит светодиод. Светодиоды таким образом скомпонованы в составе дисплея, что каждый из них освещает только свой сегмент (к которому он относится). Семисегментные дисплеи могут быть с общим катодом и общим анодом, как показано на следующем рисунке.

В семисегментном дисплее с общим катодом (ОК) отрицательные выводы всех светодиодов соединены вместе и образую общую землю. В схеме с общим анодом (ОА) положительные выводы всех светодиодов соединены вместе и они образуют общий вывод напряжения постоянного тока (VCC).

На нашем сайте есть достаточно подробные статьи про устройство семисегментных дисплеев и их программированию – они написаны для микроконтроллеров семейства AVR, но я думаю провести аналогию с Arduino вам будет не трудно:

Также можно посмотреть статью о подключении семисегментного дисплея к микроконтроллеру AVR ATmega32.

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

  1. Плата Arduino UNO (купить на AliExpress).
  2. Семисегментный дисплей HDSP5503 (2 шт.) – или другой подобный с общим катодом (купить на AliExpress).
  3. Конденсатор 47 пФ, соединенный по питанию (купить на AliExpress).
  4. Напряжение питания 5 В.

Работа схемы

Схема подключения семисегментного дисплея к плате Arduino представлена на следующем рисунке.

В схеме необходимо сделать следующие соединения семисегментного дисплея с платой Arduino:
PIN1 или E к контакту PIN 6 of ARDUINO UNO
PIN2 или D к контакту PIN 5
PIN4 или C к контакту PIN 4
PIN5 или H или DP к контакту PIN 9 /// в этом соединении нет необходимости если мы не будем использовать десятичную точку (decimal point)
PIN6 или B к контакту PIN 3
PIN7 или A к контакту PIN 2
PIN9 или F к контакту PIN 7
PIN10 или G к контакту PIN 8
PIN3 или PIN8 или CC (общий катод) на землю через резистор 100Ω.

Теперь, чтобы лучше понять принцип работы семисегментного дисплея, представим что он как будто подсоединен к порту микроконтроллера, то есть сегмент A соединен с контактом PIN0 микроконтроллера, сегмент B – с контактом PIN1, сегмент А – с контактом PIN3, сегмент А – с контактом PIN4, сегмент А – с контактом PIN5, сегмент А – с контактом PIN6. Общий вывод соединен с землей как показано на следующем рисунке.

Семисегментный дисплей легко проверить используя мультиметр в режиме диода. На каждом сегменте дисплея не должно быть напряжения большего 5 В, иначе дисплей будет необратимо поврежден. Чтобы исключить подобное общий резистор должен быть подключен к общему выводу дисплея как показано на выше приведенной схеме нашего устройства.

Теперь, чтобы на семисегментном дисплее отобразить 0, необходимо подать питающие напряжения как показано на рисунке ниже.

То есть чтобы зажечь светодиоды в сегментах “A, B, C, D, E F” (то есть отобразить на дисплее цифру 0) нам необходимо подать питающее напряжение на контакты PIN0, PIN1, PIN2, PIN3, PIN4 and PIN5.

Теперь, если мы хотим отобразить цифру 1 на дисплее, мы должны подать питающее напряжение на сегменты “B, C”, то есть запитать контакты PIN1, PIN2. Эта ситуация показана на следующем рисунке.

То есть, чтобы отобразить какую либо цифру на дисплее, необходимо подать питание на соответствующие контакты дисплея.

Исходный код программы

В представленной программе мы будем последовательно подавать питание на соответствующие контакты семисегментного дисплея, чтобы по очереди отображать на нем цифры от 0 до 9.

Видео, демонстрирующее работу схемы

6 ответов к “Подключение семисегментного дисплея к Arduino Uno”

#define segA 2 // подключение сегмента A к PIN2
#define segB 3 // подключение сегмента B к PIN3
#define segC 4 // подключение сегмента C к PIN4
#define segD 5 // подключение сегмента D к PIN5
#define segE 6 // подключение сегмента E к PIN6
#define segF 7 // подключение сегмента F к PIN7
#define segG 8 // подключение сегмента G к PIN8int COUNT=0; //объявляем переменную для счета от 0 до 9

void setup()
{
for (int i=2;i<9;i++)
{
pinMode(i, OUTPUT); // конфигурируем все используемые контакты на вывод данных
}
}

void loop()
{

{

// показываем ”0” на дисплее
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);

digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);

digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);

digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);

digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);

digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);

digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);

digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);

digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);

digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);

}

{

delay(1000); /// увеличиваем значение счетчика каждую секунду
}

{

delay(1000);
}
}

А что лучше в вашей программе по сравнению с моей?

Ну конечно ни чем не лучше она, только хуже Вашей программы, его программа не рабочая.

Ну может автоматическая система модерирования комментариев порезала какую то часть его кода, а на самом деле его код рабочий

Ну человек старался, может быть опечатался где то

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

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