|
SIGNAL(SIG_OUTPUT_COMPARE0)
{
// unit=0 SEG_D2
// unit=1 SEG_D4
if (unit == 0) {
/* shut off digit */
PORTB = _BV(SEG_D4);
DISPLAY_PORT = DigitTable[17];/* display next unit */
PORTB = _BV(SEG_D2);
DISPLAY_PORT = DigitTable[0];
}
else if (unit == 1) {
/* shut off digit */
PORTB = _BV(SEG_D2);
DISPLAY_PORT = DigitTable[17];/* display next unit */
PORTB = _BV(SEG_D4);
DISPLAY_PORT = DigitTable[1];
}unit++;
if (unit > 1) unit = 0;
//PORTB = _BV(SEG_D4);
//DISPLAY_PORT = DigitTable[cnt++];
//if (cnt == 10) cnt = 0;
}
Но у этого кода странный глючок: отображаются оба индикатора, которые мне надо, но на втором вместо '1' только половинка, то есть сегмент 'B' не зажигается...
У меня общий анод, потому как я понимаю должно быть инвертирование. Цифры определены так:
/* Segments definition */
#define SEG_A 0x01
#define SEG_B 0x02
#define SEG_C 0x04
#define SEG_D 0x08
#define SEG_E 0x10
#define SEG_F 0x20
#define SEG_G 0x40
#define SEG_CD 0x80uint8_t DigitTable[] = {
~(SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F), // 0
~(SEG_B | SEG_C), // 1.....
};
E-mail: info@telesys.ru