Клавиатура GPIO семейства K60 в C - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь настроить матричную клавиатуру 4х4 для MK60D10.Я использую порт A.

Моя клавиатура подключена к PTAxx следующим образом:

#define KEYBOARD_ROW_1 8 // P1(23)
#define KEYBOARD_ROW_2 10 // P1(24)
#define KEYBOARD_ROW_3 6 // P1(25)
#define KEYBOARD_ROW_4 11 // P1(26)
#define KEYBOARD_COL_1 7 // P1(27)
#define KEYBOARD_COL_2 9 // P1(28)
#define KEYBOARD_COL_3 27 // P1(35)
#define KEYBOARD_COL_4 29 // P1(36)

, где xx - это число, определенное.

Я понимаю, что ROW должны быть установлены каквыходы и COL в качестве входных данных, поэтому я уже установил направление данных для порта a следующим образом

PTA->PDDR = GPIO_PDDR_PDD(0b110101000000);

Теперь я немного застрял в том, как читать, какая клавиша была нажата.Я пытаюсь понять концепцию, и я понимаю, что если там ROW 1 установлен на 0 (выход) и COL 1 установлен на 1 (вход), и я нажимаю кнопку 1 (что является пересечением этих двух), они соединяются, но что меняется?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 27 декабря 2018

Я предполагаю, что ваша клавиатура имеет нормально разомкнутые контакты.Ниже приведен распространенный способ сделать это, но вы можете изменить полярность (использовать раскрывающиеся списки и т. Д.).

Прежде всего вам нужны подтягивающие элементы на входных выводах, потому чтов противном случае они могли бы плавать.Не нажатая кнопка будет иметь значение 1. Тогда обычное состояние строк равно «1» (все вверх), т. Е. Вы должны поддерживать их на высоком уровне большую часть времени.

Затем вы должны активно опрашивать клавиатуру.

Каждый цикл опроса состоит в том, чтобы опустить одну строку, немного подождать и прочитать входные данные;только те входы, которые через нажатую кнопку находятся на низком уровне, будут читаться как «0».Итак, если вы читаете пин-код как 0, то нажимается одна кнопка, которая соединяет ту единственную строку, которую вы проехали, и ту единственную колонку, которую вы прочитали.Потяните ряды один за другим, последовательно.В любой момент времени только один ряд должен быть низким.

Надеюсь, это понятно.

...