STM32Butterfly2: obsługa LCD z telefonu Nokia 6100/6610
Natomiast listing programu głównego przedstawia się następująco.
int main(void)
{
//JOY pin configuration input pullup VCC
RCC->APB2ENR |= JOY_PORT_APB2;
io_config_ext(JOY_PORT, JOY_BITS, GPIO_MODE_INPUT, GPIO_CNF_IN_PULLUP );
io_set_clr_mask( JOY_PORT, JOY_BITS, JOY_BITS );
//Initialize system timer
time_init();
//Initialize the color display
nlcd_init();
//Clear screen
nlcd_clear_screen();
//Draw initial lines
draw_hline(1,HLINE_COLOR);
draw_vline(1,VLINE_COLOR);
for(int x=1,y=1,px=1,py=1;;)
{
//Read joy state
int jstate1 = joy_keys();
wait_ms(KBD_DEBOUNCE_TIME);
int jstate2 = joy_keys();
if(jstate1 && jstate1==jstate2)
{
//If key pressed get position
switch(jstate1)
{
case JOY_U: if(y1) y--; break;
case JOY_L: if(x>1) x--; break;
case JOY_R: if(x
W pierwszym kroku przeprowadzana jest konfiguracja linii joysticka. Operacja ta odbywa się poprzez włączenie zegara dla portu GPIO, do którego podłączone są linii joysticka (ustawienie bitu w rejestrze RCC->APB2ENR), oraz konfiguracji linii jako wejścia PULLUP. Za konfigurację linii jako wejścia odpowiada funkcja io_config_ext, jako pierwszy parametr przyjmuje ona nazwę portu, drugi parametr określa konfigurowane linie, trzeci parametr czy linie są wejściowe czy wyjściowe, ostatni parametr określa tryb działania. Niezbędnym w konfiguracji linii joysticka jest podciągnięcie ich do potencjału dodatniego, które realizowane jest przez funkcję io_set_clr_mask. Funkcja ta wymaga podania trzech parametrów, pierwszy z nich określa nazwę portu, drugi określa stan ustawianych linii (bitowa wartość ‘0’ na danej pozycji zeruje linię, bitowa wartość ‘0’ na danej pozycji ustawia w stan wysoki linię), ostatni parametr jest maską blokującą zmianę stanó1) tylko do wskazanych linii.
W kolejnym kroku realizowana jest konfiguracja licznika SysTick, za działanie to odpowiada funkcja time_init(). Działanie jej sprowadza się do określenia priorytetu przerwania pochodzącego od licznika SysTick, określeniu częstotliwości występowania przerwania oraz włączenia licznika.
Następnie, poprzez wywołanie funkcji , przeprowadzana jest inicjalizacja wyświetlacza modułu KAmodTFT2. Listing funkcji został przedstawiony poniżej.
void nlcd_init(void)
{
int i;
// Hardware reset
RCC->APB2ENR |= SPI_APB2ENR_PORT | CTRL_APB2ENR_PORT;
io_config(CTRL_PORT,SCE_BIT,GPIO_MODE_50MHZ,GPIO_CNF_GPIO_PP);
io_config(CTRL_PORT,RES_BIT,GPIO_MODE_50MHZ,GPIO_CNF_GPIO_PP);
io_config(SPI_PORT,MOSI_BIT,GPIO_MODE_50MHZ,GPIO_CNF_GPIO_PP);
io_config(SPI_PORT,SCK_BIT,GPIO_MODE_50MHZ,GPIO_CNF_GPIO_PP);
sce(1);
sck(1);
mosi(1);
res(0);
for(i = 0; i < 80000; i++) nop();
res(1);
for(i = 0; i < 80000; i++) nop();
// Sleep out
transfer_spi_command(SLEEPOUT);
// Inversion on (command 0x20)
transfer_spi_command(INVOFF);
// Color Interface Pixel Format (command 0x3A)
transfer_spi_command(COLMOD);
transfer_spi_data(0x03); // 0x03 = 12 bits-per-pixel
// Memory access controler (command 0x36)
transfer_spi_command(MADCTL);
transfer_spi_data(0x50);
for(i = 0; i < 2000; i++) nop();
// Display On (command 0x29)
transfer_spi_command(DISPON);
}
W pierwszym kroku działania funkcji włączany jest zegar dla portów obsługującego linie transmisji oraz przeprowadzenie konfiguracji używanych linii przy pomocy funkcji io_config. Po przeprowadzeniu konfiguracji następuje ustawienie odpowiednich stanów na liniach SCE, SCK i MOSI. Wykonywany jest także reset wyświetlacza poprzez początkowe ustawienie linii RES w stan niski, a następnie przełączenie, po wykonaniu opóźnienia, w stan wysoki. Opóźnienie zostało zrealizowane poprzez wykonanie pętli for określoną liczbę razy w ramach, której wywoływana jest operacja nop().
Następnym działaniem jest wysłanie do wyświetlacza komend, które w pierwszej kolejności wybudzają go, wyłączają inwersje, ustawienie 12-bitowego formatu określającego kolor danego piksela (4 bity na każdy z kolorów) oraz określenie żądanego dostępu do pamięci wyświetlacza (parametr ten określa odbicie obrazu w poziomie i w pionie oraz sposób inkrementowania kolejnych komórek). Po wysłaniu powyższych poleceń następuje zatrzymanie programu na pewien czas, po którym wysyłana jest komenda włączająca wyświetlanie obrazu na wyświetlaczu.

Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć
Fotorezystor, czyli czujnik światła dwojakiego działania. Przykład innowacji w automatyce i elektronice możliwej dzięki technologii fotooporników 



