Advertisement
teplofizik

button.c

Mar 4th, 2013
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.91 KB | None | 0 0
  1. // ***********************************************************
  2. //  button.c
  3. //  Работа с кнопкой
  4. //
  5. // ***********************************************************
  6.  
  7. #include "button.h"
  8. #include "../drivers.h"
  9.  
  10. // Задержка между нажатиями при зажатой кнопке
  11. #define DEFAULT_COUNTDOWN  30
  12.  
  13. // Кнопка прицеплена на ногу PA0
  14. static const TPort ButtonPort = PORTA;
  15. static const int   ButtonPin  = 0;
  16. static int       Countdown = 0;
  17. static void   (* button_Handler)(uint8_t Button);
  18.  
  19. // Опрос ножки, частота 100 Гц
  20. static void button_onTimer(void)
  21. {
  22.     if(gpio_Value(ButtonPort, ButtonPin))
  23.     {
  24.         // Если нажатие зафиксировано, то считаем
  25.         if(Countdown)
  26.         {
  27.             Countdown--;
  28.         }
  29.         else
  30.         {
  31.             // Задержка перед вторым нажатием
  32.             Countdown = DEFAULT_COUNTDOWN;
  33.             // Если есть обработчик - вызовем его
  34.             // Кнопка всего одна - передаём 0
  35.             if(button_Handler) button_Handler(0);
  36.         }
  37.     }
  38.     else
  39.     {
  40.         // Первое нажатие фиксируется сразу
  41.         Countdown = 0;
  42.     }
  43. }
  44.  
  45. // Инициализация драйвера кнопки
  46. void button_Init(void)
  47. {
  48.     // Вывод в режиме входа
  49.     gpio_DigitalInput(ButtonPort, ButtonPin);
  50.    
  51.     // Запустим процесс опроса кнопки
  52.     timer_AddFunction(100, &button_onTimer);
  53.    
  54.     // Счётчик, нажатия фиксируются только когда он 0
  55.     Countdown = 0;
  56. }
  57.  
  58. // Установить обработчик нажатия
  59. // void Handler(uint8_t Button);
  60. void button_SetHandler(void * Handler)
  61. {
  62.     button_Handler = (void(*)(uint8_t))Handler;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement