информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsГде водятся OGRыВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Если я правильно понял 25.11.03 07:24  Число просмотров: 1267
Автор: makeworld Статус: Member
<"чистая" ссылка>
> Как в 52-й однокристалке? Дык, потом-то ты из этого порта
> читаешь. Вот, то, что считал и сохраняй, а потом сравнивай.
Ну сохраню я, но ведь до тех пор пока кнопка не будет отжата и нажата другая сохраненное значение не изменится. Вопрос в том, как избежать повторного срабатывания обработчика нажатия когда кнопка долгое время вжата. Я не совсем понимаю принцип работы этого контроллера, но там эффект такой: нажимаешь кнопку и подпрограмма реакции на нажатия (обработчика нажатия) начинает выполняться много раз, пока кнопку не отожмешь, как будто в проге цикл. а циклов никаких нет. Прикол в том, у меня в обработчике нажатия ставится один флаг, так вот, пока кнопку не отожмешь он как-бы постоянно меняется 1-0-1-0-1-0 итд
<programming>
PIC16F87x - обработка нажатия клавиш 23.11.03 08:02  
Автор: makeworld Статус: Member
Отредактировано 23.11.03 08:07  Количество правок: 2
<"чистая" ссылка>
предположим к PORTB подцеплены несколько клавиш.
нажатие проверяю так: засылаю в соответсвующий бит порта единицу, затем читаю из него. если прочитался ноль - кнопка была нажата, выполняется подпрограмма P1. проблема в том, что пока кнопка не отжата P1 повторяется много раз, как будто кнопка нажимается много раз. Мне подсказали, что для проверки единственной обработки нажатия нужно сразу после чтения бита сделать маленькую задержку и прочитать его снова. если получим ноль - значит кнопка все еще вжата и нажатие можно не обрабатывать. В теории то все хорошо, а вот на практике что-то реализовать не получается. Может у кого-нить есть небольшой пример на mpasm как избежать повторной обработки одного нажатия.
Если я правильно понял 23.11.03 15:28  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Уточни, схема твоя, или ты можешь менять только программу?

> предположим к PORTB подцеплены несколько клавиш.
Если менять можно все, то цеплять лучше не сами клавиши, а обвесить небольшой логикой и отсылать только фронты и срезы нажатий (не помню подробностей, но мы сто процентов рисовали такие схемки на "Цифровой схемотехнике" - элементов там не очень много). При этом неплохо бы делать прерывание. В этом случае хорошо видно как нажатие так и отжатие

> нажатие можно не обрабатывать. В теории то все хорошо, а
> вот на практике что-то реализовать не получается. Может у
> кого-нить есть небольшой пример на mpasm как избежать
> повторной обработки одного нажатия.
Поллить порт тоже не худший вариант для контроллера, потому как больше-то ему все равно делать не хрен.
Если я правильно понял 24.11.03 07:55  
Автор: makeworld Статус: Member
<"чистая" ссылка>
> Уточни, схема твоя, или ты можешь менять только программу?
схема не моя, менять могу только программу

2 Zef: Там же для проверки надо в каждый бит единицу заслать, т.е. самому изменить порт, поэтому так как ты сказал по моему не получится. или я не так понял?
Если я правильно понял 24.11.03 08:53  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
> 2 Zef: Там же для проверки надо в каждый бит единицу
> заслать, т.е. самому изменить порт, поэтому так как ты
> сказал по моему не получится. или я не так понял?

Как в 52-й однокристалке? Дык, потом-то ты из этого порта читаешь. Вот, то, что считал и сохраняй, а потом сравнивай.
Если я правильно понял 25.11.03 07:24  
Автор: makeworld Статус: Member
<"чистая" ссылка>
> Как в 52-й однокристалке? Дык, потом-то ты из этого порта
> читаешь. Вот, то, что считал и сохраняй, а потом сравнивай.
Ну сохраню я, но ведь до тех пор пока кнопка не будет отжата и нажата другая сохраненное значение не изменится. Вопрос в том, как избежать повторного срабатывания обработчика нажатия когда кнопка долгое время вжата. Я не совсем понимаю принцип работы этого контроллера, но там эффект такой: нажимаешь кнопку и подпрограмма реакции на нажатия (обработчика нажатия) начинает выполняться много раз, пока кнопку не отожмешь, как будто в проге цикл. а циклов никаких нет. Прикол в том, у меня в обработчике нажатия ставится один флаг, так вот, пока кнопку не отожмешь он как-бы постоянно меняется 1-0-1-0-1-0 итд
Запоминаешь байт из порта, и при следующем скане сравниваешь. Если 24.11.03 04:06  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
не совпало - есть нажатие/отжатие: запоминаешь новое значение и вызываешь обработчик.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach