Найти в Дзене
Владимир С.

Создание электронного кодового замка

В этой статье попробуем создать электронный кодовый замок, значение которого задаётся комбинацией четырёх десятичных цифр. Проектировать замок будем в среде моделирования Logisim. Итак, приступим к реализации. Первым делом организуем ввод значений, для этого сделаем простейшую клавиатуру на 10 цифр (от 0 до 9) и кнопкой R для сброса введённых значений. Клавиатуру будем создавать из кнопок, при нажатии на которые они выдают сигнал "1", а при отсутствии нажатия "0". Клавиатура приведена на рисунке 1. Сигналы с клавиатуры нужно каким-то образом обрабатывать, чтобы понимать какая цифра должна быть введена. Для этого будем использовать приоритетный шифратор разрядности 16-4, на входы шифратора подадим сигналы с кнопок в соответствии с номером входа и значением на кнопке (рис. 2). Вводимые значения требуется как-то хранить. Для этого отлично подойдут регистры хранения, на информационные входы которых будут подаваться значения с выходов шифратора. Будем использовать один регистр для хранения

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

Первым делом организуем ввод значений, для этого сделаем простейшую клавиатуру на 10 цифр (от 0 до 9) и кнопкой R для сброса введённых значений. Клавиатуру будем создавать из кнопок, при нажатии на которые они выдают сигнал "1", а при отсутствии нажатия "0". Клавиатура приведена на рисунке 1.

Рисунок 1 - клавиатура для ввода значений
Рисунок 1 - клавиатура для ввода значений

Сигналы с клавиатуры нужно каким-то образом обрабатывать, чтобы понимать какая цифра должна быть введена. Для этого будем использовать приоритетный шифратор разрядности 16-4, на входы шифратора подадим сигналы с кнопок в соответствии с номером входа и значением на кнопке (рис. 2).

Рисунок 2 - подключение шифратора к клавиатуре
Рисунок 2 - подключение шифратора к клавиатуре

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

Рисунок 3 - регистры хранения для записи информации и схема управления ими из счётчика и дешифратора
Рисунок 3 - регистры хранения для записи информации и схема управления ими из счётчика и дешифратора

Значение ключа будем задавать при помощи четырёх конкретных комбинаций, которые можно изменять, но не во время работы замка. Для примера ключом будет число 1402, переведём его в двоично-десятичный код: 0001010000000010. На рисунке 4 приведена реализация ключа.

Рисунок 4 - кодирование ключа
Рисунок 4 - кодирование ключа

Комбинацией значений "0" и "1" зададим необходимые значения и объединим их в шины во избежание большого количества проводов.

Сравнивать ключ и введённое значение будем при помощи простейших компараторов, а именно при помощи функции "исключающее или". Будем сравнивать каждый разряд по отдельности, значения со всех сравнений будем подавать на дизъюнкцию, т.к. она принимает ноль только на одном наборе своих аргументов, а у нас возникнут все нули только в случае полного совпадения ключа и введённого значения. Выход с дизъюнкции подадим на элемент "ИЛИ-НЕ" для инверсии (предварительно разветвив шину на отдельные провода для перевода сигнала в однобитовое значение - да/нет) и выход "ИЛИ-НЕ" подадим на светодиод, отвечающий за результат работы. В случае совпадения чисел светодиод будет загораться, в противном - будет выключен. Также для просмотра введённых значений добавим индикаторы на выходы регистров хранения. Окончательная схема замка приведена на рисунке 5.

Рисунок 5 - готовая схема замка
Рисунок 5 - готовая схема замка

Протестируем полученный замок (рис. 6 - 8).

Рисунок 6 - тестирование замка некорректным значением
Рисунок 6 - тестирование замка некорректным значением
Рисунок 7 - сброс замка в начальное состояние через кнопку сброса R
Рисунок 7 - сброс замка в начальное состояние через кнопку сброса R
Рисунок 8 - тестирование замка вводом ключа
Рисунок 8 - тестирование замка вводом ключа

Таким образом, нам удалось реализовать электронный кодовый замок.