Próbowałem przeportować swoją wspaniałą bibliotekę z AVRów na LPC1768, jednak mi się to nie udało. Napisałem własną od podstaw, posiada ona jednak pewne braki w porównaniu do tej z AVrów. Sterowanie LCD jest za pomocą na sztywno ustawionych czasów a nie przez odpytywanie wyświetlacza jak to miało miejsce. Jednak jak się zbiorę w sobie to poprawię ten błąd. Biblioteka składa się z dwóch plików
lcd2x16.c oraz
lcd2x16.h. Jedynie funkcja
delay znajduje się w pliku głównym programu i w zasadzie też wymaga poprawy. Odmierza czas w ms a oparta jest o timer
SysTick. Jej definicja wygląda tak:
void delay(uint32_t interval)
{
uint32_t start = SysTickCnt;
while (SysTickCnt - start < interval)
;
}
Ustawienie timera wygląda tak:
SysTick_Config(SystemCoreClock / 1000);
Natomiast przerwanie do SysTick:
void SysTick_Handler(void)
{
SysTickCnt++;
}
LCD jest podpięty do LPC1768 w następujący sposób:
P1.24 - D4
P1.25 - D5
P1.26 - D6
P1.27 - D7
P1.28 - RS
P1.29 - RW
P1.31 - EN
Na chwilę obecną biblioteka posiada następujące funkcje:
void LcdPinValue(uint32_t pin, uint8_t value)
Przy użyciu tej funkcji ustawia się wybraną wartość na konkretny jeden pin wyświetlacza a następnie wartość ta jest zabezpieczana za pomocą maski, więc nie można zmienić wartości tego pinu bez zdjęcia maski. Powstała ona z myślą o ustawianiu wartości dla pinów RS, RW oraz EN.
void LcdWriteCmd(uint8_t command)
Fynkcja odpowiadająca za wysyłanie komend na wyświetlacz, dodatkowo w bibliotece znajdują się makra z dostępnymi komendami dla wyświetlacza.
void LcdInit(void)
Standardowa funkcja inicjująca wyświetlacz. Na jej końcu znajdują się funkcje wysyłające komendy takie jak wyłączenie kursora, przesuwanie tekstu itp.
void LcdPrint(const char *s)
Funkcja odpowiadająca za wyświetlenie stringu na LCD.
void LcdPrintChar(char ch)
Ta wyświetla tylko pojedynczy znak.
void LcdGoToXY(uint8_t x, uint8_t y)
Funkcja która przesuwa kursor do dowolnego miejsca na wyświetlaczu. Wiersz pierwszy to y=0;
void LcdPrintXY(uint8_t x, uint8_t y, char *s)
Funkcja wyświetla string w wybranych współrzędnych. Zasady obowiązują tak jak wyżej.
Gdyby ktoś miał problem ze znalezieniem poprawnych plików startowych to je zamieszczam:
LPC17xx.ld,
Makefile,
startup_LPC17xx.c,
startup_LPC17xx.d.
Na koniec załączam jeszcze bibliotekę dla AVRów
lcd2x16.c i
lcd2x16.h.