Я делаю так
Код: Выделить всё
tmp = rtc_read(0x00);
tmp &=~(1<<7);
rtc_write(0x00, tmp); //включение DS1307, бит 7 ноль
tmp = rtc_read(0x02);
tmp &=~(1<<6);
rtc_write(0x02, tmp); // бит 6 ноль - 24ох часовой режим
rtc_init(0, 1, 1); // включение генератора импульсов
// потом идёт основной цикл
while (1)
{
}
Информация по моиму на индикаторы подаётся неправильно, например если 21 час то hour будет 0b0010101 и это подаётся в PORTD индикатор будет билиберду показывать. Просто вы используете програмный I2C и там из двоичнодесятичного (формат DS1307) преобразуется в двоичный. Если не переделывать схему то нужно преобразовывать в двоичнодесятичный формат
Код: Выделить всё
#include <bcd.h>
tmp=bin2bcd(hour);
PORTD=tmp;
либо использовать апаратный I2C и библиотеку которую тут вылаживали.
Но в любом случае на индикаторах информация должна менятся хоть и неправильная. Сделайте пока без кнопок и главное меток, а потом допишете кнопки
Код: Выделить всё
while (1) {
rtc_get_time(&hour, &min, &sec); // читаем из DS-ки время
PORTA=sec; //вывод секунд
PORTB=min; //вывод минут
PORTD=hour; //вывод часов
delay_ms(100); //задержка
}
Ну и отпишитесь конечно

.