- Необходимые компоненты
- 4-значный 7-сегментный дисплей
- 74HC595 Регистр сдвига IC
- Модуль DS3231 RTC
- Принципиальная электрическая схема
- Программирование Arduino UNO для мультиплексирования семисегментного дисплея
Цифровые настенные часы становятся все более популярными в наши дни, и они лучше аналоговых часов, поскольку они показывают точное время в часах, минутах и секундах, а также легко читают значения. Некоторые цифровые часы также имеют множество функций, таких как отображение температуры, влажности, установка нескольких сигналов тревоги и т. Д. В большинстве цифровых часов используется семисегментный дисплей.
Ранее мы построили множество схем цифровых часов, используя либо 7-сегментные дисплеи, либо ЖК-дисплеи 16x2. Здесь вы можете увидеть полный дизайн печатных плат цифровых часов на базе AVR. Это руководство посвящено созданию цифровых часов путем мультиплексирования четырех- семисегментных дисплеев с использованием Arduino UNO и отображения времени в формате ЧЧ: ММ.
Необходимые компоненты
- 4-значный 7-сегментный дисплей
- 74HC595 IC
- Модуль DS3231 RTC
- Arduino UNO
- Макетная плата
- Соединительные провода
4-значный 7-сегментный дисплей
4-значный 7-сегментный дисплей имеет четыре семи-сегментных дисплея, объединенных вместе или, можно сказать, мультиплексированных вместе. Они используются для отображения числовых значений, а также некоторых алфавитов с десятичными знаками и двоеточием. Дисплей можно использовать в обоих направлениях. Четыре цифры полезны для создания цифровых часов или подобных чисел от 0 до 9999. Ниже представлена внутренняя диаграмма для 4-значного 7-сегментного дисплея.
Каждый сегмент имеет один светодиод с индивидуальным управлением светодиодами. Есть два типа семисегментных дисплеев, такие как общий анод и общий катод. На изображении выше показан 7-сегментный дисплей обычного типа анода.
Общий анод
В общем аноде все положительные клеммы (аноды) всех 8 светодиодов соединены вместе и называются COM. И все отрицательные клеммы оставлены в покое или подключены к выводам микроконтроллера. При использовании микроконтроллера, если логический уровень LOW установлен для освещения определенного сегмента светодиода, и установлен высокий логический уровень, чтобы выключить светодиод.
Общий катод
В Common Cathode все отрицательные клеммы (катод) всех 8 светодиодов соединены вместе и называются COM. И все положительные клеммы оставлены в покое или подключены к контактам микроконтроллера. При использовании микроконтроллера, если установлен ВЫСОКИЙ логический уровень, чтобы загорелся светодиод, и НИЗКИЙ, чтобы выключить светодиод.
Узнайте больше о 7-сегментных дисплеях здесь и проверьте, как они могут взаимодействовать с другими микроконтроллерами:
- 7-сегментный дисплей с интерфейсом Arduino
- 7-сегментный дисплей с интерфейсом Raspberry Pi
- Взаимодействие семисегментного дисплея с ARM7-LPC2148
- 7-сегментный дисплей, взаимодействующий с микроконтроллером PIC
- 7-сегментный дисплей, взаимодействующий с микроконтроллером 8051
74HC595 Регистр сдвига IC
IC 74HC595 также известный как 8-битный серийный IN - Параллельный выход регистр сдвига. Эта ИС может получать ввод данных последовательно и управлять 8 выходными контактами параллельно. Это полезно для уменьшения количества выводов микроконтроллера. Здесь вы можете найти все проекты, связанные со сдвиговым регистром 74HC595.
Работа 74HC595 IC:
Эта ИС использует три контакта, такие как часы, данные и защелка, с микроконтроллером для управления 8 выходными контактами ИС. Часы используются для непрерывной подачи импульсов от микроконтроллера, а вывод данных используется для отправки данных, например, какой выход должен быть включен или выключен в соответствующее время часов.
Распиновка:
Пин код |
Имя контакта |
Описание |
1,2,3,4,5,6,7 |
Выходные контакты (от Q1 до Q7) |
74HC595 имеет 8 выходных контактов, из которых 7 являются этими контактами. Им можно управлять серийно |
8 |
Земля |
Подключен к земле микроконтроллера |
9 |
(Q7) Последовательный выход |
Этот вывод используется для подключения более одного 74HC595 в каскадном режиме. |
10 |
(MR) Общий сброс |
Сбрасывает все выходы на низкий уровень. Для нормальной работы необходимо держать высоко |
11 |
(SH_CP) Часы |
Это тактовый вывод, на который тактовый сигнал должен подаваться от MCU / MPU. |
12 |
(ST_CP) Защелка |
Контакт защелки используется для обновления данных на выходных контактах. Активный высокий |
13 |
(OE) Выход разрешен |
Разрешение выхода используется для отключения выходов. Для нормальной работы необходимо удерживать низкий уровень |
14 |
(DS) Последовательные данные |
Это контакт, на который отправляются данные, на основе которого управляются 8 выходов. |
15 |
(Q0) Выход |
Первый выходной контакт. |
16 |
Vcc |
Этот вывод питает ИС, обычно используется + 5В. |
Модуль DS3231 RTC
DS3231 - это модуль RTC. RTC расшифровывается как часы реального времени. Этот модуль используется для запоминания времени и даты, даже когда цепь не запитана. Он имеет резервную батарею CR2032 для работы модуля при отсутствии внешнего питания. В этот модуль также входит датчик температуры. Модуль можно использовать во встроенных проектах, таких как создание цифровых часов с индикатором температуры и т. Д. Вот несколько полезных проектов, в которых он используется:
- Автоматическая кормушка для домашних животных с использованием Arduino
- Взаимодействие модуля RTC (DS3231) с микроконтроллером PIC: цифровые часы
- Взаимодействие модуля RTC (DS3231) с MSP430: цифровые часы
- Часы реального времени ESP32 с использованием модуля DS3231
- Цифровые настенные часы на печатной плате с использованием микроконтроллера AVR Atmega16 и DS3231 RTC
Распиновка DS3231:
Имя контакта |
Использовать |
VCC |
Подключен к плюсу источника питания |
GND |
Подключен к земле |
ПДД |
Вывод последовательных данных (I2C) |
SCL |
Вывод последовательных часов (I2C) |
SQW |
Вывод прямоугольной волны |
32K |
Выход генератора 32K |
Особенности и характеристики:
- RTC считает секунды, минуты, часы и год
- Цифровой датчик температуры с точностью ± 3ºC
- Зарегистрироваться на старение
- Интерфейс I2C 400 кГц
- Низкое энергопотребление
- Резервная батарея CR2032 со сроком службы от двух до трех лет
- Рабочее напряжение: от 2,3 до 5,5 В
Принципиальная электрическая схема
Цепное соединение между DS3231 RTC и Arduino UNO:
DS3231 |
Arduino UNO |
VCC |
5В |
GND |
GND |
ПДД |
A4 |
SCL |
A4 |
Цепные соединения между 74HC595 IC и Arduino Uno:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (Данные) |
4 |
13-ОЕ (защелка) |
GND |
8-GND |
GND |
10-MR (SRCLR) |
+ 5В |
16-VCC |
+ 5В |
Цепные соединения между IC 74HC595 и 4-значным семисегментным блоком и Arduino UNO:
4 цифры, семь сегментов |
IC 74HC595 |
Arduino UNO |
А |
Q0 |
- |
B |
Q1 |
- |
C |
2 квартал |
- |
D |
3 квартал |
- |
E |
4 квартал |
- |
F |
Q5 |
- |
г |
Q6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
Программирование Arduino UNO для мультиплексирования семисегментного дисплея
Полный код и рабочее видео прилагаются в конце этого руководства. В разделе программирования будет объяснено, как время (часы и минуты) берутся из модуля RTC в 24-часовом формате, а затем преобразуются в соответствующий формат для отображения на 4-значном 7-сегментном дисплее.
Для связи модуля DS3231 RTC с Arduino UNO используется шина I2C Arduino UNO. Библиотека под названием
В этой концепции часы и минуты сначала берутся из RTC, и они объединяются вместе, как 09:30 (21:30 pm), а затем отдельные цифры разделяются, как тысяча, сотня, десятки, единицы, а отдельные цифры преобразуются в двоичный формат, например 0 в 63 (0111111). Этот двоичный код отправляется в регистр сдвига, а затем из регистра сдвига в семисегментный, успешно отображая цифру 0 на семисегментном дисплее. Таким образом, четыре цифры мультиплексируются и отображаются часы и минуты.
Изначально включены необходимые библиотеки, такие как библиотека DS3231 и библиотека Wire (библиотека I2C).
#включают
Штифты определены для управления семью сегментами. Эти элементы управления будут играть важную роль в мультиплексировании дисплея.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2
Переменные объявлены для хранения преобразованного или необработанного результата, взятого из RTC.
int h; // Переменная объявлена для часа int m; // Переменная объявлена для минуты int тысяч; int сотни; int tens; int unit; bool h24; bool PM;
Затем объект класса DS3231 объявляется как RTC, чтобы упростить использование в следующих строках.
DS3231 RTC;
Поскольку модуль RTC взаимодействует с Arduino с помощью связи I2C. Итак, wire.begin () используется для запуска связи I2C в адресе RTC по умолчанию, поскольку других модулей I2C нет.
Wire.begin ();
Режим вывода определяется, будет ли GPIO работать как выход или вход.
pinMode (9, ВЫХОД); pinMode (10, ВЫХОД); pinMode (11, ВЫХОД); pinMode (12, ВЫХОД); pinMode (latchPin, ВЫХОД); pinMode (clockPin, ВЫХОД); pinMode (dataPin, ВЫХОД); pinMode (точка, ВЫХОД);
Цикл выполняется бесконечно и требует времени в часах и минутах от модуля RTC DS3231. «h24» указывает переменную 24-часового формата.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
Затем час и минута объединяются в одно число (например, если час равен 10, а мин равен 60, тогда число будет 10 * 100 = 1000 + 60 = 1060).
int число = h * 100 + m;
В отдельных цифрах от числа получаются (пример 1060- 1 тыс, 0 hundered, 1 десятые и 0 последняя цифра). Для разделения цифр используется оператор модуля. Например, в 1060, чтобы получить 1, тогда 1060/1000 = 1,06% 10 = 1). Таким образом, отдельные цифры хранятся в отдельных переменных.
int тысяч = число / 1000% 10; int сотни = число / 100% 10; int десятки = число / 10% 10; int unit = число% 10;
После этого определяется оператор switch case для каждой отдельной цифры для преобразования их в соответствующий формат (двоичный формат) и отправки через регистр сдвига для отображения в 7-сегментном формате. Например (1 цифра заменяется на 06 (0000 0110)). Таким образом, он отправляется через сдвиг, и 1 цифра отображается в 7-сегментном формате (0 для LOW, 1 для HIGH).
switch (t) { case 0: unit = 63; сломать; случай 1: unit = 06; сломать; случай 2: unit = 91; сломать; случай 3: unit = 79; сломать; случай 4: unit = 102; сломать; случай 5: unit = 109; сломать; случай 6: unit = 125; случай 7: unit = 07; сломать; случай 8: unit = 127; сломать; case 9: unit = 103; сломать; }
Затем отдельная цифра в двоичном формате отправляется через функцию shiftout с первым старшим битом, и соответствующий цифровой вывод становится ВЫСОКИМ, а контакт защелки становится ВЫСОКИМ.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, тысячи); digitalWrite (latchPin, HIGH); digitalWrite (9, ВЫСОКИЙ); задержка (5);
На этом закончен полный код. Большая часть объяснений функций дается в разделе комментариев к коду, рядом со строкой кода. Частота часов будет определять вид времени и качество мультиплексирования, то есть, если используются низкие часы, то можно увидеть мерцание, где, как если бы тактовая частота высока, такого мерцания не будет, и можно увидеть устойчивое время.
Обратите внимание, что для доступа к модулю RTC необходимо поддерживать напряжение на шине I2C. Чтобы дать какое-либо предложение или если у вас есть какие-либо сомнения, оставьте комментарий ниже.