Лабораторна робота №7

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
УІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Мови опису апаратних засобів

Частина тексту файла (без зображень, графіків і формул):

Мета: Вивчити принцип роботи сканера клавіатури. Отримати навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL. Теоретичні відомості: Клавіатура більшості обчислювальних пристроїв змонтована у вигляді прямокутної матриці, у точках перетину рядків і стовбців якої розташовуються кнопочні контакти. Скануючий пристрій, що розробляється, повинен визначати номер елемента матриці, який відповідає натисненій клавіші, і видавати відповідний йому двійковий код.  Сканер працює у двох головних режимах: Режим очікування: На всі рядки матриці клавіатури, які позначені Scan(0), Scan(1), Scan(2), Scan(3) подається логічна одиниця. Всі стовбці матриці клавіатури, позначені Ret(0), Ret(1), Ret(2), Ret(3) мають низький рівень сигналу. Рівень сигналів Ret перевіряється з кожним синхронізуючим імпульсом ClLK, і, якщо один з них змінить своє значення з '0' на '1', це сигналізує про натиснення однієї з клавіш. При цьому сканер переходить в наступний режим. Режим сканування: На рядок Scan(0) подається сигнал високого рівня, а на всі інші рядки - низького рівня. Перевіряється рівень сигналів Ret. Якщо рівень одного з Ret (наприклад, Ret(1)) зміниться з "низького" на "високий", це означає, що було замкнено контакт, який розташований на перетині рядка Scan(0) та стовбця Ret(1). Тобто номер елемента матриці клавіатури, якому відповідає натиснена клавіша, знайдено. Сканер передає цю інформацію у кодер для формування відповідного коду обраної цифри або операції та знову переходить до режиму очікування. Якщо рівень всіх рядків Ret залишається низьким, то проводиться перевірка наступного рядка матриці, і т.д. Приклад роботи сканера у випадку натиснення клавіши '3' № Дії Результати Висновки  1. Scan = "1111" Ret = "0000" Сканер знаходиться в стані очікування.  2. Scan = "1111" Ret = "0010" Одержано інформацію про натиснення клавіши. Сканер переходить в режим сканування.  3. Scan = "0001" Ret = "0000" Натиснена клавіша не знаходиться в першому рядку матриці.  4. Scan = "0010" Ret = "0000" Натиснена клавіша не знаходиться в другому рядку матриці.  5. Scan = "0100" Ret = "0010" Натиснена клавіша знаходиться на перетині третього рядка і другого стовбця матриці.  6. KeyCode = Scan & Ret KeyCode = "01000010" Strobe = '1' Сканер переходить в режим очікування.   Результат роботи:  Вмістиме файлу KL.vhd, який описує принцип роботи схеми: library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity op is port ( CLK: in STD_LOGIC; Ret: in STD_LOGIC_VECTOR (3 downto 0); KeyKode: out STD_LOGIC_VECTOR (7 downto 0); Strobe: out STD_LOGIC; Scan: inout STD_LOGIC_VECTOR (3 downto 0)); end; architecture op of op is -- diagram signals declarations signal Count: STD_LOGIC; -- Count<=Ret(0) or Ret(1) or Ret(2) or Ret(3); -- SYMBOLIC ENCODED state machine: Sreg0 type Sreg0_type is (S1, S2, S3, S4, S5, S6); -- attribute enum_encoding of Sreg0_type: type is ... -- enum_encoding attribute is not supported for symbolic encoding signal Sreg0: Sreg0_type; begin Sreg0_machine: process (CLK) begin if CLK'event and CLK = '1' then -- Set default values for registered outputs/signals and for variables -- ... case Sreg0 is when S1 => Scan <= "1111"; Strobe <= '0'; if Count = '1' then Sreg0 <= S2; elsif Count = '0' then Sreg0 <= S1; end if; when S2 => Scan <= "0001"; if Count = '1' then Sreg0 <= S6; elsif Count = '0' then Sreg0 <= S3; end if; when S3 => Scan <= "0010"; if Count = '0' then Sreg0 <= S4; elsif Count = '1' then Sreg0 <= S6; end if; when S4 => Scan <= "0100"; if Count = '0' then Sreg0 <= S5; elsif Count = '1' then Sreg0 <= S6; end if; when S5 => Scan <= "1000"; if Count = '0' then Sreg0 <= S1; elsif Count = '1' then Sreg0 <= S6; end if; when S6 => Strobe <= '1'; if Count = '1' then Sreg0 <= S6; elsif Count = '0' then Sreg0 <= S1; end if; when others => null; end case; end if; end process; KeyKode_assignment: KeyKode <= "00000000" when (Sreg0 = S1) else Ret & Scan when (Sreg0 = S6) else "00000000"; end op; Код натиснутої клавіші “7” на часовій діаграмі: Висновок: Під час виконання лабораторної роботи я вивчила принцип роботи сканера клавіатури i отримала навички проектування цифрових пристроїв за допомогою скінчених автоматів засобами Active-HDL.
Антиботан аватар за замовчуванням

19.12.2013 23:12-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!