Цей пристрій дозволяє двом людям грати в хрестики-нулики. Його блок- схема зображена на рис. 4.23.

Рис. 4.23. Блок-схема пристрою

Специфікація проекту

Мета проекту – створити графічний інтерфейс для гри в хрестики-нулики. Користувач розміщує свій знак за допомогою кнопок. Гра закінчується або нічиєї, або перемогою одного з гравців. Пристрій відстежує кількість зіграних ігор і рахунок. Харчування реалізовано від батарейок.

Опис пристрою

Схема аналогічна проекту температурного реєстратора. У цьому проекті задіяно три з наявних чотирьох кнопок: кнопки “вгору / вниз”, “вправо / вліво” і “введення”. На рис. 4.24 і 4.25 зображений дисплей, що показує різні стадії гри.

Програмування

Відкомпільований вихідний код (разом з файлом MAKEFILE) можна завантажити за посиланням: www.avrgenius.com/tinyavrl.

Тактова частота дорівнює 8 МГц. Контролер запрограмований за допомогою STK500 в режимі програмування ISP. Логіка гри – та ж сама, що й у грі, що обговорювалася в проекті 13. Єдина відмінність полягає в тому, що немає початкового вибору кольорів. Одному користувачеві призначаються хрестики, іншому – нулики. Шаблони “хрестик” і “нулик” зберігаються в пам’яті програм. На відміну від попередньої версії, тут передбачено запам’ятовування числа перемог і програшів кожного користувача (до десяти перемог). В кінці кожної гри результат і загальний рахунок користувачів відображається на дисплеї. Лістинг 4.8 ілюструє найбільш важливі фрагменти коду.

^ Лістинг 4.8 ‘7’ J ‘.7 V

while(1)

{

cli() ;

cursorxy (б, 2); putstr (DISPLAY); while (PINA & OxOl);

_delay_ms(30) ; while (1 (PINA&OxOl));

_delay_ms (3 0); sei () ;

TIMSK1 = 0x01;

// Переривання по переповнення активовано reset (); while (1)

{

playerturn(1); checkwin(); if(disl==10)

{

disl=0; dis2=0; break;

}

playerturn (2) checkwin(); if(dis2==10)

{

disl=0; dis2=0.; break;

}

}

}

Це головний нескінченний цикл програми. Він виводить на екран слова “TIC ТАС ТОЕ” і чекає натиснення користувачем кнопки (для запуску гри). Після початку гри викликається функція playerturn, аргументом якої є номер гравця. Ця функція дозволяє користувачеві помістити його символ. Потім викликається функція checkwin, щоб перевірити, чи не чи виграв гравець, що розмістив останній символ. Змінні disi і dis2 відстежують число виграшів гравців.

Робота пристрою

Щоб включити пристрій, подайте харчування на схему. Спочатку можливість виставити свій символ отримує перший гравець, потім – другий і т. Д.

Джерело: Гадре, Д., Цікаві проекти на базі мікроконтролерів tinyAVR / Дхананья Гадре, Нігула Мелхотра: Пер. з англ. – СПб .: БХВ-Петербург, 2012. – 352 с .: іл. – (Електроніка)