Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
Запоминаешь байт из порта, и при следующем скане сравниваешь. Если 24.11.03 04:06 Число просмотров: 1140
Автор: Zef <Alloo Zef> Статус: Elderman
|
не совпало - есть нажатие/отжатие: запоминаешь новое значение и вызываешь обработчик.
|
<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
|
не совпало - есть нажатие/отжатие: запоминаешь новое значение и вызываешь обработчик.
|
|
|