Jedna linia SW przycisku jest dołączona do napięcia zasilania (pin +3,3V złącza Con2 płytki ZL31ARM) druga linia SW jest dołączona do linii PA3 mikrokontrolera (pin PA3 złącza Con2). Naciśnięcie przycisku obsługiwane jest przez przerwanie EXTI konfigurowane w funkcji ConfigEXTI, nie się zagłębiał w temat obsługi przerwań mikrokontrolera STM32 ponieważ jest mnóstwo materiałów na ten temat.
Linie interfejsu SPI przycisku są dołączone do interfejsu SPI1 mikrokontrolera, dodatkowo linia PA1 mikrokontrolera dołączona jest do wejścia D/C kontrolera wyświetlacza przycisku, w zależności od jej stanu dane przesyłane interfejsem SPI są traktowane jako: instrukcje dla kontrolera (dla D/C = 0) lub dane do wyświetlenia (dla D/C = 1). Przebieg czasowy ramki danych SPI przestawiono na rysunku 3.
Rys. 3. Ramka danych wysyłanych do kontrolera wyświetlacza ISC15ANP4
Przed użyciem przycisku należy skonfigurować sterownik wyświetlacza, zadanie to wykonywane jest w funkcji ISC15ANP4_Init. Dokumentacja nie opisuje funkcji poszczególnych instrukcji, zawiera tylko dwa zestawy instrukcji konfiguracyjnych, z czego jedna zapewnia wyższą jasność obrazu i 15000 godzin działania, druga – niższą jasność i 30000 godzin działania, ja wykorzystałem tę pierwszą:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
DC_Low(); SS_Low(); SPI_Transmit(0x81); SPI_Transmit(0x19); // Contras for color A SS_High(); SS_Low(); SPI_Transmit(0x82); SPI_Transmit(0x14); // Contras for color B SS_High(); SS_Low(); SPI_Transmit(0x83); SPI_Transmit(0x24); // Contras for color C SS_High(); SS_Low(); SPI_Transmit(0x87); SPI_Transmit(0x0F); // Master current control SS_High(); SS_Low(); SPI_Transmit(0xA0); SPI_Transmit(0x70); // Remap & color depth setting SS_High(); SS_Low(); SPI_Transmit(0xA1); SPI_Transmit(0x00); // Set display start line SS_High(); SS_Low(); SPI_Transmit(0xA2); SPI_Transmit(0x10); // Set display offset SS_High(); SS_Low(); SPI_Transmit(0xA4); // Normal display SS_High(); SS_Low(); SPI_Transmit(0xA8); SPI_Transmit(0x2F); // Multiplex ratio SS_High(); SS_Low(); SPI_Transmit(0xAB); SPI_Transmit(0x00); SPI_Transmit(0x12); SPI_Transmit(0x0C); SPI_Transmit(0x14); SPI_Transmit(0x12); //Dim mode setting for color A, B &C SS_High(); SS_Low(); SPI_Transmit(0xAD); SPI_Transmit(0x8E); // Master configuration SS_High(); SS_Low(); SPI_Transmit(0xB0); SPI_Transmit(0x0B); // Power save mode SS_High(); SS_Low(); SPI_Transmit(0xB1); SPI_Transmit(0x44); // Phase 1 and 2 period adjustment SS_High(); SS_Low(); SPI_Transmit(0xB3); SPI_Transmit(0xA0); // Display clock divider/ oscillator frequency SS_High(); SS_Low(); SPI_Transmit(0xB9); // Enable linear gray scale SS_High(); SS_Low(); SPI_Transmit(0xBB); SPI_Transmit(0x12); // Pre charge level SS_High(); SS_Low(); SPI_Transmit(0xBE); SPI_Transmit(0x28); // Set Vcomh SS_High(); SS_Low(); SPI_Transmit(0xAF); // Display on in normal mode SS_High(); DC_High(); |