67740

Функциональные и принципиальные схемы электронной игры “Tetris”

Курсовая

Коммуникация, связь, радиоэлектроника и цифровые приборы

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

Русский

2014-09-14

321.5 KB

13 чел.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

МАРИЙСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

                                                                                           Кафедра ИВС

 

Электронная игра

Курсовой проект

по дисциплине

Микропроцессорные системы

Выполнил: студент группы ВМ-41 Шерстенников М.Ю.     

                                                                                                                                                                                   

       

Проверил:  Мясников В.И            

                                                                                  

                                                                                          Оценка:

Йошкар-Ола, 2005


Аннотация

В данной пояснительной записке представлены функциональные и принципиальные схемы электронной игры “Tetris”. В соответствии с заданием выбраны составные части схемы, рассчитаны необходимые параметры схемы, а также разработано программное обеспечение.


Содержание

[1] В устройстве необходимо реализовать следующий интерфейс:

[2] кнопка включения/выключения игры;

[3] пять кнопок управления процессом игры;

[4] динамик.

[5] графический ЖКИ для вывода процесса игры:

[6]
Введение

[7] Электронная игра – это устройство, предназначенное для развлечения пользователя. Система представляет собой классическую игру “Тетрис”. Данное устройство является переносным, т.е. имеет независимое питание и небольшие размеры. Поэтому чаще всего оно будет полезно при длительном ожидании. Оно имеет небольшой ЖК экран, на котором и отображается сама игра и через который пользователь получает большую часть информации.

[8]
1. Функциональная спецификация

[9] 3.  Принятые названия кнопок и их описание:

[10] power – включение/выключение устройства;

[11] start/pause – переход в режим паузы и выход из нее, а также пере-запуск игры;

[12] change – переворачивание текущего элементы игры;

[13] left – сдвиг влево текущего элементы игры;

[14] right – сдвиг вправо текущего элементы игры;

[15] down – ускоренное передвижение текущего элементы игры вниз;

[16]
2. Проектирование системы

[17]
3. Проектирование аппаратной части устройства

[17.1]
3.2 Разработка принципиальной схемы.

[18]
4. Проектирование программной части

[18.1] 4.1. Разработка структуры программного обеспечения

[19] В разделе проектирования системы была определена функционально-модульная структура ПО контроллера (рис. 2.2).

[20] Эта структура должна быть дополнена еще двумя модулями, которые не могут быть выведены из функциональной спецификации – модуль ИНИЦИАЛИЗАЦИИ и модуль РАЗРЕШЕНИЯ ОБЩЕГО ПРЕРЫВАНИЯ. Когда система включается, она должна быть инициализирована, таким образом данный модуль должен находиться на втором уровне нисходящей иерархии – сразу за главным модулем. Разрешение общего прерывания не будем включать в модуль ИНИЦИАЛИЗАЦИИ, с целью лучшей читаемости программы.

[21] В соответствии с функционально модульной структурой процедура MAIN будет иметь вид:

[22] Первая операция процедуры MAIN обращается к процедуре ИНИЦИАЛИЗАЦИЯ, далее к процедуре РАЗРЕШЕНИЕ ОБЩЕГО ПРЕРЫВАНИЯ. После выхода из этой процедуры осуществляется переход к другим процедурам, которые содержаться внутри бесконечного цикла while. Таким образом в системе обеспечивается проверка нажатия кнопки и сброс охранного таймера. Эти операции выполняются до тех пор, пока система подключена к источнику питания.

[23] Модуль ИНИЦИАЛИЗАЦИИ должен содержать процедуры, которые выполняют функции инициализации и восстановления после зависания. При включении питания необходимо настроить следующие узлы микроконтроллера: порты, таймеры, систему прерываний, охранный таймер. Порты настраиваются на ввод или вывод информации. Таймер служит для отсчета временных интервалов и  для часов реального времени. Настройка системы прерывания заключается в определении источников прерывания и их разрешения. У охранного таймера настраивается время задержки до его срабатывания, если не будет к нему обращения. Данный модуль является не сложным, поэтому не имеет смысла разбивать его на отдельные процедуры:

[24] Модуль РАЗРЕШЕНИЯ ОБЩЕГО ПРЕРЫВАНИЯ разрешает системе реагировать на прерывания. Для контроллера это внешнее прерывание от кнопки и внутреннее от таймера. Разрешение индивидуальных прерываний выполнено в модуле ИНИЦИАЛИЗАЦИЯ.

[25] После окончания этой процедуры осуществляется сброс флага и разрешение принятия входных данных, и система снова готова реагировать на внешние события.

[26] Модуль СБРОС WDT устанавливает охранный таймер в исходное состояние, не позволяя ему сбросить всю систему. Это библиотечная функция языка.

[27] ВЫХОДНОЙ модуль устанавливает выходной вектор на выходной порт микроконтроллера. Данные сигналы управляют ЖКИ и динамиком.

[27.1]
4.2. Разработка заданного программного модуля

[28] Для реализации выберем модуль ВХОДНОЙ. Представим его в графическом виде при помощи блок-схема алгоритма.

