diff options
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 66 |
1 files changed, 30 insertions, 36 deletions
@@ -1,51 +1,45 @@ #include <avr/io.h> +#include <avr/fuse.h> #include <stdint.h> #include <util/delay.h> -// 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 uint32_t digits[] = { - 0b01000000, 0b01111001, 0b00100100, 0b00110000, 0b00011001, - 0b00010010, 0b00000010, 0b01111000, 0b00000000, 0b00010000, +#include "display.h" + +// Config for attiny84a + 32KHz crystal osc taken from https://github.com/ingepnet/breadboardwatch/blob/master/Makefile#L26 +FUSES = { + .low = 0xe6, + .high = 0xd7, + .extended = 0xff, }; -void write_digit(uint8_t digit) { - if (digit > 9 || digit < 0) - return; - PORTA = digits[digit]; +void setup_output(void) { + DDRA |= 0b11111111; + DDRB |= 0b11111111; } -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; +int main(void) { + uint32_t count = 0; + uint8_t is_button_on = 0; -#ifdef STUBBED - printf("\r:: %d %d", minute_digit2, minute_digit1); - fflush(stdout); -#endif + while (1) { + DDRB &= ~(1 << PB2); + is_button_on = (PINB & (1 << PB2)) > 0; - write_digit(minute_digit1); - PORTA |= (1 << PA7); - _delay_ms(10); - PORTA &= ~(1 << PA7); + if (is_button_on) { + _delay_ms(30); + is_button_on = (PINB & (1 << PB2)) > 0; + if (is_button_on) { + setup_output(); + PORTA |= 0b10000000; + _delay_ms(500); + continue; + } + } - write_digit(minute_digit2); - PORTB |= (1 << PB2); - _delay_ms(10); - PORTB &= ~(1 << PB2); -} + setup_output(); + write_time(0, (count / 20) % 60); -int main(void) { - DDRA |= 0b11111111; - DDRB |= (1 << PB2); - - uint32_t i = 0; - while (1) { - write_time(0, (i / 20) % 60); - i = (i + 1) % 100000; + count = (count + 1) % 100000; } return 0; } |
