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