From f0245a440296bc285c0c39fb18f371e42db5c08a Mon Sep 17 00:00:00 2001 From: Olaf Rempel Date: Thu, 16 Oct 2014 22:03:22 +0200 Subject: [PATCH] add DL1414 display --- ispprog.c | 301 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 214 insertions(+), 87 deletions(-) diff --git a/ispprog.c b/ispprog.c index 5c57d50..f92cda9 100644 --- a/ispprog.c +++ b/ispprog.c @@ -98,9 +98,27 @@ #define ISP_LED_OFF() { PORTB &= ~(1<= 'a' && ch <= 'z') + ch &= ~0x20; + + PORTD = ((ch & 0x7E) << 1); + PORTC = ((ch & 0x01) << 3) | (3 - (pos & 0x03)); + PORTC |= (1<> 4); + *dst++ = _hexnibble(device.sig[0]); + *dst++ = _hexnibble(device.sig[1] >> 4); + *dst++ = _hexnibble(device.sig[1]); + *dst++ = _hexnibble(device.sig[2] >> 4); + *dst++ = _hexnibble(device.sig[2]); + } + + *dst++ = ' '; + *dst++ = '\0'; + + disp_length = dst - disp_text; + disp_pos = 0x00; +#endif /* defined(DISP_WR) */ + } else if ((event == EV_BUTTON_PRESSED) || (event == EV_PROG_ENTER)) { memset(&device, 0x00, sizeof(struct _device)); reset_retries = 5; @@ -979,8 +1065,49 @@ ISR(TIMER0_OVF_vect) } else { ISP_LED_OFF(); } + +#if defined(DISP_WR) + if (reset_state == STATE_IDLE) { + if (disp_length != 0x00) { + if (!(led_timer & 0x1F)) { + disp_put4(disp_text + disp_pos); + + if (disp_pos < (disp_length -4)) { + disp_pos++; + + } else { + disp_putc(0, 'R'); + disp_putc(1, 'U'); + disp_putc(2, 'N'); + disp_putc(3, '-'); + + disp_length = 0x00; + disp_pos = 0x00; + } + } + } else { + switch (led_timer & 0x18) { + case 0x00: disp_putc(3, '-'); break; + case 0x08: disp_putc(3, '\\'); break; + case 0x10: disp_putc(3, '1'); break; + case 0x18: disp_putc(3, '/'); break; + default: + break; + } + } + + } else if (reset_state == STATE_RESET_PROGMODE) { + uint16_t byte_addres = (addr << 1); + + disp_putc(0, _hexnibble(byte_addres >> 12)); + disp_putc(1, _hexnibble(byte_addres >> 8)); + disp_putc(2, _hexnibble(byte_addres >> 4)); + disp_putc(3, _hexnibble(byte_addres)); + } +#endif /* defined(DISP_WR) */ } /* TIMER0_OVF_vect */ + #if defined(__AVR_ATmega328P__) /* * For newer devices the watchdog timer remains active even after a @@ -1037,7 +1164,7 @@ int main(void) #endif /* init statemachine */ - reset_statemachine(EV_STATE_ENTER); + reset_statemachine(EV_BUTTON_PRESSED); sei();