Рис. 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, что крайне нежелательно для данной схемы, ибо спровоцирует совершенно неправильную ее работу. Однако в нашем конкретном случае схема успешно работает, поэтому структуру блока можно не модифицировать.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.