[29] При включении устройства устанавливается состояние “ожидание”, после чего устройство не реагирует ни на какие нажатия кнопок, кроме start/pause и power. При нажатии start/pause происходит переход в режим игры. Данный режим является основным, в нем система реагирует и обрабатывает все нажатия кнопок. При нажатии кнопок управления (left, right, down или change) происходит их обработка, и выполняются действия с ЖКИ и данными. Если нажата кнопка start/pause, происходит переход в режим паузы. В режиме паузы система может перейти в режим игра (нажатие start/pause) или режим ожидания (нажатие start/pause более 2 секунд)

[30] Приведём представление архитектуры ПО контроллера электронной игры в виде графа состояний системы:

[30.1]
4.3. Руководство программиста

[31] Программа управления электронной игрой написана на языке С.

[32] Программа содержит следующие функции:

[33] Main() – главная функция, которая управляет процессом игры;

[34] Init() – инициализация устройства;

[35] Scan() – функция сканирования клавиатуры;

[36] DrawHelp() – вывод вспомогательной информации на экран при запуске или при перезагрузке игры;

[37] OnLeft(), OnRight(), OnChange(), OnDown() – функции, управляющие выводом на ЖКИ и динамик в зависимости от нажатой клавиши;

[38] UnSetData() – обнуление всех данных, очистка ЖКИ (вызов DrawHelp()).

[39] А также два обработчика прерываний:

[40] IntTimerForDisp() – для продвижения элемента вниз, в частности вызывает функцию OnDown();

[41] IntTimerForKeyb() – для сканирования клавиатуры.

[42] В программе также используется охранный таймер, сброс которого осуществляется библиотечной процедурой _WDR() в теле основной программы.

[43] Пояснения к программе приведены в самом листинге.

[44] void Scan();    // эти функции подробно описывать не будем

[45]
Заключение

[46]
Литература


Техническое задание

Требуется спроектировать электронную игру типа “Tetris”.

В устройстве необходимо реализовать следующий интерфейс:

  •  кнопка включения/выключения игры;
  •  пять кнопок управления процессом игры;
  •  динамик.
  •  графический ЖКИ для вывода процесса игры:


Введение

Электронная игра – это устройство, предназначенное для развлечения пользователя. Система представляет собой классическую игру “Тетрис”. Данное устройство является переносным, т.е. имеет независимое питание и небольшие размеры. Поэтому чаще всего оно будет полезно при длительном ожидании. Оно имеет небольшой ЖК экран, на котором и отображается сама игра и через который пользователь получает большую часть информации.


1. Функциональная спецификация

  1.  Список функций, предоставляемых данной системой:
    •  включение/ выключение устройства при нажатии кнопки power;
    •  запуск игры при нажатии кнопки start/pause;
    •  переход в режим паузы при нажатии в процессе игры кнопки start/pause;
    •  перезапуск игры при нажатии и удерживании в течение 2с кнопки  start/pause;

  1.  Описание интерфейса между системой и пользователем:
  •  шесть кнопок управления;
  •  ЖК дисплей для вывода процесса игры;
  •  динамик для вывода звука.

3.  Принятые названия кнопок и их описание:

  •  power – включение/выключение устройства;
  •  start/pause – переход в режим паузы и выход из нее, а также пере-запуск игры;
  •  change – переворачивание текущего элементы игры;
  •  left – сдвиг влево текущего элементы игры;
  •  right – сдвиг вправо текущего элементы игры;
  •  down – ускоренное передвижение текущего элементы игры вниз;

Представление функциональной спецификации в виде документа по категориям входы, выходы и функции.

А. Входы

1. кнопки

В. Выходы

1. ЖК дисплей

2. динамик

С. Функции

  1.  Система начинает функционировать при нажатии кнопки power;
  2.  При включении система устанавливается в начальное состояние.
  3.  Система восстанавливается при зависаниях.


2. Проектирование системы

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

На основании анализа функциональной спецификации можно выделить следующие блоки, которые необходимо реализовать аппаратным способом:

ВХОДЫ:

  •  Модуль кнопок

ВЫХОДЫ:

  •  Модуль динамика
  •  Модуль ЖКИ дисплея

ФУНКЦИИ:

  •  Модуль защиты от зависания контроллера (охранный таймер)

СТАНДАРТНЫЕ МОДУЛИ СИСТЕМЫ:

  •  Модуль контроллера
  •  Модуль сброса и синхронизации
  •  Модуль питания
  •  Модуль внешней ОЗУ

Программные модули также определяются на основе анализа функциональной спецификации, из которого следует, что система может быть разделена на три части: ВХОД, ВЫХОД и ФУНКЦИИ.

ВХОДНОЙ и ВЫХОДНОЙ модули реализуют функции взаимодействия с аппаратной частью системы и представляют нижний уровень модульной структуры.

Часть спецификации ФУНКЦИИ может быть разделена на три различных модуля:

1. Входное состояние кнопок считывается с помощью процедуры ВХОДНОГО модуля. Однако прежде, чем должно быть предпринято какое-либо действие, необходимо проверить состояние этих входов. Все процедуры, выполняющие проверку и определяющие, какие действия должны быть предприняты по результатам проверки, необходимо сгруппировать вместе в модуле ПРОВЕРКИ.

2. Модуль обслуживания охранного таймера.

