diff options
| -rw-r--r-- | src/button.c | 13 | ||||
| -rw-r--r-- | src/button.h | 1 | ||||
| -rw-r--r-- | src/display.c | 8 | ||||
| -rw-r--r-- | src/display.h | 2 | ||||
| -rw-r--r-- | src/main.c | 5 |
5 files changed, 14 insertions, 15 deletions
diff --git a/src/button.c b/src/button.c index 34d799c..dc52265 100644 --- a/src/button.c +++ b/src/button.c @@ -1,18 +1,14 @@ #include <avr/io.h> #include <stdint.h> -#include "avr/interrupt.h" #include "button.h" #include "rtc.h" -bool is_button_active = false; - -uint16_t button_tick_count = 0; - -ISR(PCINT0_vect, ISR_FLATTEN) { button_tick(); } +enum ButtonState check_button_state(); void button_tick() { - switch (check_button_state()) { + enum ButtonState button_state = check_button_state(); + switch (button_state) { case BUTTON_PRESSED: if (seconds <= 10) seconds = 0; @@ -27,6 +23,9 @@ void button_tick() { } } +bool is_button_active = false; +uint16_t button_tick_count = 0; + enum ButtonState check_button_state() { if (is_button_active && button_tick_count >= LONG_PRESS_TICK_COUNT) { button_tick_count = 0; diff --git a/src/button.h b/src/button.h index bb41eb6..8aa7442 100644 --- a/src/button.h +++ b/src/button.h @@ -16,5 +16,4 @@ enum ButtonState { uint16_t extern button_tick_count; void button_tick(); -enum ButtonState check_button_state(); #endif diff --git a/src/display.c b/src/display.c index 9579ff8..8380b81 100644 --- a/src/display.c +++ b/src/display.c @@ -55,21 +55,21 @@ static uint8_t special_segment_antipins[] = {10, 5, 7, 6}; void write_time(uint8_t digit_index) { // reset pins - uint32_t ddr = ~SPECIAL_SEGMENT_PINS; - uint32_t port = 0; + uint16_t ddr = ~SPECIAL_SEGMENT_PINS; + uint16_t port = 0; uint8_t digits[] = {seconds_digit1, seconds_digit2, minutes_digit1, minutes_digit2}; uint8_t digit = digits[digit_index]; - uint32_t segments = digit_masks[digit]; + uint16_t segments = digit_masks[digit]; uint8_t pin = special_segment_pins[digit_index]; uint8_t antipin = special_segment_antipins[digit_index]; uint8_t segment_pin = digit_index / 2 == 0 ? SPECIAL_SEGMENT_1 : SPECIAL_SEGMENT_2; uint8_t other_segment_pin = digit_index / 2 == 0 ? SPECIAL_SEGMENT_2 : SPECIAL_SEGMENT_1; - uint8_t other_segment_mask = + uint16_t other_segment_mask = digit_index / 2 == 0 ? SPECIAL_SEGMENT_MASK_2 : SPECIAL_SEGMENT_MASK_1; // Activate special segment diff --git a/src/display.h b/src/display.h index f01ee73..44c0c0e 100644 --- a/src/display.h +++ b/src/display.h @@ -2,8 +2,6 @@ #define _LOADED_DISPLAY #include <stdint.h> -#include "rtc.h" - // "_gfedcba" // Reversed because a-g is mapped to pa0-6. (pa7 is decimal) // Complemented because display is common anode @@ -20,13 +20,16 @@ FUSES = { // Timer 0 has lower priority than timer 1, so some ticks could get skipped on // interrupt starvation ISR(TIM0_COMPA_vect, ISR_FLATTEN) { - // button_tick(); // Check button click + button_tick(); // Check button click display_render(); } // RTC interrupt ISR(TIM1_COMPA_vect, ISR_FLATTEN) { rtc_increment(); } +// Button interrupt +ISR(PCINT0_vect, ISR_FLATTEN) { button_tick(); } + int main(void) { PRR = 0b0011; // Power reduction register. Shut down USI and ADC |
