Сообщение от igonzo
|
есле не затруднит то можно чуть по подробней
[CODE]
PORTC.4 = 0;
while(!PIND.0); // пока 0 - джать появления 1
while(1){
while(PIND.0); // пока 1 - джать появления 0
PORTC.4 ^= 1; // изменить PC4
delay_ms (100); // пауза от лишних страбатываний - подобрать по задаче
while(!PIND.0); // пока 0 - джать появления 1
delay_ms (100); // пауза от лишних страбатываний
}
[CODE]
|
Обычно я фильтрую програмно ВСЕ сигналы которые входят в МК для исключения влияния дребезга, помех и ошибок аппаратной части. Обычно функция вызывается в прерываниях периодически 1-10 милисек. Для кнопок алгоритм такой:
Если флаг сработали клавиши=1 то выход.
Если считаное состояние = клавиши разомкнуты, то счётчик срабатывания клавиш=время срабатывания, предыдущее состояние клавишь=текущее состояние клавишь. выход.
Если считаное состояние не=разомкнуты то сравнивается предыдущее состояние клавишь и текущее состояние клавишь.
Если текущее состояние НЕ= предыдущему состоянию то счётчик срабатывания клавиш=время срабатывания, предыдущее состояние клавишь=текущее состояние клавишь. выход.
Если текущее состояние=предыдущему состоянию то счётчик срабатывания клавишь -1.
Если счётчик срабатывания НЕ=0 то выход.
Если счётчик срабатывания =0 то флаг сработали клавиши=1. текущее состояние клавишь содержит нажатые клавиши. выход.
В функциях управления устройством ожидается флаг срабатывания и анализируется состояние клавишь, далее флаг гасится и ожидается снова.
А уж описать на нужном языке дело техники.