ний для
// збільшення разрядностіwFlashCnt;// Лічильник спрацьовувань датчика проходження допастіbtFirstLowRateFlash;// FALSE - якщо відлік періоду ще не почався
// (датчик жодного разу не спрацював)
Лістинг 4.2 - Відновлення дисплея
void RefreshDisplay (void)
{
# asm ("cli"); (btDisplayUpdate)
{= wRpm; = FALSE;
}
# asm ("sei"); (wLockedRpm); ();
}
Лістинг 4.3 - Перетворення швидкості мотораPrepareRpmData (WORD wRpm)
{i; R; = wRpm; [3] = wRpm% 10 ;/ = 10; (byDisplay [3]> 4)// округляємо
{
wRpm + +; + = 10;
} [3] = 0;
// Перші 4 цифр - обороти двигуна
for (i = 0; i <3; i + +)
{[2-i] = wRpm% 10 ;/ = 10;
} (R <10)
{[0] = 10; [1] = 10; [2] = 10; exit;
} ((R> = 10) & (R <100))
{[0] = 10; [1] = 10; exit;
} ((R> = 100) & (R <1000))
{[0] = 10; exit;
}:
}
Лістинг 4.4 Висновок екранного буфера на дисплей.
void ShowDisplayData (void)
{
# ifdef Cathode = byCharacter [byDisplay [0]]; .5 = 0; _us (LED_delay); .5 = 1; = byCharacter [byDisplay [1]]; .1 = 0; _us (LED_delay); .1 = 1; = byCharacter [byDisplay [2]]; .0 = 0; _us (LED_delay); .0 = 1; = byCharacter [byDisplay [3]]; .4 = 0; _us (LED_delay ); .4 = 1;
# endif
# ifdef Anode = ~ byCharacter [byDisplay [0]]; .5 = 1; _us (LED_delay); .5 = 0; = ~ byCharacter [byDisplay [1]]; .1 = 1 ; _us (LED_delay); .1 = 0; = ~ byCharacter [byDisplay [2]]; .0 = 1; _us (LED_delay); .0 = 0; = ~ byCharacter [byDisplay [3]]; .4 = 1 ; _us (LED_delay); .4 = 0;
# endif (! PIND.6)
{_us (Light_delay);
}
}
Лісинг 4.5 - Обробка переривань від OC1 (для відліку імпульсів 0.1 сек)
interrupt [TIM1_COMPA] void SYSTEM_TICK_interrupt (void)
{
// Обчислюємо оммент наступного спрацьовування таймераA + = CNT_100_MS;
// 3 рази на секунду перемальовували дисплей,
// незалежно від обставин.
if (+ + byDisplayRefreshCnt == UpCount)
{
byDisplayRefreshCnt = 0;
btDisplayUpdate = TRUE;
}
// Якщо с...