|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:18 am
|
Страница 1 от 1
|
[ 2 мнения ] |
|
Проблем с динамична индикация
| Автор |
Съобщение |
|
marcuka68
Ранг: Ориентиран
Регистриран на: Пет Авг 07, 2009 4:58 pm Мнения: 273
|
 Проблем с динамична индикация
Здравейте, правя една динамична индикация : 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;
}
|
| Сря Мар 17, 2010 4:07 pm |
|
 |
|
Vesko
Ранг: Популярен
Регистриран на: Пон Мар 22, 2010 8:52 pm Мнения: 328
|
Преди да смениш колоната изгаси информацията на редовете.
|
| Пон Мар 22, 2010 8:54 pm |
|
|
|
Страница 1 от 1
|
[ 2 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|