Форум по микроконтроллерам: Обработчик кнопок на АСМ для PIC - Форум по микроконтроллерам

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Обработчик кнопок на АСМ для PIC

#1 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 08 Апрель 2013 - 09:12

buttons.inc:

Скрытый текст

Подключаем файл между обработчиком прерываний и основным циклом main.



Настройка обработчика

#define ACT_LAVEL_BUTT  0           ; Активный уровень нажатой кнопки
Тут указывается активный уровень на ПИНе при нажатой кнопке.

;**** Объявление пинов кнопок **********************;
#define BUTT_PIN_1      PORTB, 0    ; Порт кнопки №1
#define BUTT_PIN_2      PORTB, 1    ; Порт кнопки №2
#define BUTT_PIN_3      PORTB, 2    ; Порт кнопки №3
Тут, думаю, всё ясно - объявление ПИНов кнопок.
максимум их может быть 8. Префикс имён не меняется (BUTT_PIN_), меняется только порядковый номер после него (1, 2, 3, 4, ...).

;**** Задаём кнопкам собственные имена *************;
#define mbutt_left      butt_1      ; Влево
#define mbutt_right     butt_2      ; Вправо
#define mbutt_enter     butt_3      ; Ввод
Тут задаются имена переменных, в которых будут хранится флаги событий от кнопок. По умолчанию создаются переменные с префиксом butt_ и порядковым номером после него (butt_1, butt_2, ....). Можно использовать и эти имена, но гораздо удобнее иметь собственные, дабы не запутаться. В данном примере, переменные переименованы в mbutt_left, mbutt_right и mbutt_enter.

;***************************************************;
#define BUTT_VAR_ADRES  0x0A0   ; Адрес переменных в ОЗУ
Тут указывается адрес в ОЗУ, в котором будут находиться переменные. Адрес может быть любым. Будьте внимательны при подсчёте адреса, каждая добавленная кнопка будет занимать 1 байт в ОЗУ.

Далее трогать ничего не нужно.



Использование обработчика

Вызов опроса кнопок производится вызовом подпрограммы butt_tick, в периодично-повторяющемся месте программы (10-20 Мс), например в обработчике прерываний.

Флаги событий от кнопок:
butt_cur    - Текущее состояние кнопки
butt_up     - Кнопка была нажата
butt_down   - Кнопка была отжата

Установленные обработчиком флаги необходимо сбрасывать самостоятельно, кроме флага текущего состояния, он сигнализирует о состоянии кнопки (нажата-установлен/отжата-сброшен) и изменяется автоматически обработчиком.
Пример обработки флага:
;-----------------------------
banksel mbutt_right
btfss   mbutt_right, butt_up        ; Проверяем, была ли отжата кнопка mbutt_right
goto    no_butt                     ; Не была - пропускаем обработку флага
   bcf     mbutt_right, butt_up        ; сбрасываем флаг кнопки
   ......
   ......
no_butt                             ;
;-----------------------------





Пример использования:
Прикрепленный файл  buttons.rar (50,21К)
Количество загрузок:: 219
В архиве пример с 3-мя кнопками и 2-мя светодиодами. При нажатии кнопки №1 светодиод №1 загорается. При отжатии кнопки №2 светодиод №1 гаснет. При нажатии кнопки №3 светодиод №2 инвертируется.
Задействован таймер TMR2 и настроен на прерывание в 1 Ms. В прерывании создан код подсчёта 20 входов в обработчик, для реализации 20-ти миллисекундных периодов и вызова ПП опроса (butt_tick).

Пользуемся на здоровье :thank_you2:
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#2 Пользователь офлайн   dosikus 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 439
  • Регистрация: 15 Январь 13

Отправлено 08 Апрель 2013 - 10:42

Alex, ты что нибудь о вертикальных счетчиках слышал ???
0

#3 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 08 Апрель 2013 - 11:02

Нет.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#4 Пользователь офлайн   dosikus 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 439
  • Регистрация: 15 Январь 13

Отправлено 08 Апрель 2013 - 11:30

Здесь на асме http://www.piclist.c...ptoggleK8HL.htm
Здесь теория и реализация на С http://www.compuphas.../debouncing.htm
Сразу для 8ми кнопок, ну и возможны вариации.
У тестера на основе их (вертикальных счетчиков) есть реализация с флагами :
Короткое нажатие
Нажата
Отжата
Удерживалась заданное время
0

#5 Пользователь офлайн   Chip 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 10
  • Регистрация: 15 Март 15

Отправлено 15 Март 2015 - 15:57

:i-m_so_happy:

Сообщение отредактировал Chip: 16 Март 2015 - 21:33

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей