На страницах этого сайта уже была представлена работа по созданию и использованию клавиатуры, но она была сенсорная. Те, кому нужен вариант попроще, чаще выбирают стандартные кнопочные клавиатуры, в которых кнопки соединены матрицей. Такое соединение кнопок позволяет сократить число выводов необходимых для подключения к микроконтроллеру. Чаще всего встречаются клавиатуры 3х4 и 4х4 с 12-ю и 16-ю кнопками, соответственно. У меня в руках оказалась клавиатура 4х4. Работу с ней сейчас и рассмотрим.
У меня оказалась вот такая клавиатура с мембранными контактами. Хороша тем, что в толщину составляет всего 1 мм и легко может приклеиваться к нужным поверхностям.
Потыкав по кнопкам, с помощью мультиметра установил как соединены кнопки внутри клавиатуры.
Для сканирования матричных клавиатур в Bascom-AVR существует специальная функция Getkbd(). Эта команда заточена под использование клавиатур 4х4, поэтому она использует все 8 выводов одного порта микроконтроллера. И в случае использования клавиатур c меньшим числом кнопок стоит это учитывать. Конфигурирование команды заключается в назначении порта, к которому будет подключена клавиатура, время прохождения дребезга контактов и задержка после определения нажатия
к примеру, в следующей строке:
Config Kbd = Portd , Debounce = 20 , Delay = 100сконфигурировано подключение клавиатуры к PortD, время дребезга установлено 20 мс, время задержки после нажатия 100 мс
Эта команда берет на себя всю работу по сканированию строк клавиатуры и возвращает переменной номер нажатой клавиши от 0 до 15. Если нажатия на кнопку не зафиксировано, тогда функция вернет число 16. Дальше, в зависимости от того как соединены кнопки, может потребоваться узнать символ нажатой кнопки.
В приведенном ниже примере, сканирование клавиатуры происходит с частотой 10 Гц и находится в главном цикле программы. Результат нажатий выводится на ЖК дисплей.
$regfile = “m8def.dat”
$crystal = 1000000
‘конфигурация дисплея
Config Lcdpin=Pin,Rs=Portc.0,E=Portc.1,Db4=Portc.2,Db5=Portc.3,Db6=Portc.4,Db7=Portc.5
Config Lcd = 20 * 4
Cursor Off
Cls
‘конфигурация клавиатуры
Config Kbd = Portd , Debounce = 20 , Delay = 100
‘переменные
Dim Key_char As Byte ‘номер нажатой клавиши
Dim Key_str As String * 1 ‘символ нажатой клавиши на клавиатуре
Dim Result As String * 20 ‘результат нажатий на клавиатуру
Result = “”
‘Главный цикл программы
Do
Key_char = Getkbd() ‘клавиша не нажата и функция возвращает переменной значение 16
If Key_char <> 16 Then ‘если переменная не равна 16, значит была нажата кнопка
Key_str = Lookupstr(key_char , Keyboard_data) ‘вытаскиваем символ нажатой клавиши
Result = Result + Key_str
End If
Locate 1 , 1
Lcd Result ‘выводим на дисплей результат нажатий
Waitms 100
Loop
End
Keyboard_data:
Data “1” , “4” , “7” , “*” , “2” , “5” , “8” , “0”
Data “3” , “6” , “9” , “#” , “A” , “B” , “C” , “D”
А вот тестовая схемка, по которой подключаются дисплей и клавиатура:
Еще в схему не мешало бы добавить токоограничительные резисторы на линию клавиатуры, номиналом 100-150 Ом. На всякий случай, но для пробы сойдет и так (главное не нажимать сразу несколько кнопок)
Подключаем, прошиваем, тыкаем на кнопки и видим результат – на дисплей выводятся символы нажатых клавиш:
Позже добавлю демонстрационное видео, как только найду чем снять в приличном качестве.
А пока можно скачать архив в котором находится файл для симуляции в Proteus и прошивка.
Последние статьи
- Лучшая практика проектирования при размещении компонентов печатной платы
- Android 6.0 на lancer X
- Простой усилитель мощности класса АВ своими руками.
- Двухтактный ультралинейный ламповый УНЧ на EL84 (6П14П).
- Люксметр на ATmega8 и цифровом датчике BH1750
- Контроллер для светодиодной ленты с ИК управлением
- Самодельный LED светильник на основе ИК датчика HC-SR501
- Простой усилитель низкой частоты на TDA7377 и NE5532
- Простейший звонок с двумя мелодиями
- LED Cube 8x8x8 на Arduino с RTC