03-08-2016, 14:19
Demo Pawła to duży krok do przodu pozwalający nam wreszcie wyświetlać efekty pracy programu. W mojej obsłudze wyświetlacza zamiast makra zastosowałem funkcje static inline do sterowania pinami CS, WRX (DCX). Efekt jest identyczny a kod jak dla mnie bardziej czytelny. Warto jawnie opisać stany na pinie WRX-DCX (Data, Command) aby nie trzeba było pamiętać co jest czym ustawiane.
Typ inline oznacza, że ciało funkcji będzie wstawiane do programu w każde miejsce wywołania funkcji. Funkcja nie jest wywoływana tak jak tradycyjne funkcje poprzez skok, nie jest generowany klasyczny prolog i epilog funkcji. Koszt w kodzie i czasie wykonania takiej funkcji jest dokładnie taki sam jak tego co znajduje się w środku funkcji.
Typ static oznacza, że jest to prywatna funkcja tylko dla moduły wyświetlacza, funkcja nie jest dostępna w innych modułach programu.
Zamiast funkcji sprint warto napisać własną aby działała szybciej, dla częstotliwości można usunąć dodatkowo obsługę liczb ujemnych.
Nie musimy wtedy wczytywać dodatkowego modułu <stdio.h>.
Na zdjęciu demo obsługi wbudowanego wyświetlacza ILI9341, symulacja prostego sterownika radia. Górną częstotliwość możemy zmieniać enkoderem, dolna "udaje" skaner. Niebieski klawisz przywraca skaner do nastawy 3700khz. Na dole ekranu przykłady kolorowych ikon. W tym programie jest wszystko z poprzednich zadań. Paczka z projektem w załączniku ( trzy fonty + kilka ikon).
Na bazie takiego "szkieletu programu" możemy spokojnie zrobić pierwszy prosty przyrząd, tylko zainteresowania ciągle brak.
Typ inline oznacza, że ciało funkcji będzie wstawiane do programu w każde miejsce wywołania funkcji. Funkcja nie jest wywoływana tak jak tradycyjne funkcje poprzez skok, nie jest generowany klasyczny prolog i epilog funkcji. Koszt w kodzie i czasie wykonania takiej funkcji jest dokładnie taki sam jak tego co znajduje się w środku funkcji.
Typ static oznacza, że jest to prywatna funkcja tylko dla moduły wyświetlacza, funkcja nie jest dostępna w innych modułach programu.
Kod:
//////////////////////////////////////////////////////////////////////////////////////////
// aktywacja kontrolera LCD
inline static void lcd_cs_on(void)
{
LCD_CS_GPIO->ODR &= ~ LCD_CS_PIN;
}
//////////////////////////////////////////////////////////////////////////////////////////
// blokowanie kontrolera LCD
inline static void lcd_cs_off(void)
{
LCD_CS_GPIO->ODR |= LCD_CS_PIN;
}
//////////////////////////////////////////////////////////////////////////////////////////
// dane dla kontrolera LCD
inline static void lcd_wrx_data(void)
{
LCD_WRX_GPIO->ODR |= LCD_WRX_PIN;
}
//////////////////////////////////////////////////////////////////////////////////////////
// rozkaz dla kontrolera LCD
inline static void lcd_wrx_command(void)
{
LCD_WRX_GPIO->ODR &= ~ LCD_WRX_PIN;
}Zamiast funkcji sprint warto napisać własną aby działała szybciej, dla częstotliwości można usunąć dodatkowo obsługę liczb ujemnych.
Nie musimy wtedy wczytywać dodatkowego modułu <stdio.h>.
Kod:
//////////////////////////////////////////////////////////////////////////////////////////
// wyswietla liczbe int32 w postaci cyfr
// wspolrzedne X, Y dla cyfry jednosci, kolejne cyfry na LCD w lewo
void lcd_int32( uint16_t x, uint8_t y, int32_t value)
{
uint8_t n = 0;
char buf[9];
char znak = '+';
if (value < 0)
{
znak='-';
value = 0 - value;
}
buf[n++] = '\000'; //ogranicznik wyswietlania cyfr
do {
buf[n++] = (value % 10) + '0'; //kolejne cyfry od najnizszej pozycji
value = value / 10;
} while (value != 0);
buf[n] = znak;
while (buf[n] != '\000')
{
lcd_char_16x24(x-(n*16), y, buf[n]); //wg. wymaganego fontu
--n;
}
}Na zdjęciu demo obsługi wbudowanego wyświetlacza ILI9341, symulacja prostego sterownika radia. Górną częstotliwość możemy zmieniać enkoderem, dolna "udaje" skaner. Niebieski klawisz przywraca skaner do nastawy 3700khz. Na dole ekranu przykłady kolorowych ikon. W tym programie jest wszystko z poprzednich zadań. Paczka z projektem w załączniku ( trzy fonty + kilka ikon).
Na bazie takiego "szkieletu programu" możemy spokojnie zrobić pierwszy prosty przyrząd, tylko zainteresowania ciągle brak.
73 Adam

