Микроконтроллеры PIC: сканируйте входы на клавиатуре 4x4, используя только порт C RC0-RC3 в C

Я новичок в программировании микроконтроллеров PIC и C, и мне поставили задачу создать собственный метод сканирования клавиатуры, который работает исключительно на порте C (микроконтроллер 16F877A). В частности, программа, использующая этот метод, использует только цифры 1, 2, 4 и 5, поэтому, чтобы быть эффективным, метод сканирования должен использовать только RC0, RC1, RC2 и RC3 в качестве назначенных входов/выходов (мне не разрешено использовать RC4-RC7). По сути, это превращает клавиатуру 4x4 в клавиатуру 2x2.

Я понимаю, что концепция сканирования имеет линии порта, установленные на высокие строки, и строки, установленные в качестве входных столбцов - когда кнопка нажата, это считывает нижний бит порта для обнаружения кнопки.

К сожалению, я понятия не имею, как это закодировать на C, особенно с использованием указанных выше строк порта. Может ли кто-нибудь пролить свет на проблему и указать мне правильное направление? Спасибо!


person JayJay    schedule 10.12.2014    source источник
comment
Эндрю Медико на самом деле правильно ответил на ваш вопрос. Возможно, вы захотите изменить заголовок своего вопроса: на самом деле он не имеет ничего общего с клавиатурой 4x4: 3 квадранта клавиатуры 4x4 в вашем случае - это ерунда. Если вы назначаете Y0 Y1 Y2 Y3 своим строкам и X0 X1 X2 X3 столбцам: вам нужны только Y0 Y1 и X0 X1. С этого момента вы можете использовать любой шаблон кода для клавиатуры 2x2. Существует много вариантов C для PIC16F877A (MPLAB, XC, HI-TECH, microC...). Если вы ищете решение в конкретном варианте PIC-aware C, вы можете получить более подробные ответы на electronics.stackexchange.com   -  person Rok Jarc    schedule 10.12.2014


Ответы (2)


Один из возможных подходов:

Аппаратное обеспечение:

  1. Подключите RC0 к строке 0
  2. Подключите RC1 к ряду 1
  3. Подключите RC2 к столбцу 0
  4. Подключите RC3 к колонке 1

Программное обеспечение:

Настраивать:

  1. Настройте RC0 и RC1 как выходы
  2. Настройте RC2 и RC3 как входы

Чтение:

  1. Установите RC0 на высокий уровень, RC1 на низкий
  2. Читайте RC2. Если высокий, нажимается 1
  3. Читайте RC3. Если высокий, нажимается 2
  4. Установите низкий уровень RC0, высокий уровень RC1.
  5. Читайте RC2. Если высокий, нажимается 4
  6. Читайте RC3. Если высокий, нажимается 5

Добавление подходящих подтягиваний/опусканий и устранение дребезга оставляется читателю в качестве упражнения.

person nobody    schedule 10.12.2014

Как это работает, вы включаете выходное напряжение в одном столбце из 4. Затем вы считываете данные 4-битной строки, чтобы определить, какие клавиши нажаты, чтобы завершить схему. Затем вы циклически обходите другие столбцы. Затем вы можете использовать столбец * 4 + строку, где одна (или более) клавиша была закрыта, чтобы установить, какая клавиша позиции матрицы клавиш была нажата. Обычно это не сопоставляется непосредственно с предполагаемым значением ключа, поэтому вы используете таблицу поиска для преобразования или некоторые операторы #define. Кроме того, логика может быть инвертирована.

person Weather Vane    schedule 10.12.2014