AVR Урок 23. Собираем часы на DS1307 и LED индикаторе. Часть 10



 

Урок 23

Часть 10

 

Собираем часы на DS1307 и LED индикаторе

 

В прошлой части нашего занятия мы научили кнопку реагировать на короткие нажатия и отличать их от длинных и уже также научили её переводить часы и минуты.

Что ж, продожим дальше наполнять наши кейсы содержимым.

Копируем код из старого проекта MyButtonClockLCD.c для редактирования числа даты в соответствующий кейс и убираем из него то, что связано с редактированием «назад».

 

 

Остается вот это

 

case MODEDATEEDIT: // дата

  I2C_SendByte(4);//Переходим на 0x04 — байт числа даты

  if (month==2) //февраль

  {

    if(year%4==0) //високосный год

    {

      if(date<29) I2C_SendByte(RTC_ConvertFromBinDec(date+1));

      else I2C_SendByte(RTC_ConvertFromBinDec(1));

    }

    else

    {

      if(date<28) I2C_SendByte(RTC_ConvertFromBinDec(date+1));

      else I2C_SendByte(RTC_ConvertFromBinDec(1));

    }

  }

  else if ((month==4)|(month==6)|(month==9)|(month==11))

  {

    if(date<30) I2C_SendByte(RTC_ConvertFromBinDec(date+1));

    else I2C_SendByte(RTC_ConvertFromBinDec(1));

  }

  else

  {

    if(date<31) I2C_SendByte(RTC_ConvertFromBinDec(date+1));

    else I2C_SendByte(RTC_ConvertFromBinDec(1));

  }

break;

 

 

Теперь таким же образом копируем код для редактирования месяца в соответствующий кейс и также убираем «назад»

Остается это

 

case MODEMONTHEDIT: // месяц

  I2C_SendByte(5);//Переходим на 0x05 — байт месяца

  if(month<12) I2C_SendByte(RTC_ConvertFromBinDec(month+1));

  else I2C_SendByte(RTC_ConvertFromBinDec(1));

break;

 

Соберём код, прошьём контроллер и проверим, сможем ли мы перевоить показатели даты

 

image41

 

Всё нормально у нас переводится, продолжаем дальше.

То же самое и с годом

 

case MODEYEAREDIT: // год

  I2C_SendByte(6);//Переходим на 0x06 — байт года

  if(year<99) I2C_SendByte(RTC_ConvertFromBinDec(year+1));

  else I2C_SendByte(RTC_ConvertFromBinDec(1));

break;

 

День недели

 

case MODEDAYEDIT: // день недели

  I2C_SendByte(3);//Переходим на 0x03 — байт дня недели

  if(day<7) I2C_SendByte(RTC_ConvertFromBinDec(day+1));

  else I2C_SendByte(RTC_ConvertFromBinDec(1));

break;

 

Соберём код, прошьём контроллер и проверим результат

 

image42 image43

 

Всё отлично переводится.

А в следующей части нашего занятия мы попробуем начать реализацию будильника, так что часть обещает быть интересной.

 

 

Предыдущая часть Программирование МК AVR Следующая часть

 

Программатор, модуль RTC DS1307 с микросхемой памяти и индикатор можно приобрести здесь:

Программатор (продавец надёжный) USBASP USBISP 2.0

Модуль RTC DS1307 с микросхемой памяти

Семисегментный чертырехразрядный индикатор красный с общим анодом 10 шт

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

AVR Собираем часы на DS1307 и LED индикаторе

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

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

*