Главная » Статьи » Как подключить

Подключение матричной клавиатуры 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 и прошивка.


Категория: Как подключить | Добавлено: 03.07.2012
Просмотров: 25941 | Комментарии: 22 | Рейтинг: 5.0/6
Всего комментариев: 22
0  
22 exersizze   (29.09.2016 07:30)
Исходник прямо в тексте, перед схемой...

21 romaadereyko   (29.09.2016 01:31)
хотелось бы увидеть исходники, очень хочу разобраться

20 Cerber   (26.07.2015 16:44)
Юзал этот код. Вот снова к нему вернулся. Хороший сайт, хорошие примеры, молодцы!

19 exersizze   (23.10.2013 20:07)
Да точно также, только функцию опроса клавиатуры придется писать свою: выставляем на первой ножке высокий уровень, сканируем столбец на нажатие, затем выставляем высокий уровень на второй ножке и сканируем второй столбец, ну и так далее..

18 vovan303   (22.10.2013 17:25)
А как можно подключить не 16 кнопок, а 36, 6х6 то есть. Как это можно реализовать?

17 exersizze   (01.05.2013 22:38)
terabit85, хорошая идея, спасибо!

+2   Спам
16 terabit85   (01.05.2013 00:04)
Спасибо за статью. Хочу внести одно дополнение: приведенный код (точнее команда) не использует прерывания, что при большом объеме кода вызывает затруднения при вводе. При удержании клавиши начинаются повторы символов.
Если добавить в конец первого в примере If следующие строки:

1:
Key_char = Getkbd()
If Key_char <> 16 Then
Goto 1
End If

то мы избегаем повторения символов при удержании клавиши. Можем хоть минуту давить на кнопку, а символ будет один.

15 exersizze   (11.09.2012 21:11)
Вроде ничего особенного, функция никаких особых ресурсов микроконтроллера не требует. Возможно протеус криво поломанный, вот и вылетает.

14 4ester   (11.09.2012 20:39)
программа вылетает даже с вашим примером, не знаю как приклеить файл протеуса.

13 4ester   (11.09.2012 20:38)
есть какие то особенности работы этой функции? пишу программу для кодового замка, для проверки идеи написал под 8 мегу, все в протеусе работает как надо, переделываю исходник под тину 2313, запускаю в протеусе, и вылетает куча ошибок, не пойму в чем дело. Программа запинается при сканировании, функция возвращает вообще непонятное число, и при сравнении If Key_char <> 16 Then вылетает программа.

12 exersizze   (09.09.2012 14:10)
к сожалению никак, с командой Getkbd() нельзя нажимать одновременно больше одной клавиши, иначе будет кз на одной из линий.

11 4ester   (09.09.2012 12:19)
с предыдущим вопросом вроде бы разобрался,появился другой, как с помощью этой функции отследить что нажаты одновременно 2 кнопки к примеру * и # ??

10 4ester   (09.09.2012 11:35)
Объясните пожалуйста как работают эти 2 строчки
Key_str = Lookupstr(key_char , Keyboard_data)
Result = Result + Key_str

9 amv2000   (06.07.2012 19:35)
Ну на выходе ЦАП меньше шума чем на ШИМ, а на ebay как в Греции всё есть.

8 exersizze   (06.07.2012 08:59)
Быстрее то он быстрее, согласен. Но думаю что разницы особо не будет что ШИМом что ЦАПом регулировать напряжение в ЛБП
ebay наше все) клаву брал там
http://www.ebay.com/sch/i.html?_sacat=0&_nkw=4+x+4+keyboard+membrane

7 amv2000   (05.07.2012 19:27)
В какой области? да лабораторный источник питания.
Кстати exersizze а где Вы приобрели клавиатуру узнать можно?

6 pchela5   (05.07.2012 14:28)
>вот вместо ШИМ было бы интересно попробовать.
В какой области?

5 amv2000   (05.07.2012 08:09)
Да нет синус как бы тоже пока не нужен, а вот вместо ШИМ было бы интересно попробовать. Потому как бытует мнение, что ШИМ медленнее работает в отличие от ЦАП.

4 exersizze   (04.07.2012 20:25)
В планах подобного небыло, может когда-нибудь и появится такая необходимость.
А что с ними делать, синус генерировать? smile

3 amv2000   (04.07.2012 19:39)
Спасибо как раз недавно читал про директиву Getkbd(), а про подключение внешнего ЦАП можно будет увидеть статью ?

2 tenevikus   (04.07.2012 18:21)
good
спасибо

1 niko-lay   (04.07.2012 11:48)
Да резисторы лучше поставить, а то при одновременном нажатии на кнопки одного столбца может погореть порт.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






   EasyEDA:  бесплатный редактор схем

   ✓ Создание схем
   ✓ Возможность симуляции
   ✓ Быстрое создание печатных плат
   ✓ Интуитивно понятный интерфейс

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
08.12.2016 - exersizze:
yorx выдалось немного свободного времени, проверил в симуляторе. Проблема...
Логгер температуры 2.0
05.12.2016 - Evgeny6873:
Хотел повторить схему и долго ждал дисплей, два раза заказывал с Китая, пришел. ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
01.12.2016 - yorx:
Доброго времени суток, exersizze попробовал Ваш код все равно не работает как на...
Помни об усадке!
30.11.2016 - pchela5:
Автомобильные никакие не лезут?
Помни об усадке!
29.11.2016 - AlekS:
Виктор, спасибо.
С заменой транса в зиму, перестройка не комельфо) Валяет...
Управляем микроконтроллером с ПК по UART
29.11.2016 - exersizze:
Михаил, для работы с инфракрасными датчиками и диодами есть команды RC5SE...
Управляем микроконтроллером с ПК по UART
29.11.2016 - Михаил:
Всем привет.
Подскажите как переменную S передать по инфракрасному каналу...
Помни об усадке!
29.11.2016 - pchela5:
> Если ленту светодиодную порезать и соединить последовательно
Только ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
29.11.2016 - exersizze:
yorx, вывод Q7 ' первой микросхемы соединен с DS второй микросхемы? С...


Лучшие цены на 3D принтеры
успей сделать себе подарок к Новому Году! ;)


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.