Змейка и Тетрис на микроконтроллере

Тетрис и Змейка
Увидел как-то интересный видеоролик в сети, в нем демонстрировалась игра змейка реализованная на микроконтроллере и светодиодной матрице 8х8, потом нашел еще несколько подобных роликов, которые заинтересовали меня. Среди них также был ролик, где на “мощном” микроконтроллере была собрана игра тетрис. После просмотра, я решил разработать собственный вариант устройства, в котором совмещены обе игры, с применением микроконтроллера PIC16F688 и двух светодиодных матриц, которые отображают игровое поле с разрешением 8х16 точек.

Схема устройства показана ниже. Вывод информации на матрицы H1, H2 в динамическом режиме осуществляется посредством сдвиговых регистров DD2, DD3, DD4. Выходы микросхем DD2, DD3 подключены к анодам матриц . Катоды обеих матриц подключены к коллекторам транзисторов VT1-VT8, управляющие сигналы для которых формируются микросхемой DD4. Микроконтроллер загружает данные в регистр DD4, при переполнении которого, информация с 9 вывода передается на вход регистра DD3, далее таким же образом данные передаются на регистр DD2. Резисторы R1-R16 ограничивают ток через светодиоды матриц. Резисторы R17-R23 устанавливают ток базы транзисторов VT1-VT8. Микроконтроллер работает на частоте 8 МГц от внутреннего генератора. Частота обновления изображения составляет 100Гц.
Схема устройства
После подачи питания, на игровом поле отображается заставка игры “Змейка”. В верхней части поля высвечивается цифра 1, в нижней части представлено изображение фрагмента игры. При нажатии на кнопку SB5 “Старт/Пауза”, выполняется переход в меню игры, в верхней части которого отображается уровень игры в виде цифр от 1 до 9. Уровень игры устанавливается кнопкой SB1 “Вверх”, при каждом нажатии происходит последовательное увеличения номера уровня на единицу. После цифры 9, снова высвечивается цифра 1. От установленного уровня игры зависит начальная длина змейки, так для 1-го уровня длина составляет 3 точки, для 9-го 11 точек. В нижней части меню отображается информация о скорости движения змейки. Цифре 1 соответствует минимальная скорость, а цифре 9 максимальная. Значение скорости устанавливается кнопкой SB4 “Вниз” подобно установке уровня игры. Свечение светодиодов по периметру поля в меню означает, что выбран режим игры с наличием границ по периметру поля. В этом режиме, при выходе змейки за пределы игрового поля наступает проигрыш. Если в меню, светодиоды по периметру поля погашены, то выбран режим без наличия границ. В этом случае при выходе за пределы игрового поля, голова змейки появляется с противоположной стороны поля. Кнопками SB2 “Вправо” и SB3 “Влево” устанавливается требуемый режим игры. При первоначальном входе в меню игры, значение длины и скорости устанавливаются на единицу, выбирается режим с наличием границ.

После нажатия кнопки “Старт/Пауза” из меню игры, на игровом поле высвечивается змейка в базовом положении и случайная свободная точка. Нажатие любой из кнопок “Вверх”, “Влево”, “Вправо” приводит змейку в движение по соответствующему напрвлению. После начала движения, для управления змейкой также становится доступна кнопка “Вниз”. При наезде на светящуюся точку, длина змейки увеличивается. После набора 14 точек происходит переход на следующий уровень игры. После 9-го уровня происходит переход на первый уровень. В случае наезда змейки на собственное туловище, или выхода за пределы игрового поля в режиме наличия границ, наступает проигрыш. После 3-х проигрышей происходит возврат в меню игры, где указан текущий уровень игры и скорость. После начала движения змейки, нажатиями кнопками “Старт/Пауза” можно приостановить и возобновить игру.

Для выхода из меню игры необходимо удерживать нажатой кнопку “Старт/Пауза” в течении 1 секунды, после чего на игровом поле высветится заставка игры. Переключение между играми осуществляется нажатием любой из кнопок “Вверх”, “Вниз”, “Влево”, “Вправо”. При этом высвечивается заставка соответсвующей игры.

