TRUE - таймер запущений, FALSE - остановленbyTcnt; byDisplayRefreshCnt;// ShowDisplayData (void);// Висновок екранного буфераPrepareRpmData (WORD wRpm); btDisplayUpdate;// = TRUE, якщо прийшов час оновити дисплей byDisplay [4];/​​/ буфер даних, для виведення на екран
WORD wLockedRpm;
// Масив знакогенератора
BYTE byCharacter [12] = {0xFA,// ​​0
0x82,// ​​1
xB9,// ​​2
xAB, // 3
xC3,// ​​4
x6B,// ​​5
x7B,// ​​6
xA2,// ​​7
xFB,// ​​8
xEB,// ​​9
x00,// ​​blank
0x01// -
};
WORD wRpm;// Швидкість обертання (об/хв)
// BOOLEAN btRpmUpdate;// = 1, коли вимірюємо нове значення оборотів
WORD wTimerOvfCnt;// Лічильник переповнень таймера (потрібний для
// збільшення розрядності
WORD wFlashCnt;
BOOLEAN btFirstLowRateFlash;// FALSE - якщо відлік періоду ще не почався
void RefreshDisplay (void)
{
# asm ("cli"); (btDisplayUpdate)
{= wRpm; = FALSE;
}
# asm ("sei"); (wLockedRpm); ();
}
/***************************************** *******************************
Перетворення швидкості мотора в дані екранного буфера
{i; R; = wRpm; [3] = wRpm% 10 ;/ = 10; (byDisplay [3]> 4)// округляємо
{+ +; + = 10;
}
byDisplay [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;
}:
}
/***************************************** *******************************
Висновок екранного буфера на дисплей.
Вхід: -
Вихід: -
{
# ifdef Cathode = byCharacter [byDisplay [0]]; .5 = 0; _us (LED_delay); .5 = 1; = byCharacter [byDisplay [1]]; .1 = 0; _us (LED_delay); .1 = 1; = byCharacter [...