Контроллер клавиатуры и динамическая индикация, страница 2

Рис. 3.1.4. Схема контроллера клавиатуры (с индикацией).

Устройство было загружено в СБИС ПЛ лабораторного стенда и успешно функционировало в качестве контроллера клавиатуры.

3.2. Контроллер динамической индикации.

Рис. 3.2.1. Схема контроллера динамической индикации.

Важно заметить, что разряды индикатора горят не постоянно. На самом деле в конкретный момент горит лишь один разряд, однако переключение между ними происходит так часто, что человеческий глаз его не замечает; в результате создается впечатление, что разряды горят постоянно.

Для загрузки контроллера на плату в схему был добавлен блок ISSPE, с которого мы могли задавать скан-коды кнопок, которые затем подавались контроллер.

Рис. 3.2.2. Схема контроллера динамической индикации (для загрузки в СБИС ПЛ).

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

            Схема контроллера динамической индикации также успешно работала при загрузке на плату.

3.3. Устройство ввода и отображения данных (на основе 3.1 и 3.2).

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

Рис. 3.3.1. Схема сдвигающего регистра.

Скан-код каждой новой нажатой клавиши записывается в сдвигающий регистр. Для предотвращения многократной записи кода кнопки в регистр выделяется фронт сигнала Ready – сигнала готовности кода нажатой кнопки.

Рис. 3.3.2. Схема блока Check.

Блок Check по команде MEM позволяет запомнить отображаемый на индикаторах код и по команде Compare сравнить его с текущим кодом на индикации. При совпадении кодов включаются точки на всех 4-х 7-и-сегментных индикаторах.

Следует отметить, что кнопки, выполняющие функции подачи сигналов Mem и Compare, как и все механические контакты, подвержены дребезгу, а значит, сигнал Ena будет какое-то время «дребезжать». Однако в данном случае устройство борьбы с дребезгом не потребуется, поскольку нам не так важно, что скан-коды запишутся несколько раз, это не нарушит работу устройства в целом.

Рис. 3.3.3. Схема устройства ввода и отображения данных.

Правильность работы схемы была проверена при программировании ее на плату.

3.4. Индивидуальное задание.

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

Рис. 3.4.1. Структура блока Double-Check.

Данный блок включает в себя компаратор и два счетчика. Компаратор выполняет операцию сравнения приходящего скан-кода нажатой клавиши со скан-кодом заданной клавиши. Счетчик lpm_counter0 подсчитывает число нажатий заданной клавиши. Счетчик lpm_counter1 обеспечивает сброс счетчика через время 1с.

Следует отметить существенный недостаток данной схемы. Выход cout счетчика lpm_counter1, на котором вполне могут появиться риски сбоя, подается на вход асинхронного сброса счетчика lpm_counter0. Это приводит к возможности случайного сброса счетчика lpm_counter0, что крайне нежелательно для данной схемы, ибо спровоцирует совершенно неправильную ее работу. Однако в нашем конкретном случае схема успешно работает, поэтому структуру блока можно не модифицировать.