Replace led_hour (etc.) globals with TIME struct

This commit is contained in:
2020-11-18 09:00:09 +01:00
parent b9c0be68d8
commit ed730b8dc3
6 changed files with 28 additions and 31 deletions

View File

@@ -9,20 +9,20 @@ uint8_t k_inc_hour, k_inc_minute, k_inc_second, k_inc_brightness;
void inc_hour(void)
{
led_hour = (led_hour + 1) % 24;
rtc_set_time(HOUR, led_hour);
led_display.hour = (led_display.hour + 1) % 24;
rtc_set_time(HOUR, led_display.hour);
}
void inc_minute(void)
{
led_minute = (led_minute + 1) % 60;
rtc_set_time(MINUTE, led_minute);
led_display.minute = (led_display.minute + 1) % 60;
rtc_set_time(MINUTE, led_display.minute);
}
void inc_second(void)
{
led_second = (led_second + 1) % 60;
rtc_set_time(SECOND, led_second);
led_display.second = (led_display.second + 1) % 60;
rtc_set_time(SECOND, led_display.second);
}
void inc_brightness(void)

View File

@@ -3,9 +3,7 @@
#include "config.h"
#include "led.h"
volatile uint8_t led_hour;
volatile uint8_t led_minute;
volatile uint8_t led_second;
volatile struct TIME led_display = { 0, 0, 0 };
void led_init(void)
{
@@ -31,15 +29,15 @@ ISR(TIMER0_OVF_vect)
switch(curr_anode)
{
case 1:
LED_PORT = ~led_hour;
LED_PORT = ~led_display.hour;
ANODES_PORT = ram_cfg.led_brightness >= pwm_counter ? ~HOUR_ANODE : 0xFF;
break;
case 2:
LED_PORT = ~led_minute;
LED_PORT = ~led_display.minute;
ANODES_PORT = ram_cfg.led_brightness >= pwm_counter ? ~MINUTE_ANODE : 0xFF;
break;
case 4:
LED_PORT = ~led_second;
LED_PORT = ~led_display.second;
ANODES_PORT = ram_cfg.led_brightness >= pwm_counter ? ~SECOND_ANODE : 0xFF;
break;
}

View File

@@ -1,6 +1,8 @@
#ifndef __LED_H__
#define __LED_H__
#include "time.h"
#define LED_PORT PORTA
#define LED_DIR DDRA
@@ -10,9 +12,7 @@
#define MINUTE_ANODE (1<<PD6)
#define SECOND_ANODE (1<<PD7)
extern volatile uint8_t led_hour;
extern volatile uint8_t led_minute;
extern volatile uint8_t led_second;
extern volatile struct TIME led_display;
void led_init(void);

View File

@@ -3,6 +3,7 @@
#include "config.h"
#include "keyboard.h"
#include "ptimer.h"
#include "time.h"
#include "i2c.h"
#include "rtc.h"
#include "led.h"
@@ -20,10 +21,6 @@ int main()
sei();
led_hour = 0;
led_minute = 0;
led_second = 0;
while(1)
{
keyboard_handle_input();
@@ -32,8 +29,5 @@ int main()
ISR(INT0_vect)
{
struct TIME curr_time = rtc_read_time();
led_hour = curr_time.hour;
led_minute = curr_time.minute;
led_second = curr_time.second;
led_display = rtc_read_time();
}

View File

@@ -1,6 +1,8 @@
#ifndef __RTC_H__
#define __RTC_H__
#include "time.h"
#define RTC_I2C_ADDR 0xA2
#define SECOND 0x02
@@ -14,17 +16,9 @@
#define INT1_DIR DDRD
#define INT1_PIN PD3
#define DEC_2_BCD(dec) ((((dec) / 10) << 4) | ((dec) % 10))
#define BCD_2_DEC(bcd) (((((bcd) >> 4) & 0x0F) * 10) + ((bcd) & 0x0F))
struct TIME
{
uint8_t hour;
uint8_t minute;
uint8_t second;
};
void rtc_int0_init(void);
void rtc_int1_init(void);
void rtc_set_time(uint8_t part, uint8_t value);

11
firmware/time.h Normal file
View File

@@ -0,0 +1,11 @@
#ifndef __TIME_H__
#define __TIME_H__
struct TIME
{
uint8_t hour;
uint8_t minute;
uint8_t second;
};
#endif