Вот было свободное время намедни.
Слепил кодовый замок с подсветкой клавиатурой. Все компоненты в коде подписаны комментариями. Разберется и новичек.
Кнопка "*" (звездочка) в железе будет электрически отсоединена от общей клавиатуры, и подключена как кнопка сброс микроконтроллера. В протеусе не стал ковырять модель клавиатуры, просто не использовал эту кнопку, а поставил отдельную "*" он же сброс.
Алгоритм следующий:
При прошивке контроллера в EEPROM в первые 4 регистра зашивается произвольный код.
В данном проекте я прописал в файле eeprom.bin код - 1590, который нужно подключить в протеусе в свойствах контроллера.
Замок включается кнопкой сброс.
Зажигается светодиод "*"
В течении 10 секунд нужно ввести 4 цифры кода (в нашем случае - 1590)
и нажать кнопку "#" (решетка)
Сработает замок(электромагнит, мотор, и т. д.) подключенный через исполнительное устройство к выводу В4
Через 5 секунд замок закроется
Контроллер уснет.
Если код не набран или или набран не правильно или пройдет больше 10 секунд до нажатия "#" - контроллер опять уснет.
Перепрограммирование
Замок включается кнопкой сброс.
Зажигается светодиод "*"
В течении 10 секунд нужно ввести 4 цифры кода (в нашем случае - 1590)
и нажать кнопку "#" (решетка)
Сработает замок(электромагнит, мотор, и т. д.) подключенный через исполнительное устройство к выводу В4
Пока замок удерживает открытую дверь в течении 5 секунд, нажать и удерживать кнопку "0"
Когда загорится светодиод под кнопкой "#" у вас есть 10 секунд на ввод кода программирования. (сейчас установлен код 2580, можно сменить в проекте)
Если код верен, сработает одиночный сигнал и таймер остановится.
Спокойно, не спеша

вводим новый код замка - 4 цифры
После нажатия 4-й цифры прозвучит двойной сигнал, код запрограммирован.
Контроллер уснет.
(не забудте какой код ввели, иначе придется перепрошивать контроллер.

)
Можно конечно обойтись без светодиодов, и взять контроллер попроще, но так нагляднее, какая кнопка нажимается.