Бінарний наручний годинник на PIC16F628 - Мікроконтролери та Технології

На даний момент я тільки вивчаю мікроконтролери, тому для цього проекту вибрав популярнийPIC16F628.
Для індикації часу в годиннику використовуються 4 світлодіоди для відображення годинника та 6 світлодіодів для відображення хвилин:
Також для індикації годинника можна використовувати зелені світлодіоди, а для хвилин - червоні:

Як підвищити точність відліку часу?
Щоб збільшити точність ходу годинника я використовував Таймер 1(TMR1), який працює в асинхронному режимі, ідея полягає в наступному: щоб продовжити роботу від батареї мікроконтролер знаходиться в сплячому режимі, коли не відображається час, а світлодіоди горітимуть тільки протягом кілька секунд після натискання однієї із двох кнопок. У сплячому режимі відключені майже всі функції мікроконтролера, але таймер/лічильник TMR1 продовжує працювати в асинхронному режимі, тому можна відраховувати час, поки PIC16F628 спить.
Коли 16-розрядний регістр TMR1 зареєструє переповнення, сигнал від переривання змусить прокинутися мікроконтролер, у разі лічильник секунд оновиться і мікроконтролер знову піде режим сну.
Для використання в асинхронному режимі TMR1 потрібно встановити джерело тактування, це робиться шляхом підключення 32.768 Гц кварцового резонатора між контактами RB7 і RB6.
Як показати час?
Час відображається, коли натиснути одну з двох кнопок. Тепер питання: як можна визначити співвідношення кнопки, якщо мікроконтролерперебуває у сплячому режимі? Ну звичайно, я використав переривання зі зміни рівня на висновках RB4 та RB5, коли стан цих контактів зміниться контролер прокинеться. При натисканні кнопки в таймер TMR0 завантажиться значення, яке використовується для вимірювання часу індикації, і активуються переривання, при переповненні TMR0 всі світлодіоди згаснуть і мікроконтролер повернеться в сплячий режим.
Алгоритм роботи годинника:
- Старт програми (ініціалізація); - Перехід в сплячий режим.
Якщо відбулося переповнення TMR1 - Пробудження; - Час на оновлення; - Перехід у сплячий режим.
Якщо відбулося зовнішнє переривання - Пробудження; - Індикація часу за допомогою світлодіодів; - Чекаємо на переповнення TMR0; - Вимкнення світлодіодів; - Перехід у сплячий режим.
Як встановити час?
В даному випадку час встановлюється кнопками і лише при першому включенні годинника.
Схема годинника

Корпус виконаний із пластику, батарейний відсік для акумулятора типу CR2032 був вирізаний за допомогою верстата ЧПУ. Ремінець просто приклеєний до нижньої частини корпусу.




При програмуванні мікроконтролера виставити біти конфігурації, що показано малюнку нижче: