Hallo,
Ich steh grade auf dem Schlauch, schaffe es nicht taster zu entprellen.
Nach verschiedenen eigenen Ideen die es nicht gebracht haben möchte ich
gerne dies einsetzen:
Initialisierung mit:
1 | DDRC = 0xc0; //.7=E, .6=RS, .5=SW0, .., .2=SW3
|
2 | PORTC |= 0x3c; //Pull-Pu's für taster Aktivieren
|
#define TASTERPORT PINC
#define TASTERBIT0 PINC5
#define TASTERBIT1 PINC4
#define TASTERBIT2 PINC3
#define TASTERBIT3 PINC2
1 | char taster0(void)
|
2 | {
|
3 | static unsigned char zustand;
|
4 | char rw = 0;
|
5 |
|
6 | if(zustand == 0 && !(TASTERPORT & (1<<TASTERBIT0))) //Taster wird gedrueckt (steigende Flanke)
|
7 | {
|
8 | zustand = 1;
|
9 | rw = 1;
|
10 | }
|
11 | else if (zustand == 1 && !(TASTERPORT & (1<<TASTERBIT0))) //Taster wird gehalten
|
12 | {
|
13 | zustand = 2;
|
14 | rw = 0;
|
15 | }
|
16 | else if (zustand == 2 && (TASTERPORT & (1<<TASTERBIT0))) //Taster wird losgelassen (fallende Flanke)
|
17 | {
|
18 | zustand = 3;
|
19 | rw = 0;
|
20 | }
|
21 | else if (zustand == 3 && (TASTERPORT & (1<<TASTERBIT0))) //Taster losgelassen
|
22 | {
|
23 | zustand = 0;
|
24 | rw = 0;
|
25 | }
|
26 | return rw;
|
27 | }
|
Der Aufruf sieht volgendermassen aus:
1 | if (taster0()) //SW 0 gedrückt
|
2 | {
|
3 | if(zeile2[14]=='H')
|
4 | {
|
5 | zeile2[14]='J';
|
6 | }
|
7 | else
|
8 | {
|
9 | zeile2[14]='H';
|
10 | }
|
11 | }
|
Leider ändert sich das J/H eher nur zufällig.
Ich sehe es so:
(1<<TASTERBIT0) --> Maskierung für Bit auf das zugegriffen werden soll.
(TASTERPORT & (1<<TASTERBIT0)) --> Wenn Bit gesetzt ist.
(zustand == 0 && !(TASTERPORT & (1<<TASTERBIT0))) --> und der Zustand
"Taster losgelassen war"
Dann:
zustand = 1;
rw = 1;
Suche eigentlich nur eine möglichst einfache möglichkeit per Software
einen Tastendruck von 4 Tastern zu erkennen.
Bin für jeden Rat dankbar.