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