Hier eine Library mit der man eine Tastenfeld das als X/Y-Matrix aufgebaut ist an den STM32F4 anschließen kann.
Es spielt keine Rolle wie die Anordnung der Tasten-Matrix ist (3×3, 4×3, 2×5 usw).
Es werden auch keine externen Dioden oder PullUps benötigt.
Im H-File wird die Größe der Tastatur-Matrix eingestellt (im Beispiel 3×4)
und im C-File werden die GPIO-Pins der X- und Y-Richtung zugeordnet.
Es gibt eine Funktion um die gedrückte Taste auszulesen, diese liefert als Rückgabewert “0″ falls gar keine Taste gedrückt ist. Falls eine Taste (oder mehrere) gedrückt sind, wird die Tasten-Nummer der ersten gefundenen Taste zurückgeliefert. (Im Beispiel 1 bis 12)
Zum entprellen der Tasten wird kein Timer sondern nur ein Schleifenzähler benutzt.
(dieser muss event. bei euch angepasst werden)
Hinweis : falls der Rückgabewert >0 ist auch wenn gar keine Tastatur angeschlossen ist, müssen an die Y-Leitungen externe PullUps (4k7) angebracht werden.
Bilder :
Voraussetzungen :
1 2 | Benutzte Module der CooCox-IDE : GPIO Benutzte Librarys : keine |
Funktionen :
1 2 | void UB_KeyMatrix_Init(void); // zum init der Tastatur-Matrix uint8_t UB_KeyMatrix_Scan(void); // zum auslesen der gedrueckten Taste |
Beispiel :
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 | //-------------------------------------------------------------- // File : main.c // Datum : 02.05.2014 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.4 // GCC : 4.7 2012q4 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der Key-Matrix-Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_keymatrix.h" #include "stm32_ub_led.h" int main(void) { uint8_t key_value; SystemInit(); // Quarz Einstellungen aktivieren // init der LEDs UB_Led_Init(); // init der Tastatur-Matrix UB_KeyMatrix_Init(); while(1) { // Tastatur-Matrix abfragen key_value=UB_KeyMatrix_Scan(); // LEDs je nach Tasten-Nr schalten if(key_value==1) UB_Led_On(LED_GREEN); else UB_Led_Off(LED_GREEN); if(key_value==2) UB_Led_On(LED_RED); else UB_Led_Off(LED_RED); if(key_value==3) UB_Led_On(LED_BLUE); else UB_Led_Off(LED_BLUE); if(key_value==4) UB_Led_On(LED_ORANGE); else UB_Led_Off(LED_ORANGE); } } |
Hier die Library zum Download :
Hier der komplette CooCox-Projektordner zum Download :