PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variable im Array



th3r1pp3r
20.03.2013, 10:32
Hallo!
Ich möchte gern mein array durch eine for schleife ansprechen und will dies durch eine variable im array machen.
Ich bin ein Basic neuling und weiß nicht wie ich dieses problem in basic lösen kann.
Vielen Dank für eure Hilfe.
Hier mein Programmcode:



$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100


Config Porta = Output
Config Portc = Output
Config Portd = Output

Const Ari = 3


Dim Ebene(3) As Byte
Dim Spalte(3) As Byte
Dim Zeile(ari) As Byte


Ebene1 Alias Pinc.0 'Port PC.0 als oberste Ebene deklarieren (Schalten von FET's)
Ebene2 Alias Pinc.1 'Port PC.1 als mittlere Ebene deklarieren (Schalten von FET's)
Ebene3 Alias Pinc.2 'Port PC.2 als unterste Ebene deklarieren (Schalten von FET's)

Spalte1 Alias Pind.0 'Port PD.0 zum Schalten der kompletten Spalte 1 (LED 1,2,3)
Spalte2 Alias Pind.1 'Port PD.1 zum Schalten der kompletten Spalte 2 (LED 4,5,6)
Spalte3 Alias Pind.2 'Port PD.2 zum Schalten der kompletten Spalte 3 (LED 7,8,9)

Zeile1 Alias Pina.0 'Port PA.0 zum Schalten der IC'S(IC8) zur Ansteuerung einzelner LED'S (Zeile_1 & Spalte_1 = LED1=AN)
Zeile2 Alias Pina.2 'Port PA.2 zum Schalten der IC'S(IC4) zur Ansteuerung einzelner LED'S (Zeile_2 & Spalte_1 = LED4=AN)
Zeile3 Alias Pina.1 'Port PA.1 zum Schalten der IC'S(IC3) zur Ansteuerung einzelner LED'S (Zeile_3 & Spalte_1 = LED7=AN)

Dim Letzteebene As Integer
Dim Zaehler As Integer
Dim Ebenenauswahl As Integer
Dim Arsz As Integer
Dim Ar As Byte

Ebene(1) = Ebene1
Ebene(2) = Ebene2
Ebene(3) = Ebene3

Spalte(1) = Spalte1
Spalte(2) = Spalte2
Spalte(3) = Spalte3

Zeile(1) = Zeile1
Zeile(2) = Zeile2
Zeile(3) = Zeile3


Letzteebene = 0
Zaehler = 0




Ebenenauswahl = 1





Do

Ar = 0


If Ebenenauswahl = 1 Then
Ebene(1) = 1
For Arsz = 1 To 3
Ar = Ar + 1
Zeile(ari) = 1
Spalte(1) = 1

If Zeile(3) = 1 Then
Arsz = 1
Spalte(1) = 0
Spalte(2) = 1
Letzteebene = 1
End If

If Letzteebene = 1 Then
Arsz = 1
Spalte(2) = 0
Spalte(3) = 1
Letzteebene = 0
End If

Next
End If

Ar = 1
Ebenenauswahl = Ebenenauswahl + 1



If Ebenenauswahl = 2 Then
Ebene(2) = 1
For Arsz = 1 To 3
Zeile(ari) = 1
Spalte(1) = 1
Ar = Ar + 1

If Zeile(3) = 1 Then
Arsz = 1
Spalte(1) = 0
Spalte(2) = 1
Letzteebene = 1
End If

If Letzteebene = 1 Then
Arsz = 1
Spalte(2) = 0
Spalte(3) = 1
Letzteebene = 0
End If
Next
End If

Arsz = 1
Ebenenauswahl = Ebenenauswahl + 1



If Ebenenauswahl = 3 Then
Ebene(3) = 1
For Arsz = 1 To 3
Zeile(ari) = 1
Spalte(1) = 1
Ar = Ar + 1

If Zeile(3) = 1 Then
Arsz = 1
Spalte(1) = 0
Spalte(2) = 1
Letzteebene = 1
End If

If Letzteebene = 1 Then
Arsz = 1
Spalte(2) = 0
Spalte(3) = 1
Letzteebene = 0
End If
Next
End If

Arsz = 1
Ebenenauswahl = 1


Loop

End 'end program

Searcher
20.03.2013, 17:57
Ich möchte gern mein array durch eine for schleife ansprechen und will dies durch eine variable im array machen.

Folgendes kleine Programm füllt das array "A" mit den Zahlen 1 bis 10 durch die Laufvariable "i"



'IDE: BASCOM Demo Version 2.0.7.5
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 34
$crystal = 16000000

Dim A(10) As Byte
Dim i As Byte

For i = 1 To 10
A(i) = i
Next

End

Wenn Du vor Deinem Code [ CODE] und nach Deinem Code [ /CODE], also die Code Tags benutzt (ohne die Leerzeichen nach der nach rechts geöffneten eckigen Klammer), wird es angenehmer zu lesen und Einrückungen bleiben erhalten. In der "Erweitert" oder "Vorschau" bei Threaderstellung oder Antwort kann man dafür das Nummernzeichen "#" verwenden, daß dann erreichbar wird ;)

Gruß
Searcher

th3r1pp3r
21.03.2013, 07:01
Leider scheint dies nicht zu funktionieren, da Basecom A(i) als eine variable sieht und mir nie die variable i in der for-schleife hochzählt

Searcher
21.03.2013, 07:10
Hallo,
dann müstest Du genauer erklären, was Du haben möchtest.

In meinem Beispiel ist A ein Array mit 10 Elementen. i wird durch das For-Next erhöht und indiziert mit A(i) bei jedem Schleifendurchlauf ein Element in A. Welche BASCOM Version verwendest Du?

Gibt es Fehlermeldungen bei Dir oder enthalten die 10 Elemente des Arrays nicht die Nummern 1 bis 10?

Gruß
Searcher

th3r1pp3r
21.03.2013, 07:26
Guten Morgen Searcher,
ich benutze die Bascom Version 2.0.7.5 . Ich möchte bei jedem Durchgang der For-Next schleife meine variable ari in Zeile(ari) erhöhen um die nächste Zeile mit meiner Led's anzuschalten.

Vielen Dank für deine bemühungen ;)

Searcher
21.03.2013, 07:48
Sorry, vielleicht hab ich nur ein Brett vorm Kopf und verstehe Dein Programm nicht. Helfen Dir zwei ineinander verschachtelte Scheifen. Nicht getestet:


'IDE: BASCOM Demo Version 2.0.7.5
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 34
$crystal = 16000000

Dim A(10) As Byte
Dim B(10) As Byte
Dim i As Byte
Dim k As Byte

For k = 1 to 10
B(k) = k
For i = 1 To 10
A(i) = i
Next i
Next k

End
Hier wird B(1) auf 1 gesetzt. Danach werden wieder alle Elemente von A mit Zahlen von 1 bis 10 gefüllt
Dann wird B(2) auf 2 gesetzt. Danach werden die Elemente von A NEU mit den Zahlen von 1 bis 10 gefüllt
Dann (B3) .. usw.

Falls das nicht hilft: Warum nicht?

:confused:

Gruß
Searcher

th3r1pp3r
21.03.2013, 08:25
Ahhh jetzt funktioniert es! Vielen Dank!
Mir hat der ausdruck Zeile(ar) = ar gefehlt.
Nun zählt er die Zeilen nach der reihe hoch wie gewünscht.

Vielen Dank nochmal