3. Если результат проверки одной из процедур модуля ПРОВЕРКИ указывает на то, что произошло нажатие кнопки, должна быть вызвана процедура для последовательного установления ВЫХОДНЫХ состояний. Дополнительно к этим модулям необходимо добавить, так называемые, стандартные модули: главный модуль MAIN и модуль ИНИЦИАЛИЗАЦИИ СИСТЕМЫ.

Модули, которые могут быть реализованы как аппаратным, так и программным способом:

- модуль ТАЙМЕРА, для формирования временных интервалов;

- модуль ПОДАВЛЕНИЯ ДРЕБЕЗГА контактов кнопок.

В настоящее время большинство микроконтроллеров имеют встроенные аппаратные узлы такие как, таймеры, контроллеры прерывания и т.д. Использование встроенных аппаратных частей повышает производительность системы за счет параллельности их работы по отношению к процессору микроконтроллера. Вследствие этого, следует использовать встроенный модуль ТАЙМЕРА, а программный модуль ТАЙМЕРА будет осуществлять управление аппаратным узлом. В этой же связи, можно объединить входные сигналы от всех кнопок (т.к. реакции на их сработку функционально не отличаются) и подать входной сигнал на встроенный контроллер прерываний. Такое решение позволит уменьшить количество используемых выводов микроконтроллера и уменьшит время реакции на внешнее событие. Модуль ПОДАВЛЕНИЯ ДРЕБЕЗГА контактов кнопок лучше реализовать программным способом.

В результате разработки проекта системы, можно построить ее структурную схему, взяв за основу, общую модульную структуру аппаратных средств (рис.2.1). Структурная схема домофона представлена на рис.2.1.    

Рис. 2.1 Структурная схема

Функционально-модульная структура программной части системы приведена на рис.2.2. Каждый из модулей размещается на одном из уровней нисходящей иерархии.

Рис. 2.2. Функционально-модульная структура ПО контроллера домофона.


3. Проектирование аппаратной части устройства

3.1 Разработка функциональной схемы.

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

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

Модуль динамика. В качестве динамика берём высокочастотный динамик 1ГДВ-1-8 с сопротивлением 8 Ом и габаритами 40x40x29. Схема подключения динамика изображена на рис. 3.1.

Рис. 3.1 Схема подключения динамика.

Модуль ЖК индикатора. В нашем случае это графический индикатор, который используется для отображения процесса игры. Для этой цели подойдет индикатор с видимой частью 100х80 точек.

Для модуля микроконтроллера необходимо определить требования на его архитектуру, в соответствии с заданием и структурной схемой. Так, в нашем случае микроконтроллер должен содержать таймер, контроллер обработки внешних прерываний, желательно наличие охранного таймера (чтобы не реализовать его в виде отдельной микросхемы). Все современные микроконтроллеры имеют встроенный тактовый генератор с внешней времязадающей цепью. Использование варианта с полностью встроенным тактовым генератором также привлекательно, однако номенклатура таких устройств ограничена. Также следует учесть, что для

реализации программного обеспечения потребуется значительное количество оперативной памяти, поэтому у микроконтроллера должна быть возможность подключения внешней ОЗУ. На основании анализа структурной схемы получим, что количество внешних линий ввода/вывода должно быть не менее 32 (19 выводов  управления ЖКИ и внешней ОЗУ, 5 – управления

клавиатурой, 3 – управления динамиком).

На схему сброса и синхронизации не накладывается каких-либо особых требований, вида: частота генератора должна иметь определенную стабильность, её значение необходимо выбирать с учетом обеспечения требуемой синхронизации последовательного канала и т.д. Поэтому в качестве задающего генератора, если не будет варианта с встроенным тактовым генератором, можно выбрать внутренний генератор с внешними времязадающими цепями, у которого частота определяется подсоединенным к внешним выводам кварцевым  резонатором. Такой вариант является самым распространенным и дешёвым.

Схема сброса должна выработать импульс сброса для микроконтроллера при включении питания. Так как схема должна эксплуатироваться в довольно жестких условиях, то логично потребовать от неё выработки сброса при уходе напряжения питания за определенный порог, например, ниже 4,5 В.

Модуль питания в нашем случае устройство не нужно питать от сети 220В, поэтому в качестве источника возьмем один элемент неперезаряжаемого аккумулятора. Т.к. напряжения элемента недостаточно для питания устройства, введем схему с повышающим преобразователем напряжения. Включение питания будет происходить с помощью кнопки с двумя фиксированными состояниями: замкнуто, не замкнуто.

Рис. 3.2 Схема модуля питания.

Модуль внешней ОЗУ реализуем с помощью статического ОЗУ объемом 4 Кбайт. Для его подключения также необходимо реализовать схему мультиплексирования на регистре-защелке.


3.2 Разработка принципиальной схемы.

Разработка принципиальной схемы основывается на функциональной схеме устройства и заключается в выборе конкретной элементной базы, необходимых электрических  расчётов элементов. Выбор элементов осуществляется по справочникам, фирменным описаниям, книгам и т.д.

Выбор кнопок определяется эргономическими требованиями, условиями эксплуатации, преемственностью, рекомендациями министерств и т.д. Для курсового проекта определимся только с типом – они представляют собой обычную пленочную клавиатуру с 5 кнопками.

