Da gibt es mehrere Möglichkeiten.
Die erste Frage lautet:
Warum ist der Code überhaupt in einem Header Include File? Eigentlich
gehört er da gar nicht hin.
Die zweite Frage lautet:
Was macht denn eigentlich ein #include?
Er ersetzt die Zeile mit dem #include durch den Inhalt der Datei.
Wenn du also keinen include hättest und du Variablen quer über mehrere
Funtkionen benutzen willst, wie sieht das dann aus. Angenommen du
hättest
1 | void foo()
|
2 | {
|
3 | key = 5;
|
4 | }
|
5 |
|
6 | int main()
|
7 | {
|
8 | key = 8;
|
9 | foo();
|
10 | }
|
und in beiden Funktionen soll das immer die gleiche Variable 'key' sein.
Wo muss die dann logischerweise stehen?
Mit dem Include machst du nichts anders, als Teile des Textes in eine
andere Datei 'auszulagern'. Aber vor dem Compilieren werden diese
Einzelteile wieder zum kompletten Programmtext zusamenngesetzt, ehe den
dann der Compiler zu sehen kriegt.
Und die dritte Frage lautet: Warum eigentlich eine globale Variable?
Warum übergibt main nicht einfach den Wert einer ihm genehmen Variablen
und kriegt den modifizierten Wert zurück? Genau zu diesem Zweck gibt es
Funktionsargumente und Return-Werte.
1 | uint8_t sensekey( uint8_t value ){
|
2 | if ( (get_key_press(1<<S1)) ) {
|
3 | value = value+1;
|
4 | if (value>9){
|
5 | value = 1;
|
6 | }
|
7 | }
|
8 | if ( (get_key_press(1<<S2)) ) {
|
9 | value = value-1;
|
10 | if (value == 0){
|
11 | value = 9;
|
12 | }
|
13 | }
|
14 |
|
15 | return value;
|
16 | }
|
1 | void lcd_puti( uint8_t value )
|
2 | {
|
3 | char puffer[16];
|
4 |
|
5 | itoa( value, puffer, 10);
|
6 | lcd_set_cursor(0, LINE0);
|
7 | lcd_puts(small_font, puffer);
|
8 | }
|
9 |
|
10 | ....
|
11 |
|
12 | int main()
|
13 | {
|
14 | uint8_t Auswahl = 1;
|
15 |
|
16 | ...
|
17 |
|
18 | while(1){
|
19 | Auswahl = sensekey( Auswahl );
|
20 |
|
21 | lcd_puti( Auswahl );
|
22 | }
|
23 | }
|
Du veschenkst ja 80% deiner Möglichkeiten, wenn du deine
Programmiersprache nicht zumindest in den Grundzügen und wesentlichen
Möglichkeiten kennst.