реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Клавиатура 8x8, Есть какие нить примерчики
BlauTood
сообщение Mar 16 2005, 08:30
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 26
Регистрация: 11-10-04
Пользователь №: 841



Собственно subj:


--------------------
Сделать можно ВСЕ, но это нужно делать.
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 16 2005, 09:15
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



А что собственно нужно?
Я реализую клаву так - обработчик по таймеру которые в очередь кидает коды нажатых клавишь (так и в PC сделано очередь проще всего и сделать как она в биосе была реализована еще под ДОСОМ)

Антидребезг проще всего делать не на каждую кнопку а целиком на байт (8 кнопок)

я делаю примерно так

typedef struct {
BYTE Current;
BYTE Count;
BYTE Prev;
} KbdRow;

static KbdRow KbdData[KBD_ROW_COUNT];

void KbdRowCheck(KbdRow* Row, BYTE RowVal, BYTE Code)
{
BYTE Prev;

Prev=Row->Prev;
if (RowVal==Prev) goto Skip;

if (Row->Current!=RowVal) {
Row->Count=KBD_SAME_COUNT;
Skip:
Row->Current=RowVal;
return;
}

if (!--Row->Count) {
Row->Prev=RowVal;
Prev^=RowVal;
do {
if (Prev & 1) {
FifoPut(KBD, (RowVal & 1) ? Code : Code | 0x80 );
}
Code++;
RowVal>>=1;
} while(Prev>>=1);
}
}

осталсь только вызвать KbdRowCheck на каждую строку матрицы
примерно так

static void KbdHandler(void)
{
BYTE Code;
KbdRow* Row;
Row_PORT=0xFE;
Row=KbdData;
Code=0;
do {
BYTE Tmp;
KbdRowCheck(Row,Key_PORT,Code);
Tmp=(Row1_PORT<<1)|1;
Row1_PORT=Tmp;
Row++;
Code+=8;
} while(Tmp!=0xFF);
}
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Mar 16 2005, 09:41
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(BlauTood @ Mar 16 2005, 11:30)
Собственно subj:
*


На AVR ? Возьмем два порта по 8. Порт входов и порт выходов.
Внешние подтяжки поставим. Кнопки поставим тоже. <_<
Будем сканировать порт входов, перепрограммируя поочередно биты
порта выходов в состояние "OUT 0". для этого предварительно
в регистр данных порта выходов нужно записать 0x00.
Таким образом, на битах порта выходов программно
смастерим "опын коллектор".

Такова идея. Способ подавления дребезга и вообще реализация
дело вкуса.
smile.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
SPS
сообщение Mar 16 2005, 10:23
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 56
Регистрация: 8-02-05
Из: Ukraine
Пользователь №: 2 501



Мне попадалась клавиатура которая при нажатии на кнопку замыкала выводы не только между собой но и на землю. Подключались подтягивающие резисторы. Т.о., просто необходимо прочитать значения из 2-х 8-битных портов и если ни одна клавиша не нажата - при чтении будет (0xFFFF).
Иначе - код соответствующий данной клавише.
Если же замыкаются только 2 вывода (таких клавиатур большинство) то я солидарен с предыдущими советами.
Go to the top of the page
 
+Quote Post
BlauTood
сообщение Mar 16 2005, 10:39
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 26
Регистрация: 11-10-04
Пользователь №: 841



мне нужно сделать анализ нажатия двух кнопок одновременно. Это обязательное условие. А еще я писать на с не умею, тока на ASME sad.gif


--------------------
Сделать можно ВСЕ, но это нужно делать.
Go to the top of the page
 
+Quote Post
Alexandr
сообщение Mar 16 2005, 11:04
Сообщение #6


Знающий
****

Группа: Модераторы
Сообщений: 804
Регистрация: 1-12-04
Пользователь №: 1 283



Цитата(-Tумблер- @ Mar 16 2005, 13:41)
На AVR ? Возьмем два порта по 8. Порт входов и порт выходов.
Внешние подтяжки  поставим. Кнопки поставим тоже. <_<
Будем сканировать порт входов, перепрограммируя поочередно биты
порта выходов в состояние "OUT 0". для этого предварительно
в регистр данных порта выходов нужно записать 0x00.
Таким образом, на битах порта выходов программно
смастерим "опын коллектор".
*


