Простейшие часы на Arduino с 4-разрядным TM1637 (обучение работе с Proteus)
В этой статье показан пример реализации цифровых часов на Arduino с использованием 4-разрядного TM1637.
Библиотека была использована Grove 4-Digit Display
Проект создан специально для обучения работе с симулятором Proteus и демонстрирует отсчет времени с обновлением каждую секунду.
Скетч использует библиотеку Grove 4-Digit Display и таймер Timer1 для точного обновления времени каждую секунду. Дисплей отображает часы и минуты, имитируя стандартный цифровой формат времени.
Назначение проекта
Цель проекта — показать, как работать с цифровым дисплеем TM1637:
- отображение часов и минут на 4-разрядном дисплее;
- использование таймера для точного отсчета времени;
- показ простого подхода к обновлению дисплея без задержек delay();
- практика работы с внешними библиотеками для Arduino.
Используемые компоненты
- Arduino UNO;
- 4-разрядный 7-сегментный дисплей TM1637;
- Библиотека Grove 4-Digit Display;
- Proteus 8 или 9 с поддержкой Arduino;
- Соединительные провода.
Принцип работы программы
Дисплей подключен к Arduino через два цифровых пина: CLK и DIO. Таймер Timer1 используется для генерации прерываний каждые 500 мс, что обеспечивает инкремент секунд.
Алгоритм работы простой и нагляден:
- Каждое прерывание обновляет половину секунды;
- После двух половин секунд увеличивается счетчик секунд;
- При достижении 60 секунд увеличивается счетчик минут;
- При 60 минутах увеличивается счетчик часов с переходом от 23 к 0.
Arduino-скетч
#include <TimerOne.h>
#include "TM1637.h"
#define CLK 2
#define DIO 3
TM1637 tm1637(CLK, DIO);
int8_t TimeDisp[] = {0,0,0,0};
unsigned char ClockPoint = 1;
unsigned char Update = 0;
unsigned char second = 0;
unsigned char minute = 0;
unsigned char hour = 0;
void setup() {
tm1637.set(BRIGHT_TYPICAL);
tm1637.init();
tm1637.point(POINT_ON);
tm1637.display(TimeDisp);
Timer1.initialize(500000);
Timer1.attachInterrupt(TimingISR);
}
void loop() {
if (Update) {
TimeUpdate();
tm1637.display(TimeDisp);
Update = 0;
}
}
void TimingISR() {
static unsigned char half = 0;
half++;
ClockPoint = !ClockPoint;
tm1637.point(ClockPoint ? POINT_ON : POINT_OFF);
if (half >= 2) {
half = 0;
second++;
if (second >= 60) {
second = 0;
minute++;
if (minute >= 60) {
minute = 0;
hour++;
if (hour >= 24) hour = 0;
}
}
Update = 1;
}
}
void TimeUpdate() {
TimeDisp[0] = hour / 10;
TimeDisp[1] = hour % 10;
TimeDisp[2] = minute / 10;
TimeDisp[3] = minute % 10;
}
Работа проекта в Proteus
В симуляции Proteus дисплей отображает текущее время с обновлением каждую секунду. Arduino подключать к компьютеру не требуется — вся логика выполняется внутри симулятора.
Запуск проекта в Proteus
- распакуйте архив с проектом;
- откройте файл .pdsprj;
- в свойствах Arduino укажите путь к HEX-файлу скетча;
- нажмите Run Simulation
Если что-то не работает
Если возникают проблемы с запуском проекта или непонятен принцип работы, рекомендуется пройти базовый урок по Proteus.
Подробно разобран первый проект в Proteus:
Первый проект в Proteus — мигание светодиода