Думаю все знают эту игру и каждый из нас играл в нее, вот и я как-то вспомнил о ней, и задумался над электронным вариантом игры. Первоначально я рассчитывал сделать вариант только для двух игроков, но потом добавил вариант игры против “электронного интеллекта” микроконтроллера. Игровое поле размером 3х3 состоит из двухцветных светодиодов, красный цвет свечения для крестиков и зеленый соответственно для ноликов. Микроконтроллер выбрал самый распространенный PIC16F628A, при этом для подключения всех 18 светодиодов у него не хватает линий ввода вывода, поэтому я решил использовать 8-ми разрядные последовательные сдвиговые регистры 74HC164N. С помощью таких регистров можно существенно нарастить количество выходных каналов. Правда у этих регистров нет внутренней защелки, все загружаемые данные сразу передаются на выходные каналы. Информация в регистр загружается последовательно, соответственно во время загрузки выходы будут многократно переключатся, что может вызвать нежелательное мерцание всех светодиодов, чтобы избежать этого устанавливается дополнительный транзистор к которому подключаются все светодиоды. Кроме этих регистров есть более продвинутые типа 74НС595, в которых есть внутрення защелка, кроме того выходные каналы можно переключить в высокоомное состояние.
На схеме выходы регистров DD2 и DD3 подключены к анодам светодиодов. Катоды всех светодиодов подключены к коллектору транзистора VT1. Микроконтроллер загружает данные в регистр DD2, при переполнении которого, информация с 13 вывода передается на вход регистра DD3. После загрузки регистров, на базу транзистора VT1 подается сигнал включения, тем самым катоды светодиодов подключаются к общему проводу. В результате загораются те светодиоды, на анодах которых присутствует напряжение. Светодиод HL4 подключен непосредственно к микроконтроллеру, так как все выходы регистров заняты. Резисторы R3, R4, R6-R21 ограничивают ток через светодиоды. Резистор R5 устанавливает ток базы транзисторов VT1. Микроконтроллер работает на частоте 4 МГц от внутреннего генератора.
После подачи питания микроконтроллер переходит в режим игры в котором противником игрока является “электронный интеллект” микроконтроллера. При этом на игровом поле высвечивается символ “+” (плюс) зеленого цвета. Игрок может играть только “крестиками”, которым присвоен красный цвет свечения светодиодов. Микроконтроллер играет “ноликами”, которым соответственно присвоен зеленый цвет свечения светодиодов. При выборе данного режима игры первой ход делает игрок, в следующей партии первый ход за микроконтроллером, затем опять за игроком, таким образом право первого хода передается по очереди. Ход крестиками осуществляется с помощью кнопки SB1, после нажатия которой начинает мигать красным цветом светодиод HL1 с частотой 1Гц, тем самым указывая клетку игрового поля на которую можно сделать ход. При повторном нажатии на кнопку SB1, светодиод HL1 гаснет, и начинает мигать светодиод HL2. При последующих нажатиях поочередно мигают остальные светодиоды поля, после светодиода HL9 снова начинает мигать светодиод HL1. Для того чтобы сделать ход на выбранную клетку необходимо удерживать нажатой кнопку SB1 в течении 1 секунды, после чего светодиод перестанет мигать и будет постоянно гореть красным цветом. После того как микроконтроллер сделает ход, игрок выбирает необходимую клетку как было описано выше и делает ход. Во время выбора клетки игроком, если она занята, то она пропускается, вместо нее мигает следующая свободная клетка.
В случае победы игрока, через секунду после того как сделан последний ход, на игровом поле высвечивется символ “Х” (крестик) красного цвета. Если побеждает микроконтроллер то высвечивается символ “О” (нолик) зеленого цвета. Ничья отображается в виде символа “Н” (Ничья), оранжевого цвета, то есть в каждом светодиоде зажигаются оба кристалла, красный и зеленый. Для начала новой игры необходимо нажать кнопку SB1.
Для переключения режима игры необходимо одновременно удерживать нажатыми кнопки SB1 и SB2 в течении 1 секунды. Переключение возможно после подачи питания, а также после завершения каждой партии в обоих режимах. После перехода в режим игры для двух игроков, на игровом поле высвечивается символ “+” (плюс) красного цвета. Для началы игры необходимо нажать кнопку SB1 или SB2, соответственно первым ходит тот игрок, кто раньше нажмет кнопку. То же правило справедливо для начала любой следующей партии. Здесь также кнопкой SB1 осуществляется ход крестиками, а кнопкой SB2 ход ноликами. Выбор клетки для крестиков описан выше, для ноликов справедливы те же действия, с одной разницей, после нажатия кнопки SB2 начинает мигать светодиод HL9, при следующем нажатии HL8, то есть светодиоды переключаются в обратном направлении.
Если в течении 4 минут не были нажаты кнопки SB1 или SB2, то устройство переходит в режим пониженного энергопотребления, микроконтроллер отключает все светодиоды и переходит в спящий режим. Устройство “просыпается” после нажатия кнопки SB1, и возвращается в прежнее состояние.
В устройстве применены резисторы – типоразмера 1206 для поверхностного монтажа, конденсатор С2 – керамический К10-17б. Светодиоды L-59EGW можно заменить аналогичными двухцветными с диаметром корпуса 5мм, кнопки SB1, SB2 тактовые SWT 6×6-7, но подойдут и другие аналогичные.
Все детали смонтированы на печатной плате из двухстороннего фольгированного текстолита. Источник питания – стабилизированный блок питания напряжением 3,7-5В, также можно использовать гальванические элементы или аккумуляторы, например 3 последовательно соединненные батарейки по 1,5В типоразмера AA или AAA.
Статья опубликована в журнале “Радио” №9 2013г. под названием «Крестики-нолики на микроконтроллере»
Печатная плата в формате Sprint Layout и JPG
Прошивка МК и исходник