В качестве модуля защиты от помех в данном случае лучше использовать специализированные микросхемы, разработанных для подключения механических переключателей. Так, серия MAX681х защищает от статического электричества (+/–15кВ), большого напряжения на входах (до уровня +/– 25В). Кроме того, она снабжена схемой защиты от дребезга контактов. Для нашего случая подойдет микросхема MAX6818. Её внутренняя структура содержит защитные диоды, аппаратную схему подавления дребезга и защиту от статики. Типовая схема включения для нашего случая приведена на рис. 3.3.

 Рис. 3.3 Схема модуля кнопок.

Индикатор выберем LMH234 фирмы Hitachi. Данный индикатор представляет собой матричный ЖКИ дисплей. Состоит он из четырех БИС контроллера HD44102 и ЖК панели. Модель позволяет отображать графическое поле 100х80 точек. Имеет 20 выводов (3 не используются):

CS1 - Выбор кристалла        CS2 - Выбор кристалла    CS3 - Выбор кристалла

EN  - Общее разрешение     R/W - Чтение/Запись        D/I  -  Данные/Команды

Gnd - Общий контакт             +5V - Питание модуля      

CT - Управ. контрастностью DB0..DB7 - Шина данных   

На основании анализа требований, предъявляемых к микроконтроллеру, и учитывая, что в задании на разработку нет рекомендации по его выбору,

остановимся на микроконтроллере AVR AT90S4414. Его характеристики: FLASH-память программ объемом 4Кбайт, EEPROM-память данных

объемом 256 байт, ОЗУ объемом 256байт, количество программируемых линий  ввода/вывода равно 32, тактовая частота до 8МГц.

Схема синхронизации наиболее просто реализуется путем использования внутреннего тактового генератора с подключенным внешним кварцевым резонатором. 1МГц

При выборе схемы сброса (супервизора питания) необходимо обратить внимание на то, чтобы длительность импульса, генерируемого схемой по включению питания, была больше длительности, требуемой для сброса микроконтроллера. Кроме того, у разных микроконтроллеров сброс  осуществляется или высоким или низким уровнем (у AT90S4414 сброс низким уровнем). Тип выхода схемы сброса может быть или двухтактным или открытым коллектором, в последнем случае необходим нагрузочный резистор.

AT90S4414 имеет встроенную схему сброса по включению питания, которая вырабатывает импульс при достижении питания уровня ≈2В. Соответственно, при снижении напряжения питания ниже 2В также произойдет сброс микроконтроллера. Во многих ответственных приложениях работа устройства при напряжении ниже 4,2В не гарантируется. В этих случаях используют внешние схемы сброса, порог срабатывания которых имеет требуемый порог срабатывания. Зададимся уровнем срабатывания схемы сброса в 4,4В.

Выберем супервизор фирмы Dallas – DS 1813-5, удовлетворяющий указанным условиям. Типовая схема его включения приведена на рис 3.4.

Рис.3.4 Типовая схема подключения супервизора питания.

В качестве внешнего ОЗУ возьмем отечественную БИС ОЗУ КР541РУ1 объемом 4Кб. Данной памяти будет достаточно для хранения необходимых данных.

В качестве источника питания, как отмечалось выше, выберем один элемент аккумулятора с повышающим преобразователем напряжения.

Напряжение, которое должен обеспечить модуль, зависит от мощности потребления устройства. Определим приблизительно мощность потребления контроллером игры.

Так, ток потребления микросхем составляет:

  •  AT90S4414 – 8,5 мА на частоте 8 МГц;
  •  DS 1813-5 – 40 мА;
  •  LMH234 – 15 мА;

  •  КР541РУ1– 6,5мА;
  •  533ИР22 – 2мА;
  •  MAX6818 – 20мкА

Итого потребляемый ток составит около 72мА, при 5В питания потребляемая мощность равна 0,36Вт.

Функциональная окончательная схема устройства представлена на рис.3.5.

Рис 3.5 Функциональная схема


4. Проектирование программной части
 

4.1. Разработка структуры программного обеспечения

В разделе проектирования системы была определена функционально-модульная структура ПО контроллера (рис. 2.2).

Эта структура должна быть дополнена еще двумя модулями, которые не могут быть выведены из функциональной спецификации – модуль ИНИЦИАЛИЗАЦИИ и модуль РАЗРЕШЕНИЯ ОБЩЕГО ПРЕРЫВАНИЯ. Когда система включается, она должна быть инициализирована, таким образом данный модуль должен находиться на втором уровне нисходящей иерархии – сразу за главным модулем. Разрешение общего прерывания не будем включать в модуль ИНИЦИАЛИЗАЦИИ, с целью лучшей читаемости программы.

В соответствии с функционально модульной структурой процедура MAIN будет иметь вид:

MAIN()

{

   ИНИЦИАЛИЗАЦИЯ СИСТЕМЫ();

   РАЗРЕШЕНИЕ ОБЩЕГО ПРЕРЫВАНИЯ();

   while (1)          

     {

ПРОВЕРКА ();

СБРОС WDT();

      }

}

Первая операция процедуры MAIN обращается к процедуре ИНИЦИАЛИЗАЦИЯ, далее к процедуре РАЗРЕШЕНИЕ ОБЩЕГО ПРЕРЫВАНИЯ. После выхода из этой процедуры осуществляется переход к другим процедурам, которые содержаться внутри бесконечного цикла while. Таким образом в системе обеспечивается проверка нажатия кнопки и сброс охранного таймера. Эти операции выполняются до тех пор, пока система подключена к источнику питания.

