matrix: Add brightness
This commit is contained in:
parent
ec9e6d9506
commit
274cf1e054
|
@ -10,5 +10,6 @@ void matrix_show(void);
|
||||||
void matrix_init(void);
|
void matrix_init(void);
|
||||||
|
|
||||||
void matrix_set(uint8_t x, uint8_t y, uint8_t active);
|
void matrix_set(uint8_t x, uint8_t y, uint8_t active);
|
||||||
|
void matrix_brightness(uint8_t x, uint8_t y, uint8_t brightness);
|
||||||
|
|
||||||
#endif /* MATRIX_H */
|
#endif /* MATRIX_H */
|
||||||
|
|
|
@ -3,8 +3,9 @@
|
||||||
#include <pentabug/timer.h>
|
#include <pentabug/timer.h>
|
||||||
#include <pentabug/hal.h>
|
#include <pentabug/hal.h>
|
||||||
|
|
||||||
static uint8_t pixels[9];
|
static uint8_t pixels[9] = {0};
|
||||||
static uint8_t index;
|
static uint8_t index;
|
||||||
|
static uint8_t cycle;
|
||||||
|
|
||||||
void matrix_init(void) {
|
void matrix_init(void) {
|
||||||
DDRD |= (1 << 5) | (1 << 6) | (1 << 7);
|
DDRD |= (1 << 5) | (1 << 6) | (1 << 7);
|
||||||
|
@ -17,19 +18,19 @@ static void move_line(uint8_t line) {
|
||||||
PORTD &= ~(1 << (line + 5));
|
PORTD &= ~(1 << (line + 5));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_line(uint8_t data[]) {
|
static void write_line(uint8_t data[], uint8_t timing) {
|
||||||
PORTC &= ~((1 << 5) | (1 << 4));
|
PORTC &= ~((1 << 5) | (1 << 4));
|
||||||
PORTB &= ~(1 << 2);
|
PORTB &= ~(1 << 2);
|
||||||
|
|
||||||
if(data[0]) {
|
if(data[0] > timing) {
|
||||||
PORTC |= 1 << 5;
|
PORTC |= 1 << 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data[1]) {
|
if(data[1] > timing) {
|
||||||
PORTC |= 1 << 4;
|
PORTC |= 1 << 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data[2]) {
|
if(data[2] > timing) {
|
||||||
PORTB |= 1 << 2;
|
PORTB |= 1 << 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,16 +39,17 @@ static void matrix_int(void) {
|
||||||
++index;
|
++index;
|
||||||
|
|
||||||
if(index >= 3) {
|
if(index >= 3) {
|
||||||
|
++cycle;
|
||||||
index = 0;
|
index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
move_line(index);
|
move_line(index);
|
||||||
write_line(pixels + (index * 3));
|
write_line(pixels + (index * 3), cycle & 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_start(void) {
|
void matrix_start(void) {
|
||||||
matrix_init();
|
matrix_init();
|
||||||
start_timer(PRESCALE_64, 125, matrix_int);
|
start_timer(PRESCALE_64, 32, matrix_int);
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_stop(void) {
|
void matrix_stop(void) {
|
||||||
|
@ -55,16 +57,22 @@ void matrix_stop(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_show(void) {
|
void matrix_show(void) {
|
||||||
|
for(uint8_t n = 0; n < 4; ++n) {
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
for(i = 0; i < 3; ++i) {
|
for(i = 0; i < 3; ++i) {
|
||||||
move_line(i);
|
move_line(i);
|
||||||
write_line(pixels + (i * 3));
|
write_line(pixels + (i * 3), n);
|
||||||
wait_ms(3);
|
wait_ms(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void matrix_set(uint8_t x, uint8_t y, uint8_t active) {
|
void matrix_set(uint8_t x, uint8_t y, uint8_t active) {
|
||||||
pixels[x*3+y] = active;
|
pixels[x*3+y] = active ? 4 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_brightness(uint8_t x, uint8_t y, uint8_t brightness) {
|
||||||
|
pixels[x*3+y] = brightness;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user