Подключение матричной клавиатуры 4х4 к микроконтроллеру

 На страницах этого сайта уже была представлена работа по созданию и использованию клавиатуры, но она была сенсорная. Те, кому нужен вариант попроще, чаще выбирают стандартные кнопочные клавиатуры, в которых кнопки соединены матрицей. Такое соединение кнопок позволяет сократить число выводов необходимых для подключения к микроконтроллеру. Чаще всего встречаются клавиатуры 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 и прошивка.


Взято с: avrproject.ru


Категория: AVR
Метки:

Написать коментарий

*
= 5 + 3

Добавить изображение

Последние статьи