From e393c108014abc793e449d2911629ca8ee6f5d93 Mon Sep 17 00:00:00 2001 From: Lea Date: Tue, 29 Aug 2023 09:53:00 +0200 Subject: [PATCH] fix counter --- lib/7segment_4digits.c | 7 +++++-- lib/7segment_4digits.h | 2 +- main.c | 22 +++++++++++++++++----- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/lib/7segment_4digits.c b/lib/7segment_4digits.c index e4d24ed..932c9a0 100644 --- a/lib/7segment_4digits.c +++ b/lib/7segment_4digits.c @@ -28,11 +28,14 @@ void set_display_value(uint8_t digit, uint8_t data) { display[digit] = data; } -void update_display() { +// Returns the amount of microseconds we blocked for +float update_display() { + int sleep_time = 2000; for (int i = 0; i < 4; i++) { display_value(i, display[i]); - _delay_us(100); + _delay_us(sleep_time); } + return sleep_time * 4; } void show_float(float value) { diff --git a/lib/7segment_4digits.h b/lib/7segment_4digits.h index ae54034..9d342ed 100644 --- a/lib/7segment_4digits.h +++ b/lib/7segment_4digits.h @@ -4,6 +4,6 @@ void display_value(uint8_t digit, uint8_t data); void set_display_value(uint8_t digit, uint8_t data); -void update_display(); +float update_display(); void show_float(float value); diff --git a/main.c b/main.c index 51e7fb0..fead234 100644 --- a/main.c +++ b/main.c @@ -40,16 +40,28 @@ void prog_7segment() { } void prog_7segment_4digit() { - DDRF = 0b11111111; - DDRK = 0b00001111; + DDRF = 0b11111111; + DDRK = 0b00001111; + PORTK = 0b10000000; // set pull-up float num = 0.0f; + bool running = false; + bool pressed = false; while(1) { show_float(num); - update_display(); + float sleep_time = update_display(); - num += 0.001f; - if (num >= 10000) num = 0.0f; + if (!pressed && bit_is_clear(PINK, PINK7)) { + running = !running; + pressed = true; + } else if (pressed && bit_is_set(PINK, PINK7)) { + pressed = false; + } + + if (running) { + num += sleep_time / 1000.0f / 1000.0f; + if (num >= 10000) num = 0.0f; + } } }