ATMega8 / ATmega88
Исходный текст на Си (не на Васике, не на Ассемблере, не на Паскале, не на ... только Си)

Небольшие пояснения:
последовательность индикации: время/дата/температура,
время каждой индикации устанавливается самостоятельно (время 5-50 сек, дата 0-50 сек, температура 0-25 сек),
автоматический переход на летнее/зимнее время (последнее воскресенье марта/октября)
последовательность установки по нажатию кнопки set:
часы, минуты, год (d1), месяц (d2), день (d3), время индикации времени (t1), время индикации даты (t2), время индикации температуры (t3), возвращение в режим индикации времени
если часы спешат или отстают, то по нажатии кнопки "К" можно перейти в меню выбора суточной корректировки хода часов. Кнопками "+" и "-" выбирается нужное количество секунд (плюс/минус 60 сек/сутки).
если в режиме установок не нажимать кнопки более 1 мин часы перейдут в режим индикации времени.
если в режиме индикации секунд не нажимать кнопки более 5 мин часы перейдут в режим индикации времени.
при установке 0 сек. для индикации даты и 0 сек. для индикации температуры соответствующая индикация отключается т.е. можно сделать просто часы и/или с календарем и/или с термометром.
в режиме индикации времени кнопками "+" и "-" можно вызвать на 5 сек. индикацию температуры (первого и второго датчиков соответственно)
Будильники:
два светодиода - индикация активности будильника(ов) т.е. если будильник установлен и включен.
звук - один из двух вариантов.
Ряд настроек доступ к которым осуществляется удержанием одной из кнопок при включении питания:
Выбор типа индикатора делается удержанием одной из четырех кнопок ("+", "-", "сек", "уст").
Если быть более точным то не выбор индикатора, а выбор активного 0 или 1 для зажигания сегмента и выбор активного 0 или 1 для зажигания разряда.
"+" - сегмент "0", разряд "0"
"-" - сегмент "0", разряд "1"
"сек" - сегмент "1", разряд "0"
"уст" - сегмент "1", разряд "1"
----------
Изменение доп.настроек.
Вход в настройки удержанием пятой кнопки (кнопки "К") при включении питания.
Выбор ячейки производится кнопками "+" и "-", изменение состояния ячейки кнопкой "Уст". При нажатии кнопки "Уст" сразу же производится запись в EEPROM.
Выход из меню либо сброс МК, либо кнопка "Сек".
номера ячеек EEPROM и их значение (на индикаторе номер ячейка Е2 - Е8 и ее значение):
2 - индикация незначащего нуля в десятках часов
3 - отбрасывание десятых долей при индикации температуры и добавление символа "С"
4 - включение плавной смены показаний
5 - регулятор яркости (фоторезистор)
6 - работа с двумя видами точек
7 - "пятый" разряд (знак температуры)
8 - режим индикации состояния ADC (0 - кнопки, 1 - фоторезистор, F - откл.)
9 - автоперевод стрелок лето/зима (0 - отключено, 1 - включено т.е. по умолчанию включено)
а - максимальный уровень яркости (от 40 до 200) индикация в десятках т.е. на индикаторе от 4 до 20
* точки-разделители часов и минут подключаются вместо точки первого разряда,
а точка как разделитель целой и дробной части темп. - на своем месте т.е. во втором разряде
* пятый разряд (знак температуры), расположенный слева от первого - это два сегмента
горизонтальный и вертикальный которые образуют знак "минус" и знак "плюс".
Вместо точки 3-го разряда подключается горизонтальный сегмент, а вместо точки 4-го - вертикальный.
для активизация записать 0.
Почему ноль? Спросите у Atmel почему установленный фуз - "0", а не установленный - "1".
----------
Функция очистки памяти DS1307 и установки "заводских" настроек:
при первом включении часов.
время индикации 30 сек, 5 сек, 5 сек (время, дата, темп.),
будильники 1 и 2 - OFF
раннее было: Активизируется удержанием кнопки AL1 (буд1) при включении питания.
P.S.
Fuse bit's (ДИНАМИКА)
Mega8 - (Int RC = 4 MHz) SKSEL3..0 = 0011, SUT1..0 = 10, все остальные = 1
Mega88 - (Int RC = 8 MHz) SKSEL3..0 = 0010, SUT1..0 = 10, все остальные = 1
Fuse bit's (СТАТИКА)
Mega8 - (Int RC = 8 MHz) SKSEL3..0 = 0100, SUT1..0 = 10, все остальные = 1
Mega88 - (Int RC = 8 MHz) SKSEL3..0 = 0010, SUT1..0 = 10, все остальные = 1
прошивка в папке hex
доп.информация в папке plus
* CVAVR не ниже версии 2.0
* Proteus не ниже версии 7.7
Еще несколько моих проектов:
часы на светодиодных 7-ми сегментниках (12 разрядов) Часы-термометр-будильник 12LED(mega8/88+DS1307+DS18x20*2)
часы на LCD 2*16 и на Mega8/88 Часы-термометр-будильник (Mega8+DS1307+DS18B20+LCD16*2)
и их улучшенная версия на Mega168 Часы термометр-будильник Mega168_DS1307(M41T56)_DS18x20_LCD16x2

