dmx-web: slightly better RGB colorpicker control..
#define LED7_DDR DDRB
#define LED7_PORT PORTB
#define LED7_OE PORTB1
// common anode?
#define LED7_ANODE 0
#define LED7_OFFSET 0
#define LED7_COUNT 2
static const uint8_t LED7SEG_FONT[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01100111, // 9
0b01110111, // A
0b01111100, // B
0b00111001, // C
0b01011110, // D
0b01111001, // E
0b01110001, // F
};
enum {
LED7SEG_DOT = 0b10000000,
};
void led7_init (void)
{
sbi(&LED7_PORT, LED7_OE); // disabled (low)
sbi(&LED7_DDR, LED7_OE); // out
}
/*
* Update external IO.
*/
void led7_update_raw (uint8_t *led7, char count)
{
int i;
for (i = 0; i < count; i++) {
char raw = LED7SEG_FONT[led7[i]];
spi_tx[LED7_OFFSET + i] = LED7_ANODE ? ~raw : raw;
}
}
void led7_update_hex (unsigned char c)
{
uint8_t led7[2];
led7[0] = c >> 4;
led7[1] = c & 0xF;
return led7_update_raw(led7, sizeof(led7));
}
void led7_update (char state)
{
static unsigned char i = 0;
if (i) {
// enable display
cbi(&LED7_PORT, LED7_OE);
}
led7_update_hex(state);
i++;
}