В верхнй части заставки игры “Тетрис” высвечивается цифра 2, в нижней части представлено изображение фрагмента игры. Переход в меню игры осуществляется нажатием кнопки “Старт/Пауза”. В верхней части меню отображается количество баллов набранных игроком. Баллы начисляются за каждую удаленную строку. Счетчик баллов ведет счет до 99, затем обнуляется, и счет начинается заново. При старте каждой новой игры, счетчик также обнуляется. В нижней части меню отображается информация о скорости движения фигур, которая устанавливается кнопками “Вверх”, “Вниз” соответственно. После нажатия кнопки “Старт/Пауза” из меню, начинается игра, в верхней части поля появляются случайные фигуры, которые можно перемещать кнопками “Влево” и “Вправо” в соответсвующую сторону. Кнопка “Вверх” поворачивает фигуру на 90 градусов по часовой стрелке, при каждом нажатии. Удерживая нажатой кнопку “Вниз”, можно ускорить движение фигуры. Кнопкой “Старт/Пауза” можно приостановить и возобновить игру. Игра заканчивается когда новая фигура не может поместиться на игровом поле, после чего происходит переход в меню, где можно просмотреть количество баллов набранных игроком. Выход из меню выполняется также как в игре “Змейка”.

Если в течении 4 минут не была нажата ни одна из кнопок, то устройство переходит в режим пониженного энергопотребления, микроконтроллер отключает светодиодные матрицы, и переходит в спящий режим. Устройство “просыпается” после нажатия кнопки “Старт”, и возвращается в прежнее состояние.

В устройстве применены резисторы – типоразмера 1206 для поверхностного монтажа. Конденсаторы С2, С3 – керамические типоразмера 1206. Светодиодные матрицы H1, H2 – TOM-1088BG-B зеленого цвета свечения с диаметром светодиодов 3мм, и разрешением 8х8 точек. Кнопки стандартные тактовые.

Источник питания – стабилизированный блок питания напряжением 3,7-5В, также можно использовать гальванические элементы или аккумуляторы, например 3 последовательно соединненные батарейки по 1,5В типоразмера AA или AAA, я например использую 3 батарейки AA. Устройство сохраняет работоспособность при снижении напряжения питания до 3,3В, при этом уменьшается яркость свечения светодиодных матриц.

Статья опубликована в журнале Радио №2 2014г. под названием «Змейка» и «Тетрис» на микроконтроллере.
Внешний вид
Видеоролик демонстрирующий работу устройства

Печатная плата в формате Sprint Layout и JPG
Прошивка МК и исходник
Даташит на матрицу TOM-1088BMR

У этой записи 11 комментариев

  1. Транзисторы проще и компактнее, а главное дешевле было бы заменить парой чипов к примеру ЛА7 561й серии.

    1. Напряжение питания 561ЛА7 составляет 9В, а в устройстве можно применить максимум 5В. Кроме этого выходной ток низкого уровня у этой микросхемы максимум 1мА, а теперь представим что на одной из матриц загорелся весь столбец, то есть 8 светодиодов, получается через микросхему пройдет ток 8х10мА=80мА, что станет с этой микросхемой? Транзисторы лучшее и правильное решение.

  2. А у вас есть блок-схема программы для микроконтроллера

    1. Нет, блок схемы я не составлял

  3. А моделирования в протеусе нету случайно? А то смоделировав схему, она не корректно работает, загорается целый ряд вместо конкретных пикселей, подключил все по схеме.

    1. Нет, модель составлять не пробовал, попробую позже.

  4. В исходнике больше бы комментариев.

  5. Обязательно ли использовать светодиодную матрицу TOM-1088BG-B или можно другие взять?

    1. Можно использовать любые с общим катодом, и с такой же цоколевкой выводов, они в большинстве своем однотипные.

  6. уже спрашивали выше.
    столкнулся с этой же проблемой
    цитирую
    А моделирования в протеусе нету случайно? А то смоделировав схему, она не корректно работает, загорается целый ряд вместо конкретных пикселей, подключил все по схеме.
    конец цитаты
    буду очень благодарен за помощь а то я уже совсем отчаялся

Имя (обязательно)Email (обязательно)Веб-сайт

Добавить комментарий