Abend zusammen,
entschuldigt, aber ich habe schon wieder ein Problem :(
Hardware:
Hardware: LCD an PORTB
Taster l (links) an PIND2
Taster r (rechts) an PIND3
Taster ok (OK) an PIND4
alle Taster gegen Masse (interne Pull ups)
Quartz 16 MHz
Soll-Funktion:
Es soll di Funktion []c tasterabfrage();[/c] aufgerufen werden, in
welcher jeder Taster 100 mal abgefragt wird, wenn eine bestimmte anzahl
eine "1" ergibt soll für den jeweiligen Taster eine 1 zurückgegeben
werden.
Problem:
wenn ich die taster direkt, ohne entprellung abfrage funktioniert
dies(prellt aber), so allerdings reagiert das menü (sinn des
programmabschnittes) nicht.
1 | ...
|
2 |
|
3 | #define taster_r (!(PIND & (1<<PIND3)))
|
4 | #define taster_l (!(PIND & (1<<PIND2)))
|
5 | #define taster_ok (!(PIND & (1<<PIND4)))
|
6 |
|
7 | ...
|
8 |
|
9 | volatile unsigned int tast_l = 0, tast_r = 0, tast_ok = 0;
|
10 |
|
11 | ...
|
12 |
|
13 | kont2 = 0;
|
14 |
|
15 | tasterabfrage();
|
16 |
|
17 | while (kont2 == 0) //so l
|
18 | {
|
19 | if (tast_r == 1) //rechts
|
20 | {
|
21 | men_punkt ++;
|
22 | kont2 ++;
|
23 | }
|
24 | else if (tast_l == 1) //links
|
25 | {
|
26 | men_punkt --;
|
27 | kont2 ++;
|
28 | }
|
29 | else if (tast_ok == 1) //OK
|
30 | {
|
31 | kont ++;
|
32 | kont2 ++;
|
33 | }
|
34 | }
|
35 | if (men_punkt == 0)
|
36 | {
|
37 | men_punkt = 5;
|
38 | }
|
39 | else if (men_punkt == 7)
|
40 | {
|
41 | men_punkt = 1;
|
42 | }
|
43 | }
|
44 |
|
45 | ...
|
46 |
|
47 | void tasterabfrage(void)
|
48 | {
|
49 | unsigned int zaehler_l = 0, zaehler_r = 0, zaehler_ok = 0;
|
50 |
|
51 | for (unsigned int durchg = 0; durchg < 100; durchg ++)
|
52 | {
|
53 | if (taster_l)
|
54 | {
|
55 | zaehler_l ++;
|
56 | }
|
57 | if (taster_r)
|
58 | {
|
59 | zaehler_r ++;
|
60 | }
|
61 | if (taster_ok)
|
62 | {
|
63 | zaehler_ok ++;
|
64 | }
|
65 | }
|
66 |
|
67 | if (zaehler_l >= 65)
|
68 | {
|
69 | tast_l = 1;
|
70 | }
|
71 | else
|
72 | {
|
73 | tast_l = 0;
|
74 | }
|
75 | if (zaehler_r >= 65)
|
76 | {
|
77 | tast_r = 1;
|
78 | }
|
79 | else
|
80 | {
|
81 | tast_r = 0;
|
82 | }
|
83 | if (zaehler_ok >= 65)
|
84 | {
|
85 | tast_ok = 1;
|
86 | }
|
87 | else
|
88 | {
|
89 | tast_ok = 0;
|
90 | }
|
91 | }
|
92 |
|
93 | ...
|
94 |
|
95 | int main(void)
|
96 | {
|
97 | DDRD = 0xE0;
|
98 | DDRC = 0x30;
|
99 | PORTD = 0x1C;
|
100 | lcd_init();
|
101 | set_cursor(0,0);
|
102 | lcd_string (" Guten Tag");
|
103 | set_cursor(0,2);
|
104 | lcd_string (" XXXXXXXXX");
|
105 | long_delay(1000);
|
106 | while(1)
|
107 | {
|
108 | menue();
|
109 | }
|
110 | }
|
kann mir vll jemand helfen?