if (!PIND.1)
{
delay_ms(10);
if (!PIND.1)
{<...событие>}
}.
Но иногда возникает необходимость экстренно опросить кнопку, т. е. несмотря на, то что выполняется кусок программы при нажатии на кнопку управление должно передаться обработчику кнопки из любого места программы. Чтобы реализовать это необходимо использовать обработчик прерывания на ноге к которой подключена кнопка.
Я написал такую программу, может для кого будет интересно, кому то поможет. Для начала нужно завести переменную, в которой будет находится вся информация о кнопке. Почему переменную, а не новый тип - типа структуры, в которой для каждого состояния будет своя переменная, потому, что это микроконтроллер, а не CORE I7
|-|-|-|-| |-|10|9|8| |7|6|5|4| |3|2|1|0|
0-7 - счетчик времени удержания кнопки максимальное значение 256 в десятичной системе или FF в HEX
8-9 - состояние кнопки: 00 - Сброс
01 - Нажата
10 - Отпущена
11 - Удерживается
10 - флаг разрешения на включение таймера: 0 - Запретить включение таймера
1 - Разрешить включение таймера
11-15 - не используются
Прогу на си прикрепляю. Далее хочу добавить, кому это интересно. Как видите биты с 11 по 15 не используются, а их можно использовать скажем для определение комбинаций нажатий кнопки, типа короткий + короткий + длинный(как в известной игрушке mortal combat
- Вложения
-
- button.rar
- (1.54 КБ) 230 скачиваний