Модуль ИНИЦИАЛИЗАЦИИ должен содержать процедуры, которые выполняют функции инициализации и восстановления после зависания. При включении питания необходимо настроить следующие узлы микроконтроллера: порты, таймеры, систему прерываний, охранный таймер. Порты настраиваются на ввод или вывод информации. Таймер служит для отсчета временных интервалов и  для часов реального времени. Настройка системы прерывания заключается в определении источников прерывания и их разрешения. У охранного таймера настраивается время задержки до его срабатывания, если не будет к нему обращения. Данный модуль является не сложным, поэтому не имеет смысла разбивать его на отдельные процедуры:


ИНИЦИАЛИЗАЦИЯ()

   {   

установка портов на ввод/вывод и задание выходного вектора;

настройка постоянной времени охранного таймера;

настройка системы прерывания, разрешение отдельных прерываний;

    }

Модуль РАЗРЕШЕНИЯ ОБЩЕГО ПРЕРЫВАНИЯ разрешает системе реагировать на прерывания. Для контроллера это внешнее прерывание от кнопки и внутреннее от таймера. Разрешение индивидуальных прерываний выполнено в модуле ИНИЦИАЛИЗАЦИЯ.

Модуль ПРОВЕРКИ проверяет состояние флага занятости индикатора. Если флаг не установлен, то запускается одна из процедур в выходном модуле. Эти процедуры содержатся в ВЫХОДНОМ модуле, такие как запись команды, запись данных и вывод информации на ЖКИ.

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

ПРОВЕРКА()

  {

           Если флаг занятости не установлен, то выполнить

{

ВЫХОДНОЙ (параметры);

    }

    }

Модуль СБРОС WDT устанавливает охранный таймер в исходное состояние, не позволяя ему сбросить всю систему. Это библиотечная функция языка.

ВХОДНОЙ модуль должен реагировать на поступления данных, которые необходимо вывести на экран. Реализуем данный модуль в виде подпрограммы записи команды и данных на индикатор и вывода их на экран. При установлении занятости индикатора необходимо выставить флаг занятости.

ВХОДНОЙ()

   {

 Посылка команды

       Вывод данных

    }

 

ВЫХОДНОЙ модуль устанавливает выходной вектор на выходной порт микроконтроллера. Данные сигналы управляют ЖКИ и динамиком.

ВЫХОДНОЙ(параметры)

   {        // начало процедуры

установка на порту выходного вектора;  

    }            // возврат


4.2. Разработка заданного программного модуля

Для лучшего восприятия программы представим ее общую упрощенную структуру в виде блок-схемы:


Для более детальной реализации выберем модуль
ВХОДНОЙ. Представим его в графическом виде при помощи блок-схемы алгоритма.

 

Для реализации выберем модуль ВХОДНОЙ. Представим его в графическом виде при помощи блок-схема алгоритма.

При включении устройства устанавливается состояние “ожидание”, после чего устройство не реагирует ни на какие нажатия кнопок, кроме start/pause и power. При нажатии start/pause происходит переход в режим игры. Данный режим является основным, в нем система реагирует и обрабатывает все нажатия кнопок. При нажатии кнопок управления (left, right, down или change) происходит их обработка, и выполняются действия с ЖКИ и данными. Если нажата кнопка start/pause, происходит переход в режим паузы. В режиме паузы система может перейти в режим игра (нажатие start/pause) или режим ожидания (нажатие start/pause более 2 секунд)

Приведём представление архитектуры ПО контроллера электронной игры в виде графа состояний системы:

Pwr – сигнал от кнопки power;

Ps – сигнал от кнопки start/pause;

Ps2 – сигнал от кнопки start/pause, удерживаемый более 2 сек;

М – сигналы от кнопок left, right, down и change;

 


4.3. Руководство программиста

Программа управления электронной игрой написана на языке С.

Программа содержит следующие функции:

  •  Main() – главная функция, которая управляет процессом игры;
  •  Init() – инициализация устройства;
  •  Scan() – функция сканирования клавиатуры;
  •  DrawHelp() – вывод вспомогательной информации на экран при запуске или при перезагрузке игры;
  •  OnLeft(), OnRight(), OnChange(), OnDown() – функции, управляющие выводом на ЖКИ и динамик в зависимости от нажатой клавиши;
  •  UnSetData() – обнуление всех данных, очистка ЖКИ (вызов DrawHelp()).

А также два обработчика прерываний:

  •  IntTimerForDisp() – для продвижения элемента вниз, в частности вызывает функцию OnDown();
  •  IntTimerForKeyb() – для сканирования клавиатуры.

В программе также используется охранный таймер, сброс которого осуществляется библиотечной процедурой _WDR() в теле основной программы.

Пояснения к программе приведены в самом листинге.

#include “4414def.h”  //подключение стандартных функций микроконтроллера

#includelm234.h”  //подключение стандартных функций ЖКИ

#define GRUN  0 //игра запущена 

#define GPAUSE  1 //игра в режиме паузы

#define GWAIT  2 //ожидание старта игры