Алгоритм определения двух нажатых кнопок тот же, что привел -Tумблер-. Только после сканирования состояния порта входов, проводим ту же операцию, но меняем местами порт входов и порт выходов.


--------------------
Иван Сусанин - первый полупроводник
Go to the top of the page
 
+Quote Post
arttab
сообщение Mar 17 2005, 16:20
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Может чего не понял, но все просто: матрица 8 на 8. в узлы вкл. кнопки с диодами. см. аплекейшен AVR240.pdf. там 4 на 4, но идея та же. а если помудрить, то можно еще увеличить. Одновремено понятие растижимое. можно опросить последовательно 8 рядов и считать, что опросил одновременно. для чкловека это не заметно будет.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Mar 18 2005, 12:40
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(Alexandr @ Mar 16 2005, 14:04)
проводим ту же операцию, но меняем местами порт входов и порт выходов.
*


Не понял - всегда я был уверен, что приведенный мной пример
прзволяет диагностировать ЛЮБОЕ количество нажатых
одновременно кнопок в любых комбинациях
(за полный цикл опроса). Который (цикл опроса)
гораздо быстрее чем "нажатие-удержание-отжатие".
Полный цикл опроса, очевидно, это 8 комбинаций кодов (плавающий 0)
на регистре "выходов".
smile.gif
Цитата(arttab)
Может чего не понял...



Речь идет о том, что диоды не нужны. Попросту бессмысленны.
<_<


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
Alex_St
сообщение Mar 18 2005, 16:38
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 26-11-04
Из: Одесса, Украина
Пользователь №: 1 240



Цитата(-Tумблер- @ Mar 18 2005, 15:40)
Речь идет о том, что диоды не нужны. Попросту бессмысленны.
<_<
*



Диоды ставить ОБЯЗАТЕЛЬНО, иначе рискуешь получить КЗ выходов, а это чревато выходом из строя проца...
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Mar 19 2005, 13:51
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(Alex_St @ Mar 18 2005, 19:38)
Диоды ставить ОБЯЗАТЕЛЬНО, иначе рискуешь получить КЗ выходов..
*


Цитата(-Tумблер-Mar 16 2005 @ 12:41 )
Таким образом, на битах порта "выходов" программно
смастерим "опын коллектор".


".. Ничего то ты не понял, Иван..."
Монтажное "ИЛИ" для "опын коллектора" это нормальный режим работы.
tongue.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
Георгий
сообщение Nov 21 2005, 07:21
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



Цитата
".. Ничего то ты не понял, Иван..."
Монтажное "ИЛИ" для "опын коллектора" это нормальный режим работы.

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

Это так, вдогонку.
А вопрос такой, какой комбинацией или скан-кодом включается комп с клавиатуры? В некоторых статьях упоминается CTRL + ESC, но у меня не срабатывает.


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
Rash
сообщение Nov 21 2005, 07:40
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Код возбми как советовали из AVR240.pdf. Только переделай для клавы 8*8. Апликейшен путёмый. Подьяжку внутреними pull-up. Клаву которую отлавливаетвсё кнопки прилагаю в файле, там без диодов не обойтись.
Прикрепленные файлы
Прикрепленный файл  Klava.zip ( 41.54 килобайт ) Кол-во скачиваний: 159
 
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Nov 21 2005, 08:22
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Если еще нужно могу предложить свой вариант 4x4, вот только я его недавно на С перевел и в железе не проверял. Но на AlgBuilder работало. На всякий случай в архиве и то и другое...

Имеется возможность реакции как на нажатие "ReleaseKey" так и на отпускание "PressKey"
Клавиатура не поддерживает одновременного нажатие двух и более кнопок, код при этом
не изменяется. При нажатии конпок последовательно, первая из них выполняет роль
регистра (Shift), что позволяет расширить диапазон клавиатуры. также возможно
Shift "PressDuble" или отжатия с Shift "ReleaseDuble"
Подпрограмма может вызываться в рабочем цикле или в прерывании.
Прикрепленные файлы
Прикрепленный файл  Keyboard.zip ( 7.06 килобайт ) Кол-во скачиваний: 140
 
Go to the top of the page
 
+Quote Post
Георгий
сообщение Nov 21 2005, 12:51
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



Я уточняю вопрос: каким кодом клавиатура включает компьютер?


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01511 секунд с 7
ELECTRONIX ©2004-2016