ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
19141 Топик полностью
alex_m (28.12.2004 11:52, просмотров: 1) ответил Сергей Борщ на 1) DDRC не прописан. 2) Поставь задержку между выводами - он не успевает загореться.
Ответ: Я переделал код, теперь цифры рисуются в таймерном прерывании каждые 8 мсек. Проблема в том, что пропадает сегмент "B" на втором индикаторе :(
/* Port interfaced to display unit */
#define DISPLAY_PORT PORTC

/* 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	0x80

/* Display units definition */
#define SEG_D1	PINB3
#define SEG_D2	PINB2
#define SEG_D3	PINB1
#define SEG_D4	PINB0
#define SEG_CD	PINA7

SIGNAL(SIG_OUTPUT_COMPARE0)
{
  // unit=0 SEG_D2
  // unit=1 SEG_D4
  if (unit == 0) {
	/* shut off digit */
	PORTB = _BV(SEG_D2);
	DISPLAY_PORT = DigitTable[17];

	/* display next unit */
	PORTB = _BV(SEG_D4);
	DISPLAY_PORT = DigitTable[1];
  }
  else if (unit == 1) {
	/* shut off digit */
	PORTB = _BV(SEG_D4);
	DISPLAY_PORT = DigitTable[17];

	/* display next unit */
	PORTB = _BV(SEG_D2);
	DISPLAY_PORT = DigitTable[2];
  }

  unit++;
  if (unit > 1) unit = 0;
}

int main(void)
{
  TCCR0 = 0x00;
  TCNT0 = 0x00;
  TCCR0 = _BV(CS02) | _BV(WGM01);
  OCR0 = (unsigned int)(delay0 * Fck0);
  TIMSK = _BV(OCIE0);

  //Timer1_Init();
  sei();

  DDRB = (_BV(SEG_D2) | _BV(SEG_D4));

  /* Set all PORTC pins as outputs */
  DDRC = 0xFF;

  // endless loop
  while (1)
  {

  }

  return 1;
}