#define LEFT  0x01    //кнопка left через PB0

#define RIGHT  0x02    //кнопка right через PB1

#define CHANGE  0x04    //кнопка change через PB2

#define DOWN  0x08    //кнопка down через PB3

#define START  0x10    //кнопка start/pause через PB4

define buf APORT

int matrix[18][16];   //матрица занятости экрана

int state, count;   //состояние, счет

int element;    //вид текущего элемента

int x,y;     //координаты текущего элемента

void main(void)

 {

   INIT();                 //инициализация контроллера

     _SEI();                     // Общее разрешение прерываний

           while (1)   // Бесконечный цикл

      {

_WDR();         // Сброс охранного таймера

switch (state)

{

case GRUN:

if(buf!=0x0)   //если нажата кнопка

{

switch (buf)                              // Выполнение действий в

{     // зависимости от нажатой кнопки

case LEFT:

OnLeft();

break;

case RIGHT:

OnRight();

break;

case CHANGE:

OnChange();

break;

case DOWN:

OnDown();

break;

case START:

state=GPAUSE;

break;

}

}

break;

case GPAUSE:

WaitForStart();

break;

case GWAIT:

 UnSetData();

DrawHelp();

WaitStart();

break;

}

      }

  }

void INIT(void)   // инициализация контроллера

 {

MCUCR=MCUCR || 0x1 //Разрешение использования внешнего ОЗУ

// Настройка таймера 1

   TCCR1A = 0x00;

    TCCR1B = 0x28;  // коэффициент деления частоты генератора = 40

    TCNT1 = 0xFA;  //100 Гц при частоте кварца 1МГц

// 1МГц/40/100Гц = 250 = 0xFA;

    TIMSK |= Bit(MskTIE1); // Таймер 1(8 – разрядный) - разрешение прерываний

    GIMSK |= Bit(MskInt0); // INT0 - разрешение прерывания

   

// Настройка таймера 2

   TCCR2A = 0x00;

    TCCR2B = 0x0F;                             // коэффициент деления частоты генератора = 16

    

TCNT2H = 0x0B; TCNT2L = 0xDC; //1,5 Гц при частоте кварца 1МГц

// 1МГц/16/1Гц = 62500 = 0xF424;  

//т.к. 16р таймер работает на увеличение,

//то загрузка его = 0x10000-0x1388 = 0x0BDC 

    TIMSK |= Bit(MskTIE2); // Таймер 2 - разрешение прерываний

    GIMSK |= Bit(MskInt1); // INT1 - разрешение прерывания

// Настройка портов

DDRB = 0x04; //00000100 – РВ0..РВ4-на вход (клавиатура), РВ5 – на выход (динамик)

    DDRD =0x06;      //00000110 – PD0..PD5 на выход (управление ЖКИ)

    state = GWAIT;  //установка состояния в “ожидание”

 }

void WaitForStart()

{

int fl=1,n=0;

while(!START)  //ожидание нажатия кнопки start/pause

{

scan();

if(buf!=START) fl=0; //Обнуляем флаг, если кнопка start/pause была 

 отпущена

if(fl==1)

{

n++;

if(n>19) UnSetData();  //Вызываем функцию перезагрузки, если

нажатие более 2сек

}

_WDR();

 }

state=GRUN;

}

void OnLeft()

{

 if(y<40) DPORT=0x2;  //выбор контроллера

 else  if(y<70) DPORT=0x4;

 else DPORT=0x8;

x=x-5;     //так как сдвиг влево, уменьшение x на 5

WaitReady();

_asm

 {

MOV    SP,#50H

MOV    R0,y;    Выбрать строку y 

LSL      R0,4   

ADD     R0,x   смещение по горизонтали x

CALL   WR_COM;  записать команду 

MOV    A, element&Ch;   загрузить в АСС первый байт данных 

CALL   WR_DATA;   записать первый байт в индикатор 

INC   R0;    переместится по горизонтали на одну колонку 

CALL   WR_COM;   запистаь команду в индикатор 

MOV    A, element&3h;  загрузить в АСС второй байт данных 

CALL   WR_DATA

}

}

void UnSetData()    //Сброс всех данных

{

for(int i=1;i<=16;i++)

for(int j=1;j<=18;j++)

matrix[i][j]=0;

x=8;

y=0;

count=0;

element=1;

state=GWAIT;   //Переход в состояние ожидания

}

interrupt [TIMER1_OVF1_vect] void IntTimerForDisp(void)

{

    TCNT1L = 1,5;            // Задание периода работы таймера – 15 Гц

OnDown();   //Сдвиг элемента вниз с помощью функции OnDraw()

}

interrupt [TIMER1_OVF2_vect] void IntTimerForKeyb (void)

 {     

    TCNT1L = 10;            // Задание периода работы таймера – 100 Гц

 Scan();     // Сканирование клавиатуры

 }

void Scan();    // эти функции подробно описывать не будем

void OnLeft();

void OnRight();

void OnChange();

void DrawHelp();


Заключение

Проработав соответствующий материал и применив полученные знания по дисциплине МПС было спроектировано устройство электронной игры и соответствующее программное обеспечение для него.


