Простейшие часы на Arduino с 4-разрядным TM1637 (обучение работе с Proteus)

В этой статье показан пример реализации цифровых часов на Arduino с использованием 4-разрядного TM1637.
Библиотека была использована Grove 4-Digit Display
Проект создан специально для обучения работе с симулятором Proteus и демонстрирует отсчет времени с обновлением каждую секунду.

Arduino с 4-разрядным TM1637

Скетч использует библиотеку 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 — мигание светодиода

📁 Скачать примеры