Работа с модулем реального времени DS1307 и LCD 16×2 в Proteus

Данная статья написана для обучения работе с симулятором Proteus и демонстрирует, как использовать модуль реального времени DS1307 совместно с Arduino UNO и символьным LCD-дисплеем 16×2.
Проект позволяет получить базовое понимание протокола I2C, принципов работы RTC-микросхем и вывода времени на дисплей.

Модуль времени DS1307 и LCD

Использование Proteus даёт возможность полностью отладить схему и программную логику без подключения реальных компонентов, что особенно удобно для обучения и экспериментов.

Назначение проекта

Проект предназначен для отображения текущего времени (часы, минуты, секунды), считываемого с микросхемы DS1307, на LCD-дисплее. Подобное решение часто используется в:

  • электронных часах;
  • таймерах и контроллерах;
  • системах автоматизации;
  • проектах с логированием данных;
  • устройствах «умного дома».

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

  • Arduino UNO;
  • RTC-модуль DS1307;
  • LCD-дисплей 16×2 (HD44780-совместимый);
  • Proteus 8 или 9;
  • Библиотеки Wire и LiquidCrystal.

Что такое DS1307

DS1307 — это микросхема реального времени (RTC), работающая по интерфейсу I2C. Она хранит текущие значения секунд, минут, часов, даты, месяца и года, а также поддерживает резервное питание от батарейки.

В данном примере используется только базовая часть функционала — чтение времени. Микросхема возвращает данные в формате BCD (двоично-десятичный код), поэтому перед выводом значения необходимо преобразовать в десятичный формат.

Подключение компонентов

DS1307 подключается к Arduino по шине I2C:

  • SDA → A4 (Arduino UNO);
  • SCL → A5 (Arduino UNO);

LCD-дисплей работает в 4-битном режиме и подключён к цифровым пинам Arduino:

  • RS → пин 2;
  • EN → пин 3;
  • D4–D7 → пины 4, 5, 6, 7.

Принцип работы программы

В начале программы задаётся I2C-адрес микросхемы DS1307 — 0x68. Затем подключаются библиотеки Wire (для I2C) и LiquidCrystal (для работы с дисплеем).

В функции setup() инициализируется I2C-шина и LCD-дисплей, после чего выводится тестовая надпись.

В основном цикле выполняются следующие шаги:

  • установка указателя регистра DS1307 на секунды;
  • чтение секунд, минут и часов;
  • преобразование значений из BCD в десятичный формат;
  • вывод текущего времени на LCD;
  • задержка 1 секунда.

Arduino-скетч

#define slave_adress 0x68 // I2C-адрес микросхемы DS1307

#include <Wire.h>            // библиотека для работы с I2C
#include <LiquidCrystal.h>   // библиотека для LCD-дисплея

byte sec_bcd = 0, min_bcd = 0, hour_bcd = 0; // данные времени в формате BCD
byte sec_dec = 0, min_dec = 0, hour_dec = 0; // данные времени в десятичном формате

// пины подключения LCD
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  Wire.begin();          // инициализация I2C
  lcd.begin(16, 2);      // инициализация LCD 16x2
  lcd.print("RTC by DS1307");
}

void loop() {
  // установка указателя регистра на секунды
  Wire.beginTransmission(slave_adress);
  Wire.write(0x00);      // регистр секунд
  Wire.endTransmission();

  // запрос 3 байтов: секунды, минуты, часы
  Wire.requestFrom(slave_adress, 3);
  sec_bcd = Wire.read();
  min_bcd = Wire.read();
  hour_bcd = Wire.read();

  // преобразование BCD в десятичный формат
  sec_dec  = (sec_bcd & 0x0F) + ((sec_bcd & 0xF0) >> 4) * 10;
  min_dec  = (min_bcd & 0x0F) + ((min_bcd & 0xF0) >> 4) * 10;
  hour_dec = (hour_bcd & 0x0F) + ((hour_bcd & 0xF0) >> 4) * 10;

  // вывод времени на LCD
  lcd.setCursor(4, 1);
  lcd.print(hour_dec);
  lcd.print(":");
  lcd.print(min_dec);
  lcd.print(":");
  lcd.print(sec_dec);

  delay(1000); // обновление раз в секунду
}

Запуск проекта в Proteus

Для запуска проекта в Proteus:

  • распакуйте архив с проектом;
  • откройте файл .pdsprj;
  • убедитесь, что в Arduino указан путь к файлу .hex;
  • нажмите кнопку Run;
  • наблюдайте текущее время на LCD-дисплее.

В Proteus микросхема DS1307 имеет встроенную модель реального времени. Начальные значения часов задаются в свойствах компонента, после чего симулятор автоматически эмулирует ход времени, аналогично работе реального кварцевого RTC.

Если что-то не работает

Если у вас возникают сложности с запуском проекта или вы не уверены в базовых шагах, рекомендуется сначала пройти вводный урок.

Подробно разобран первый проект в Proteus:
Первый проект в Proteus — мигание светодиода

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