Литература

  1.  Мясников В.И. Микропроцессорные системы. Учебное пособие по курсовому проектированию.- Йошкар-Ола: МарГТУ, 2003.
  2.  Предко М. Руководство по микроконтроллерам. В 2-х томах. – М.: Постмаркет, 2001.
  3.  Евстифеев А.В. Микроконтроллеры AVR семейства Classic фирмы “ATMEL”.  М.: “Додэка–XXI” 2002 .
  4.  Техническая документация на микроконтроллер AT90S4414 фирмы Atmel.

5.  Техническая документация на ЖКИ LMH234 фирмы Hitachi.

6.  Internet.


8

Лист

Дата

Подпись

№ докум.

Лист

Изм.

КНФУ.ХХХХХХ.001 ПЗ

7

Лист

Дата

Подпись

№ докум.

Лист

Изм.

КНФУ.ХХХХХХ.001 ПЗ

10

КНФУ.ХХХХХХ.001 ПЗ

9

Лист

Дата

Подпись

№ докум.

Изм.

Лист

№ докум.

Подпись

Дата

Лист

6

КНФУ.ХХХХХХ.001 ПЗ

КНФУ.ХХХХХХ.001 ПЗ

Модуль микроконтроллера

Модуль питания

Схема сброса и синхронизации

Модуль кнопок

ист

Изм.

Модуль индикатора

Модуль динамика

Главный модуль MAIN

Модуль ПРОВЕРКИ

Модуль СБРОС WDT

ВХОДНОЙ модуль

ВЫХОДНОЙ модуль

Лист

Дата

Подпись

№ докум.

Лист

Изм.

КНФУ.ХХХХХХ.001 ПЗ

11

Лист

Дата

Подпись

№ докум.

Лист

Изм.

КНФУ.ХХХХХХ.001 ПЗ

12

Лист

Дата

Подпись

№ докум.

Лист

Изм.

A0..A7

AD0..AD7

LCD

LMH234

Динамик

Клавиатура

RG

533ИР22

RAM

КР541РУ1

CPU

AT90S4414

   SP

+ 5В

RESET

GND

DS1813-5

AD0..AD7

A8,A13

AD0..AD7

AD0..AD7

A8,A13

Reset

+5V

SP

КНФУ.ХХХХХХ.001 ПЗ

13

Лист

Дата

Подпись

№ докум.

Лист

Изм.

Изм.

Лист

№ докум.

Подпись

Дата

Лист

14

КНФУ.ХХХХХХ.001 ПЗ

ALE

ALE

+5V

КНФУ.ХХХХХХ.001 ПЗ

15

Лист

Дата

Подпись

№ докум.

Лист

Изм.

2

Лист

3

Лист

4

Лист

ВМ-41 МарГТУ

Листов

Лит.

Электронная игра

Пояснительная записка

 Утверд.

Н. Контр.

Реценз.

Мясников  В. И

Провер.

ШерстенниковМ. Ю.

Разраб.

КНФУ.ХХХХХХ.001 ПЗ

5

Лист

Дата

Подпись

№ докум.

Лист

Изм.

КНФУ.ХХХХХХ.001 ПЗ

17

Лист

Дата

Подпись

Ожидание нажатия клавиши start/pause

+

Конец

-

Нажатие более 2 сек

Обнуление всех данных

Функция UnsetData

Нажатие клавиши

(Left or Right or Down or Change)        Power      Start/Pause

Запуск обработчика команды для нажатой клавиши: OnLeft, OnRight, OnDown или OnChange.

Вывод помощи на экран

Функция DrawHelp

КНФУ.ХХХХХХ.001 ПЗ

16

Лист

Дата

Подпись

№ докум.

Лист

Изм.

Начало

№ докум.

Лист

Изм.

Отрисовка экрана, обнуление данных, запуск таймера

Вход

КНФУ.ХХХХХХ.001 ПЗ

21

Лист

Дата

Подпись

№ докум.

Лист

Изм.

Изм.

Лист

№ докум.

Подпись

Дата

Лист

19

КНФУ.ХХХХХХ.001 ПЗ

КНФУ.ХХХХХХ.001 ПЗ

20

Лист

Дата

Подпись

№ докум.

Лист

Изм.

Код клавиши KBUF:

LEFT     RIGHT     DOWN    CHANGE     START

State!=GPAUSE

State!=WAIT

KBUF==START

OnLeft()

OnRight()

OnDown()

OnChange()

State=GPAUSE

State=GRUN

Выход

КНФУ.ХХХХХХ.001 ПЗ

18

Лист

Дата

Подпись

№ докум.

Лист

Изм.

Режим игры

Режим паузы

Режим ожидания

Выключено

Pwr

Pwr

Pwr

Pwr

Ps

Ps

Ps

Ps2

M

КНФУ.ХХХХХХ.001 ПЗ

22

Лист

Дата

Подпись

№ докум.

Лист

Изм.

КНФУ.ХХХХХХ.001 ПЗ

23

Лист

Дата

Подпись

№ докум.

Лист

Изм.

Изм.

Лист

№ докум.

Подпись

Дата

Лист

24

КНФУ.ХХХХХХ.001 ПЗ

W/R

CS

CS

W/R

CT

W/R

DI

CS1..CS3

SND

Модуль питания

Модуль ТАЙМЕРА


 

А также другие работы, которые могут Вас заинтересовать

