|
Подключение клавиатуры, Не получается |
|
|
|
Jun 15 2005, 17:09
|

Участник

Группа: Свой
Сообщений: 68
Регистрация: 1-05-05
Из: Снежинск
Пользователь №: 4 654

|
Всем привет Решил усовершенствовать свой проект и добавить клаву 4х4. Прочел AVR240 вроде так называлась статья, но реализовывал используя ЖК а не светодиодный индикатор. К тому же клаву подключил к одному порту, ЖК к другому и програмно отправляю символ нажатой клавиши. Все вроде работает но не доконца  символы выводятся но только по первому столбцу т.е. 7, 4, 1, С (это символы первого столбца в моей клаве). Пробовал по разному делать задержку для антидребезга, но чето никак. Вообще реализую так: на порт выдаю 0xF0 и с помощью прерываний проверяю число на PIN если не равно 240, то значит нажали на кнопку и отправляюсь в функцию обработки нажатия: Код KeyPress(void){ //delay_ms(20); пробовал ее везде пихать :) switch (PINB) { case 224: key = 0; delay_ms(10); break; case 208: key = 4; delay_ms(10); break; case 176: key = 8; delay_ms(10); break; case 112: key = 12; delay_ms(10); break; }; PORTB = 0x0F; DDRB = 0xF0; delay_us(10); switch (PINB) { case 7: key += 0; delay_ms(10); break; case 11: key += 1; delay_ms(10); break; case 13: key += 2; delay_ms(10); break; case 14: key += 3; delay_ms(10); break; }; PORTB = 0xF0; DDRB = 0x0F; PORTA.2 = 1; типа флаг нажати ниче более мудрого сразу не пришло :)
} Далее в бесконечном цикле проверяю флаг нажатия и отправляю на экран символ из "таблицы" в качестве которой использовал массив символов, а key это номер символа в массиве. Разумеется после отправки флаг сбрасываю. PS Сильно не ругайте, а вот за дельный совет всегда благодарен буду.
|
|
|
|
|
 |
Ответов
|
Jun 15 2005, 18:24
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(SergeyM @ Jun 15 2005, 21:09) на мой взгляд, какая-то неочевидная реализация, я бы сделал проще: единожды настроенный порт далее не трогал бы, а в процедуре опроса клавиш гасил бы столбцы поодиночке и сканировал бы строки на лог.ноль. Примерно так: Код //коды клавиш построчно flash byte Keys[4][4]={{1,2,3,12},{4,5,6,13},{7,8,9,14},{10,0,11,15}}; char CurrKey;
//опрос void ProcessKbd(void) { char i,j;
CurrKey = 0xFF; //считаем, что ничего не нажато for (i=0;i<4;i++) { //по очереди выводим лог.0 на столбцы CLR_KBD_COL(i); #asm("nop") #asm("nop") //опрос входов (строк) for (j=0;j<4;j++) if (READ_KBD_ROW(j)==0) CurrKey = Keys[j][i]; } //CurrKey - код //дальше при желании вешается антидребезг }
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
Jun 16 2005, 16:17
|

Участник

Группа: Свой
Сообщений: 68
Регистрация: 1-05-05
Из: Снежинск
Пользователь №: 4 654

|
Цитата(vet @ Jun 15 2005, 21:24) Код //коды клавиш построчно flash byte Keys[4][4]={{1,2,3,12},{4,5,6,13},{7,8,9,14},{10,0,11,15}}; char CurrKey; У меня что то на строку с flash byte ругается (использую cvavr)
|
|
|
|
|
Jun 16 2005, 16:29
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(SergeyM @ Jun 16 2005, 22:17) Цитата(vet @ Jun 15 2005, 21:24) Код //коды клавиш построчно flash byte Keys[4][4]={{1,2,3,12},{4,5,6,13},{7,8,9,14},{10,0,11,15}}; char CurrKey; У меня что то на строку с flash byte ругается (использую cvavr) Дык зачем массив-то? Достаточно линейную таблицу. Я с AVR и CVAVR не работал, но ИМХО директива должна как __flash выглядеть. Код дома есть, но я забыл его на флешку записать сегодня. Только он для MSP430, а не для AVR.
|
|
|
|
|
Jun 16 2005, 16:35
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(rezident @ Jun 16 2005, 20:29) Цитата(SergeyM @ Jun 16 2005, 22:17) Цитата(vet @ Jun 15 2005, 21:24) Код //коды клавиш построчно flash byte Keys[4][4]={{1,2,3,12},{4,5,6,13},{7,8,9,14},{10,0,11,15}}; char CurrKey; У меня что то на строку с flash byte ругается (использую cvavr) Дык зачем массив-то? Достаточно линейную таблицу. А так читабельнее. Можно, конечно. Цитата(rezident @ Jun 16 2005, 20:29) Я с AVR и CVAVR не работал, но ИМХО директива должна как __flash выглядеть. Нет, именно так. Я только забыл свой typedef-нный тип убрать, так что вместо byte пишем char.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
Сообщений в этой теме
SergeyM Подключение клавиатуры Jun 15 2005, 17:09 rezident Немного не так это делается. По крайней мере я не ... Jun 15 2005, 17:57 Make_Pic Цитата(rezident @ Jun 15 2005, 20:57)Немного ... Jun 15 2005, 18:11 SergeyM Цитата(rezident @ Jun 15 2005, 20:57)Немного ... Jun 16 2005, 05:01  yung Обычно делается так. Строки определяются как выход... Jun 16 2005, 05:21  rezident Цитата(SergeyM @ Jun 16 2005, 11:01)А какое у... Jun 16 2005, 15:52   SergeyM Цитата(rezident @ Jun 16 2005, 18:52)Обычно и... Jun 16 2005, 16:07   SergeyM Цитата(rezident @ Jun 16 2005, 18:52)Вот вам ... Jun 17 2005, 14:09 yung
а в процедуре опроса клавиш гасил бы столбцы поо... Jun 16 2005, 04:41    SergeyM Цитата(rezident)
Ниче страшного самое главное сут... Jun 16 2005, 16:43     rezident Цитата(SergeyM @ Jun 16 2005, 22:43)Цитата(re... Jun 16 2005, 18:29 AndyBig Я делаю по тому же принципу, что описал vet:
Цитат... Jun 16 2005, 20:00 rezident Вот вам мой модуль для обслуживания клавиатуры 2х3... Jun 17 2005, 10:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|