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

 
 
> Помогите с матричной клавиатурой!, битый час мучаюсь
coolibin
сообщение Feb 28 2008, 06:35
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228



Помогите сделать матричную клаву. Моя не пашет(((беру готовую рабочую схему, пишу програмулину, всё вроде делаю по примеру, а она всё равно не пашет, прерывание не срабатывает. Кто нить может поделиться соображениями/кодом реализации матричной клавиатуры через прерывание. Поиском пользовался, кое что нашел, но это только подтвердило что всё должно работать, но...(((


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Feb 28 2008, 23:40
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Не вдаваясь в разбор вашего исходника, попробую пояснить на "пальцах".
Для обслуживания матричной клавиатуры нужно реализовать как минимум три функции.
Функция №1. Сканирование матрицы, устранение дребезга, определение нажатых/отпущенных клавиш, формирование соответствующих скан-кодов, помещение скан-кодов в буфер клавиатуры.
Функция №2. Выдача текущего скан-кода без извлечения его из буфера.
Функция №3. Выдача текущего скан-кода с извлечением его из буфера.
Функция №1 обычно вызывается по прерыванию от таймера с равномерным интервалом времени (от 5мс до 100мс). Чаще, чем 200 раз в секунду вызывать ее нет смысла: а) никакая супер-пупер-машинистка не сможет с такой частотой колотить по клавишам; б) дребезг многих кнопок как раз порядка 1мс...10мс. Реже 10 раз в секунду тоже вызывать не желательно, т.к. будет значительная задержка генерации скан-кодов, а пользователю придется довольно долго удерживать клавиши для устойчивого определения нажатия их в программе. Лично я использую период 10...20мс.
Буфер нужен в любом случае. Хотя бы даже из одного байта буфер. Потому, что процесс опроса матрицы клавиш и процесс использования полученного скан-кода в общем случае асинхронные. Асинхронные процессы синхронизируются с помощью буферов. Буфер для кодов клавиатуры может быть линейным или циклическим. В первом случае используются две переменных: счетчик количества скан-кодов, находящихся в буфере и указатель на текущий скан-код. Во-втором случае нужны три переменных: тоже счетчик скан-кодов, указатель на позицию скан-кода, предназначенного для извлечения из буфера и указатель на позицию для записи следующего скан-кода. В первом случае необходимо строго следить за атомарностью (одновременностью) обнуления счетчика и указателя при извлечении всех скан-кодов. Потому, что Функции №2, 3 (чтение/извлечение скан-кода из буфера) могут быть прерваны Функцией №1.
Попробуйте пока осознать хотя бы это краткое описание. И на его основе реализовать свою программу.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- coolibin   Помогите с матричной клавиатурой!   Feb 28 2008, 06:35
- - Nanobyte   А что за схема? Как соединены выводы? Можно поподр...   Feb 28 2008, 06:57
- - vet   и зачем именно через прерывание? клавиатура - весь...   Feb 28 2008, 08:34
- - SasaVitebsk   И как вы вообще прерывание от клавы делаете? Завел...   Feb 28 2008, 19:58
|- - fate   по прерываниям CODE #include <stdlib.h> #i...   Feb 28 2008, 22:58
- - coolibin   На ATmega16, на асме, код коцаный перекоцаный: COD...   Feb 29 2008, 08:15
- - vet   coolibin, как приведённый код соотносится с обсужд...   Feb 29 2008, 08:59
|- - coolibin   Цитата(vet @ Feb 29 2008, 10:59) как прив...   Feb 29 2008, 10:46
|- - vet   Цитата(coolibin @ Feb 29 2008, 13:46) Это...   Feb 29 2008, 11:22
|- - =GM=   Цитата(vet @ Feb 29 2008, 11:22) а прерыв...   Feb 29 2008, 11:42
|- - coolibin   Цитата(vet @ Feb 29 2008, 13:22) так про ...   Feb 29 2008, 12:57
|- - vet   Цитата(coolibin @ Feb 29 2008, 15:57) А ч...   Feb 29 2008, 13:11
|- - coolibin   Цитата(vet @ Feb 29 2008, 15:11) не на ме...   Mar 1 2008, 11:11
|- - =GM=   Цитата(coolibin @ Mar 1 2008, 11:11) Вы и...   Mar 1 2008, 14:47
- - GDI   Цитата...как тэг кода ставить? не подскажете? можн...   Feb 29 2008, 10:56
- - Nanobyte   А ещё лучше и надёжнее писать так: Код .org 0 ...   Mar 1 2008, 17:30
- - sansnotfor   Тема старая, но, пожалуй, вставлю свои пять копеек...   Oct 13 2011, 17:53


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

 


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


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