PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Displaymenü



fofi1
21.07.2009, 16:08
Hi,

hab ein kleines Problem:

Ich will ein Displaymenü für eine Zündbox erstellen. Im Displaymenü kann man den kanal und die dazugehörige Zeit einstellen.

Warum geht aber eine If Bedingung in einer Case Bedingung nicht?

Ich hab mal einen Ausschnitt mit Kanal A+B angehängt.

Bin echt am verzweifeln :-k .

for_ro
21.07.2009, 17:21
Das hat nichts mit der Case Anweisung zu tun, sondern mit der falschen Syntax der IFs.
Hier fehlt ein Leerzeichen
If Pinb.3 = 1then
If Pinb.3 = 1 Then

Hier fehlt das then
If Pinb.2 = 1
If Pinb.2 = 1 Then

Gruß

Rolf

fofi1
21.07.2009, 18:14
Hi,
Danke erst einmal. Hab jetzt alles verbessert, es gibt aber trotzdem noch Fehler:


Cls
Locate 1 , 1
Lcd "Zündkanal" Menuewert
Locate 2 , 1
Lcd "Zündabstand" A


Hier zeigt er Numeric Parameter expected an. Muss ich die Variablen anders anzeigen lassen?
Es sollte z.b. am Ende dastehen:
Zündkanal2
Zündabstand27

Dann findet er noch in Line 0 ein If then expected und ein End Select expected. Hab aber am Ende der Case-Bedingung End Select hingeschrieben.

Mfg,
Flo[/code]

for_ro
21.07.2009, 19:02
Hi,
Lcd "Zündkanal" Menuewert
Müsste heißen:
Lcd "Zündkanal"; Menuewert

Lies dir mal die Bascom Hilfe genauer durch. Sonst fragst du noch wegen jeden Befehls.

Dann findet er noch in Line 0 ein If then expected und ein End Select expected. Hab aber am Ende der Case-Bedingung End Select hingeschrieben.

Dies ist normalerweise ein Hinweis auf einen fehlenden If oder Select Case Befehl.

Gruß

Rolf

fofi1
21.07.2009, 19:42
Hi,

das mit dem ; hab ich in der Bascom hilfe nicht gefunden. Danke deswegen.
Edit: Jetzt zeigt er No more space for bit[LCD_No] und [syntax error token='{] an. Werd daraus ned schlau. Hier noch der verbesserte Prog Text:



Mfg,
Flo

$regfile = "m8def.dat"
$crystal = 1000000

Config Pinb.5 = Input 'Cursor Up
Config Pinb.4 = Input 'Cursor Down
Config Pinb.3 = Input 'Vergrößern der zeit
Config Pinb.2 = Input 'Verkleinern der Zeit

Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer
Dim E As Integer
Dim F As Integer
Dim G As Integer
Dim H As Integer
Dim I As Integer
Dim J As Integer
Dim K As Integer
Dim L As Integer
Dim M As Integer
Dim N As Integer
Dim O As Integer
Dim P As Integer
Dim R As Integer
Dim S As Integer
Dim T As Integer

Dim Menuewert As Integer
Menuewert = 0

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , E2 = Portc.6 , Rs = Portc.4

Do

If Pinb.5 = 1 Then
Menuewert = Menuewert + 1
End If

If Pinb.4 = 1 Then
Menuewert = Menuewert - 1
End If

Select Case Menuewert

Case 1
If Pinb.3 = 1 Then
A = A + 1
End If
If Pinb.2 = 1 Then
A = A - 1
End If
Cls
Locate 1 , 1
Lcd "Zündkanal" ; Menuewert
Locate 2 , 1
Lcd "Zündabstand" ; A

Case 2
If Pinb.3 = 1 Then
B = B + 1
End If
If Pinb.2 = 1 Then
B = B - 1
End If
Cls
Locate 1 , 1
Lcd "Zündkanal" ; Menuewert
Locate 2 , 1
Lcd "Zündabstand" ; B

End Select 'Das geht dann die Buchstaben bis Q durch
Loop
End

for_ro
21.07.2009, 20:35
Füge mal dies noch oben bei den DIMs hinzu:
Dim ___lcdno As Byte

Gruß

Rolf

Bammel
21.07.2009, 20:57
statt "Menuewert = Menuewert + 1"
kannst du auhc "incr Menuewert" schreiben
fürs subtraieren gibts auhcnoch ein befehle den weiß ich grad leider net

fofi1
21.07.2009, 21:27
Hi,

danke jetzt funktioniert alles. @Bammel: du meinst increase und decrease, oder?

Papsi
22.07.2009, 12:34
Incr xxx erhöht den Wert xxx um eins
und Decr um eins weniger.

Bammel
22.07.2009, 16:32
jap genau das meine ich.. bewirkt zwar das selbe ist aber leichter zu schreiben. und vllt auch im endgültigen code schneller. aber das weis ich nicht

fofi1
22.07.2009, 16:54
Hast recht ist um einiges schneller.