24694. НЕСЕЛЕКТИВНЫЕ ОТСЕЧКИ 45 KB
  Такая отсечка применяется для быстрого отключения КЗ в пределах всей защищаемой ЛЭП. Неселективное действие отсечки при КЗ вне ЛЭП исправляется при помощи АПВ включающего обратно отключившуюся ЛЭП. При этом пускается устройство АПВ которое включает обратно неселективно отключившуюся ЛЭП W1 и восстанавливает питание подстанции В.
24695. УКАЗАТЕЛЬНЫЕ РЕЛЕ 101 KB
  20 показано указательное реле типа РУ21 сигнализирующее действие РЗ на отключение выключателя. При срабатывании РЗ по обмотке реле 3 проходит ток приводящий реле в действие. Ввиду кратковременности прохождения тока в обмотке указательных реле они выполняются так что сигнальный флажок и контакты реле остаются в сработанном состоянии до тех пор пока их не возвратит на место обслуживающий персонал.
24696. НЕОБХОДИМОСТЬ И СПОСОБЫ РЕЗЕРВИРОВАНИЯ 177 KB
  С ними нельзя не считаться поскольку отказ РЗ или выключателя означает неотключение КЗ а следовательно длительное прохождение токов КЗ и снижение напряжения в сети. Наряду с принятием мер по повышению надежности действия РЗ и выключателей особо важное значение приобретает резервирование отключения КЗ в случае отказа выключателя или действующей на него РЗ. Применяются два способа резервирования: дальнее осуществляемое РЗ и выключателями смежных участков установленными на соседних энергообъектах; ближнее осуществляемое РЗ и...
24697. НАЗНАЧЕНИЕ ЗАЩИТЫ ШИН 380.5 KB
  ДИФФЕРЕНЦИАЛЬНАЯ ЗАЩИТА ШИН Дифференциальная РЗ шин ДЗШ рис. Для питания ДЗШ на всех присоединениях устанавливаются ТТ с одинаковым коэффициентом трансформации К независимо от мощности присоединения. Тогда при внешних КЗ X 1пр = 0 и реле не будет действовать а при КЗ в зоне на шинах равна сумме токов КЗ притекающих к месту повреждения и ДЗШ работает. Вторичные токи направлены в обмотке реле одинаково поэтому ток в реле равен их сумме: Так както Выражение показывает что При КЗ на шинах ДЗШ реагирует на...
24698. 34 ЗАЩИТА АД 110 KB
  Наиболее просто токовая отсечка выполняется с реле прямого действия встроенными в привод выключателя. С реле косвенного действия отсечка выполняется с независимыми токовыми реле по схемам на рис.7; Iпуск пусковой ток электродвигателя; k0TC коэффициент отстройки Токовую РЗ электродвигателей мощностью до 2000 кВт следует выполнять как правило по наиболее простой и дешевой однорелейной схеме рис. На электродвигателях мощностью 20005000 кВт токовая отсечка выполняется двухрелейной.
24699. Основные особенности выполнения РЗ на блоках 88 KB
  2 отсутствие электрической связи между генератором и сетью имеющее место в блочных схемах облегчает решение вопросов селективности РЗ генератора от замыканий на землю вследствие высокой стоимости мощных генераторов и трансформаторов повышенные требования в части чувствительности быстродействия и надежности на блоках без поперечных связей необходимость действия на останов блока в целом; На блоках малой мощности до 30 МВт включительно в качестве РЗ от внешних КЗ применяется МТЗ с комбинированным пуском по напряжению. На блоках...
24700. ЗАЩИТА РОТОРА от замыкания на корпус 63 KB
  Для периодического контроля за состоянием изоляции цепей возбуждения используется вольтметр один зажим которого соединен с землей а второй поочередно подключается к полюсам ротора. Если изоляция ротора достаточно высока замеры вольтметра в обоих случаях будут близки к нулю. Второй конец обмотки токового реле заземляется через специальную щетку имеющую электрический контакт с валом ротора.
24701. Защита ротора от перегрузки 38 KB
  Для предотвращения повреждения ротора при перегрузке предусматривается специальная РЗ а также выполняется ограничение длительности форсировки возбуждения. Наиболее полноценную РЗ ротора от перегрузки можно осуществить с помощью реле имеющего характеристику соответствующую перегрузочной характеристике ротора. Выдержка времени первой ступени при одних и тех же значениях тока ротора примерно на 20 меньше выдержки времени второй ступени.
24702. ПОВРЕЖДЕНИЯ И НЕНОРМАЛЬНЫЕ РЕЖИМЫ РАБОТЫ ГЕН-В, ОСНОВНЫЕ ТРЕБОВАНИЯ К ЗАЩИТЕ ГЕНЕРАТОРОВ 41.5 KB
  Обмотка ротора гена находится под сравнительно невысоким напряжением и поэтому ее изоляция имеет значительно больший запас элой прочности чем изоляция статорной обмотки. Однако изза значительных механических усилий обусловленных большой частотой вращения роторов турбогенов относительно часто наблюдаются случаи повреждения изоляции и замя обмотки ротора на корпус т. Замыкание на корпус в одной точке обмотки ротора неопасно так как ток в месте замыкания очень мал и нормальная работа генератора не нарушается. При двойных...