main.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #pragma once
  2. #ifndef _MAIN_H
  3. #define _MAIN_H
  4. /**
  5. * Битовые макросы
  6. */
  7. #define SetBit(x,y) x |= (1 << (y))
  8. #define ClrBit(x,y) x &= ~(1 << (y))
  9. #define InvBit(x,y) x ^= (1 << (y))
  10. #define IsBit(x,y) (x & (1 << (y)))
  11. #define ResBit(reg,bit) (reg &= ~_BV(bit))
  12. /*
  13. Автоматически включается avr/sfr_defs.h, который содержит:
  14. _BV(bit) === (1<<(bit))
  15. bit_is_set(sfr, bit)
  16. bit_is_clear(sfr, bit)
  17. loop_until_bit_is_set(sfr, bit)
  18. loop_until_bit_is_clear(sfr, bit)
  19. */
  20. /**
  21. * Дефайны
  22. */
  23. /* Port B, puttons, input, pull-up */
  24. #define BTN_NUM 3
  25. #define BUTTON1_PIN _BV(PB3)
  26. #define BUTTON2_PIN _BV(PB4)
  27. #define BUTTON3_PIN _BV(PB5)
  28. #define BUTTON_PINS (BUTTON1_PIN | BUTTON2_PIN | BUTTON3_PIN)
  29. #define BUTTON1_STATE (PINB & BUTTON1_PIN)
  30. #define BUTTON2_STATE (PINB & BUTTON2_PIN)
  31. #define BUTTON3_STATE (PINB & BUTTON3_PIN)
  32. #define BUTTONS_STATE (PINB & BUTTON_PINS)
  33. #define BUTTON_STATE(pin) (PINB & pin)
  34. #define BUTTON_PERIOD 10
  35. /* in ms */
  36. #define BTN_SCAN_PERIOD 10
  37. #define BTN_TIME_PAUSE 20
  38. /* все временные константы кнопок кратны периоду опроса кнопок - 10 ms. */
  39. #define BTN_TIME_PRESSED 3
  40. #define BTN_TIME_HOLDED 50
  41. #define BTN_TIME_REPEATED 5
  42. /* Port C, Lamp digits, output */
  43. #define DIGIT_BLANK 0x0F
  44. #define DIGIT_A0 _BV(PC0)
  45. #define DIGIT_A1 _BV(PC1)
  46. #define DIGIT_A2 _BV(PC2)
  47. #define DIGIT_A3 _BV(PC3)
  48. #define DIGIT_PINS (DIGIT_A0 | DIGIT_A1 | DIGIT_A2 | DIGIT_A3)
  49. /* Port D, Lamp anods, Dot, RTC interrupt, UART */
  50. #define DOT_PIN _BV(PD2)
  51. #define ANOD1 _BV(PD4)
  52. #define ANOD2 _BV(PD5)
  53. #define ANOD3 _BV(PD6)
  54. #define ANOD4 _BV(PD7)
  55. #define ANOD_PINS (ANOD1 | ANOD2 | ANOD3 | ANOD4)
  56. typedef struct {
  57. uint8_t time;
  58. es_event_t pressed;
  59. es_event_t holded;
  60. uint8_t pin;
  61. } btn_t;
  62. #endif