Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Проблем с динамична индикация
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=7646
Страница 1 от 1

Автор:  marcuka68 [ Сря Мар 17, 2010 4:07 pm ]
Заглавие:  Проблем с динамична индикация

Здравейте, правя една динамична индикация : 8 реда на 9 колони. Ползвам ULN2004, за тока през колоните. Имам следния проблем - когато светне някои диод, светят и някои съседни, но по-слабо. Ако можете да ме насочите, как да реша проблема, благодаря Ви!

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
unsigned char port;
static unsigned char column = 0, blink = 0;
static unsigned int t = 0;

TCNT1H=0xFC; // interrupt each 1ms
TCNT1L=0x31; // 0xFC31
tick++;
if(!(PIND & 0xFC) && !(PINB & 0x07)) // begin with columns sweep, enable the first column
PORTD.7 = 1;
else if(PIND & 0xFC) // next column on PORTD
{
PORTD >>= 1;
nop(); // synchronization
if(!(PIND & 0xFC)) // finish with PORTD columns
PORTB.2 = 1; // begin with PORTB columns (PB2 - PB0)
}
else if(PINB & 0x07)
{
port = PINB & 0xF8;
PORTB = ((PORTB & 0x07) >> 1) | port; // next column on PORTB
nop();
if(!(PINB & 0x07)) // finish with PORTB columns
PORTD.7 = 1; // again begin with PORTD columns
}
if(!blink) // begin with rows sweep
{
PORTC = matrix[column] >> 2; // give the row information, use PC5 - PC0 for rows 0 - 5
port = PINB & 0xCF; // remember the port value and clear PB5 - PB4
PORTB = ((matrix[column] << 4) & 0x30) | port; // ... , use PB5 - PB4 for rows 6 - 7
if((column == (COLUMNS_NUM - 1)) && ((tick - t) > BLINK_OFF))
{
t = tick;
blink = 1;
column = 0xFF; // after incremetn will become 0x00
}
}
else
{
PORTC = matrix_blink[column] >> 2; // give the row information, use PC5 - PC0 for rows 0 - 5
port = PINB & 0xCF; // remember the port value and clear PB5 - PB4
PORTB = ((matrix_blink[column] << 4) & 0x30) | port; // ..., use PB5 - PB4 for rows 6 - 7
if((column == (COLUMNS_NUM - 1)) && ((tick - t) > BLINK_ON))
{
t = tick;
blink = 0;
column = 0xFF; // after incremetn will become 0x00
}
}
if(++column == COLUMNS_NUM)
column = 0;
}

Автор:  Vesko [ Пон Мар 22, 2010 8:54 pm ]
Заглавие: 

Преди да смениш колоната изгаси информацията на редовете.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/