From 352d78fbfd97252f1d39f0f98a36b2c62cfc241c Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Mon, 2 Feb 2026 11:56:33 +0530 Subject: 2 digit counter display --- src/main.c | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main.c b/src/main.c index 540f14c..c1dc647 100644 --- a/src/main.c +++ b/src/main.c @@ -1,29 +1,51 @@ #include +#include #include // a b c d e f g decimal // Reversed because a-g is mapped to pa0-6. (pa7 is decimal) // Complemented because display is common anode -const long digits[] = { +const uint32_t digits[] = { 0b01000000, 0b01111001, 0b00100100, 0b00110000, 0b00011001, 0b00010010, 0b00000010, 0b01111000, 0b00000000, 0b00010000, }; -void write_digit(int digit) { +void write_digit(uint8_t digit) { if (digit > 9 || digit < 0) return; - PORTA = digits[digit]; } +void write_time(uint16_t hour, uint16_t minute) { + uint8_t minute_digit1 = minute % 10; + uint8_t minute_digit2 = minute / 10; + // unsigned short hour_digit1 = hour % 10; + // unsigned short hour_digit2 = hour / 10; + +#ifdef STUBBED + printf("\r:: %d %d", minute_digit2, minute_digit1); + fflush(stdout); +#endif + + write_digit(minute_digit1); + PORTA |= (1 << PA7); + _delay_ms(10); + PORTA &= ~(1 << PA7); + + write_digit(minute_digit2); + PORTB |= (1 << PB2); + _delay_ms(10); + PORTB &= ~(1 << PB2); +} + int main(void) { DDRA |= 0b11111111; + DDRB |= (1 << PB2); - int i = 0; + uint32_t i = 0; while (1) { - write_digit(i); - _delay_ms(500); - i = (i + 1) % 10; + write_time(0, (i / 20) % 60); + i = (i + 1) % 100000; } return 0; } -- cgit v1.3.1