Hallo,
Ich habe hier ein 7x3 Tasten-Matrix die ich gerne über meinen AtMega
auswerten lassen will.
Das Prinzip der Tasten-Matrix ist mir klar, die 7 Zeilen mit je 3 Tasten
sind über 10K an VCC verbunden und sitzen an PC0-7
Die 3 Spalten sitzen an PB0 - PB2 und ziehen jeweils den Pegel auf "+5V"
wenn eine der Tasten in der Spalte gedrückt wird.
Wie kann ich denn nun die Tastenmatrix bequem in C auswerten?
Hab bereits mit dem Code schon angefangen, aber komm leider nicht mehr
weiter..
Soll ich mit einem Timer Arbeiten? Evtl. mit Interupts?
Danke!
1 | #include <stdlib.h>
|
2 | #include <avr/io.h>
|
3 | #include "lcd_lib.h"
|
4 |
|
5 | #define KEY_COL0 PORTB2
|
6 | #define KEY_COL1 PORTB1
|
7 | #define KEY_COL2 PORTB0
|
8 | #define KEY_ROW0 PORTC0
|
9 | #define KEY_ROW1 PORTC1
|
10 | #define KEY_ROW2 PORTC2
|
11 | #define KEY_ROW3 PORTC3
|
12 | #define KEY_ROW4 PORTC4
|
13 | #define KEY_ROW5 PORTC5
|
14 | #define KEY_ROW6 PORTC6
|
15 | #define KEY_ROW7 PORTC7
|
16 |
|
17 |
|
18 | void init_keypad(void)
|
19 | {
|
20 | // PC0 - 7 / Zeilen
|
21 | // PB0 - 2 / Reihen
|
22 |
|
23 | DDRC = 0xff; // PC0-7 Ausgänge
|
24 | DDRB &= ~ ( (1<<DDB0) | (1 << DDB1) | (1 << DDB2)); // PB 0 - 2 Als Eingänge setzen;
|
25 | PORTB |= (1<< PB0) | (1<< PB1) | (1<<PB2);
|
26 | }
|
Ab hier komm ich leider nicht mehr weiter!