чинаємо передачу по I2C (WRITE);// передаємо адресу годин + біт запису (Adress);// передаємо адресу потрібної комірки ();// рестарт протоколу I2C (READ);// передаємо адресу годин + біт читання = ReadByte ();// зчитуємо клітинку ();// завершуємо прийом даних по I2Coutput;
}
// повна копія функції Write, але для обробника переривань
// довелося зробити таку копію, оскільки в іншому випадку виникає незрозуміла помилка
// яка не відбувається, якщо цю функцію використовувати під різними іменами в main () і interrupt () W (char Adress, char Data)// записуємо дані Data в клітинку годин з адресою Adress
{();// починаємо передачу по I2C (WRITE);// передаємо адресу годин + біт запису (Adress);// передаємо адресу годин + біт запису (Data);// записуючи потрібні дані ();//завершуємо прийом даних по I2C
}
// -
// обробник прериванійinterrupt ISR ()
{
// - Переривання від кнопок управління -
// Натискання кнопки В«ВНИЗВ» (INT0IF)
{(LedWork)// Знаходимося в режимі налаштування
{(Mode)// Дивимося, який режим активний
{1:// Режим головного меню (m <3) m + +; else m = 1;; 2:// Режим установки часу і дати
if (m <7) m + +; else m = 1;;
case 3:// Режим введення року (m> 0) m-; else m = 3;
break; 4:// Режим введення місяця (m> 1) m-; else m = 12;;
case 5:// Режим введення числа = ((Read (0x06) & 0x10)>> 4) * 10 + (Read (0x06) & 0x0F);// зчитуємо записаний в години місяць = ( (0xC0 & Read (0x05))>> 6); (month)// в залежності від місяця і високосного року змінюємо межа установки дня
{1: case 3: case 5: case 7: case 8: case 10: case 12: = 31; break; 4: case 6: case 9: case 11: = 30; break; 2: (year) day = 28; else day = 29; break;
} (m> 1) m-; else m = day;
break; 6:// Режим введення дня тижня
if (m> 0) m-; else m = 6;;
case 7:// Режим введення години (m> 0) m-; else m = 23;
break; 8:// Режим введення хвилин (m> 0) m-; else m = 59;; 9:// Режим меню дзвінків (m <4) m + +; else m = 1;
break; 10:// Режим введення кількості дзвінків
if (m> 0) m-; else m = 30;;
case 11:// Режим вибору дзвінка для редагування часу
if (m> 1) m-; else m = Read (16) +1;
break; 12:// Режим введення години обраного дзвінка
if (m> 0) m-; else m = 23;;
case 13:// Режим введення хвилини обраного дзвінка
if (m> 0) m-; else m = 59;;
case 14:// Режим введення тривалості дзвінків (m> 0) m-; else m = 59;
break;
} ();
} IF = 0;
}