main.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #pragma once
  2. #ifndef _MAIN_H
  3. #define _MAIN_H
  4. #include "event-system.h"
  5. //#define F_CPU 16000000UL
  6. /**
  7. * Битовые макросы
  8. */
  9. #define SetBit(x,y) x |= (1 << (y))
  10. #define ClrBit(x,y) x &= ~(1 << (y))
  11. #define InvBit(x,y) x ^= (1 << (y))
  12. #define IsBit(x,y) (x & (1 << (y)))
  13. #define ResBit(reg,bit) (reg &= ~_BV(bit))
  14. /*
  15. Автоматически включается avr/sfr_defs.h, который содержит:
  16. _BV(bit) === (1<<(bit))
  17. bit_is_set(sfr, bit)
  18. bit_is_clear(sfr, bit)
  19. loop_until_bit_is_set(sfr, bit)
  20. loop_until_bit_is_clear(sfr, bit)
  21. */
  22. /**
  23. * Дефайны
  24. */
  25. /* Port B, puttons, input, pull-up */
  26. #define BTN_NUM 3
  27. #define BUTTON1_PIN _BV(PB3)
  28. #define BUTTON2_PIN _BV(PB4)
  29. #define BUTTON3_PIN _BV(PB5)
  30. #define BUTTON_PINS (BUTTON1_PIN | BUTTON2_PIN | BUTTON3_PIN)
  31. #define BUTTON1_STATE (PINB & BUTTON1_PIN)
  32. #define BUTTON2_STATE (PINB & BUTTON2_PIN)
  33. #define BUTTON3_STATE (PINB & BUTTON3_PIN)
  34. #define BUTTONS_STATE (PINB & BUTTON_PINS)
  35. #define BUTTON_STATE(pin) (PINB & pin)
  36. #define BUTTON_PERIOD 10
  37. /* все временные константы кнопок кратны периоду опроса кнопок. */
  38. #define BTN_TIME_PRESSED 5
  39. #define BTN_TIME_HOLDED 50
  40. #define BTN_TIME_REPEATED 10
  41. #define BTN_TIME_PAUSE 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. /* Display timeout, sec */
  57. #define DISP_WDT_TIME 10
  58. typedef struct {
  59. uint8_t time;
  60. es_event_t pressed;
  61. es_event_t holded;
  62. uint8_t pin;
  63. } btn_t;
  64. #endif