боти таймера, Гц. Для виклику переривання необхідно задатися-яким числом для порівняння. Якщо взяти число 7812 (удвічі більше частоти роботи таймера), то переривання буде спрацьовувати кожні дві секунди (оскільки Гц = 1/с, то число 3906 означає число тактів в секунду. І з заданим числом для порівняння якраз і порівнюється число тактів). Оскільки нам потрібно інкрементіровать значення годин кожну секунду, то число для порівняння повинно бути 3906. Цей варіант не гарантує високої точності ходу. p align="justify"> Другий варіант передбачає використання окремої мікросхеми, що відповідає за хід годинника. Все, що потрібно для роботи - задати початкове значення дати і часу, а також підключити зовнішній В«вартовийВ» кварц. Далі і будемо використовувати цей варіант. p align="justify"> З усіх існуючих мікросхем була обрана DS1307 зважаючи на її поширеності, простоти використання і дешевизни. Для отримання поточного значення часу будемо використовувати переривання по таймеру так, як було описано вище. p align="justify"> Засоби використовуваного середовища розробки (CodeVisionAVR) дозволяють сильно спростити роботу з LCD дисплеєм, пропонуючи готові функції ініціалізації та виведення символів. Але при цьому ми зобов'язані працювати за Чотирирозрядний шині, замість Восьмирозрядних, що вплине на швидкість виведення інформації. Оновлювати інформацію на дисплеї будемо відразу після зчитування значення часу з мікросхеми DS1307 в тому ж перериванні. p align="justify"> Для забезпечення можливості налаштування годинника і будильника, порт B мікроконтролера буде опитувати стан кнопок, з'єднаних з В«землеюВ».
.2 Опис вихідного коду програми
Рядки 1-19: підключення необхідних заголовних файлів, конфігурування мікроконтролера для роботи із зовнішніми пристроями.
Рядки 21-39: оголошення глобальних змінних із завданням початкових значень.
Рядки 43-50: функція, яка викликається по перериванню таймера. Обнуляє значення лічильника, змінює спочатку задане число для порівняння (оскільки при ініціалізації на дисплей виводиться інформаційне повідомлення і під час його відображення переривання спрацьовувати не повинно) і викликає функцію Display ();
Рядки 52-67: функція About (). Виводить на дисплей В«біжучий" рядок з інформацією про пристрій і її автора. p align="justify"> Рядки 69-74: функція Delay_note (). Використовується для забезпечення можливості завдання В«паузиВ» в роботі за допомогою змінної (вбудована функція delay_ms () здатна приймати тільки константи). Це необхідно при програванні мелодії, тому що час затримки звуку задана в масиві і для кожної ноти різне значення затримки.
Рядки 76-108: функція Alarm (). Викликається, коли значення дати і часу збігається зі значенням змінних, що зберігають настройки будильника. Вона виводить на дисплей повідомлення про включення будильника і програє...