67740

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

Курсовая

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

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

Русский

2014-09-14

321.5 KB

21 чел.

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

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

                                                                                           Кафедра ИВС

 

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

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

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

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

Выполнил: студент группы ВМ-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

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

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


 

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

30226. Технология приготовления и правила подачи салатов из варёных овощей 136 KB
  Классификация мяса Мясо классифицируют по виду убойных животных по полу возрасту по термическому состоянию упитанности и сортам . По качеству его делят на высший 1 2 3й сорта. В зависимости от сорта цвет пшена светлоили яркожелтый консистенция от мучнистой до стекловидной. Ядрицу обыкновенную и быстроразвариваюшуюся делят по качеству на 1 2 3й сорта.
30227. Информатизация общества: социальные условия, предпосылки и последствия 46 KB
  Социальные условия информатизации это реальная обстановка в которой происходит процесс информатизации. Социальные последствия информатизации реальные и прогнозируемые изменения в обществе происходящие под влиянием информатизации. Рассмотрение в этом смысле условий и предпосылок информатизации это анализ реального и необходимого состояния всех сфер жизни общества с точки зрения их готовности воспринять и развивать информатизацию; “социальное†в узком смысле слова.
30228. Формирование информационной среды общества 33 KB
  Формирование информационной среды общества Современное общество не может существовать в условиях сенсорного голода для его развития и саморганизации совершенно необходимо всеобъемлющее информационное поле. Например 1012 это требующий кардинальных решений порог уровня безработицы в обществе 14 это коэффициент характеризующий катастрофическое соотношение доходов 10 самых богатых и 10 самых бедных членов общества. Наиболее важным понятием которое необходимо определить при изучении информационной среды общества является понятие...
30229. Информационный образ жизни: общество и личность в условиях информатизации 37.5 KB
  Проблемы адаптации людей с ограниченными физическими возможностями в современной информационной среде. Например: во многих странах мира для слепых и слабовидящих людей широко применяются специальные синтезаторы позволяющие осуществлять голосовой ввод информации; практически полностью потерявшие подвижность могут осуществляють работу на компьютере ввод информации движением глаз при помощи специальных шлемов. В России создана специальная программа по компьютерной технике адаптированной для лиц имеющих различные физические отклонения...
30230. Постиндустриальное, информационное общество: социальная структура и специфика трудовой деятельности 22 KB
  Однако следует отметить что проблема “атомизации†общества обсуждается сегодня учеными все шире [1]. Поскольку получение информации о происходящем в стране и в мире уже не требует прямого общения между людьми человек может все больше и больше изолироваться от общества подвергаться иллюзии независимости от него. Американские исследователи отмечают что “конвергенция меняющихся общественных и личных ценностей с новой техникой и энергоэкономическими нуждами делает становление мозаичного общества по существу неизбежнымâ€[2]. Проблема...
30231. Социальная информатика: предмет и задачи курса 29 KB
  Одним из критериев перехода общества к постиндустриальной и далее к информационной стадии развития может служить процент населения занятого в сфере услуг: если в обществе более 50 населения занято в сфере услуг наступила постиндустриальная фаза его развития; если в обществе более 50 населения занято в сфере информационных услуг общество стало информационным. Концепция постиндустриального общества как общесоциологическая теория развития достаточно глубоко разработана западными исследователями: Д. Понятие...
30232. Семантические основы социальной информатики 56 KB
  Нередко в этих теоретических построениях термин информация наполнен разным смыслом а следовательно сами теории высвечивают лишь часть граней некоторой системы знаний которую можно назвать общей теорией информации или информологией наукой о процессах и задачах передачи распределения обработки и преобразования информации. Формализация знаний: методы и приемы. При поиске наиболее удобных рациональных средств и форм информационного обмена человек чаще всего сталкивается с проблемой компактного и...
30233. Социальные коммуникации: история, современность, перспективы 22.5 KB
  Когда информационная среда рассматривается с точки зрения хранимой и циркулирующей в ней информации она как правило выступает как объект техники служащей определенным человеческим целям которые выступают по отношению к этой технике внешними условиями функционирования. Опираясь на количественные меры математической теории информации Робертсон ранжирует цивилизации по количеству производимой ими информации следующим образом : Уровень 0 информационная емкость мозга отдельного человека 107 бит; Уровень 1 устное общение внутри...
30234. Информационные ресурсы общества 25.5 KB
  Информационный кризис начала 70х годов ХХ века проявился в снижении эффективности информационного обмена: резко возрос объем публикуемых данных; между группами разных специалистов стало трудно общаться; возрос объем неопубликованной информации; выросла проблема межязыкового обмена в мире. информационного “взрыва†лавинообразного роста объемов социоинформации сопровождающегося информационным “голодом†физиологическими ограничениями человека в восприятии и переработке информации и трудностями в выделении нужной информации из...