-
hallo!
Ich habe zur Zeit dieses Programm auf dem Chip:
Code:
Declare Sub Taste1()
Declare Sub Taste2()
Declare Function Tastenabfrage() As Byte
Declare Sub Taste3()
Declare Sub Taste5()
Declare Sub Taste6()
Declare Sub Willkommen()
$regfile = "m8def.dat"
Dim Ws As Word
Dim Adc_ohne_taste As Word
$crystal = 16000000
$baud = 9600
Config Adc = Single , Prescaler = Auto
Config Pinc.0 = Input
Portc.0 = 1
Start Adc
Dim Taste As Byte
Config Pind.6 = Output
Portd.6 = 0
Dim ___lcdno As Bit
Config Lcdpin = Pin , E = Portc.3 , Rs = Portc.2 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
Config Lcd = 16 * 4
Adc_ohne_taste = Getadc(0)
Call Willkommen
Do
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Call Taste1
Case 2
Call Taste2
Case 3
Call Taste3
End Select
End If
Loop
End
Function Tastenabfrage() As Byte
Tastenabfrage = 0
Ws = Getadc(0)
If Ws < Adc_ohne_taste Then
Select Case Ws
Case 330 To 370
Tastenabfrage = 1
Case 260 To 300
Tastenabfrage = 2
Case 100 To 130
Tastenabfrage = 3
End Select
End If
End Function
Sub Taste1()
Sound Portb.0 , 500 , 300
Lcd "1"
End Sub
Sub Taste2()
Sound Portb.0 , 500 , 300
Initlcd
Lcd "2"
End Sub
Sub Taste3()
Sound Portb.0 , 600 , 400
Initlcd
Lcd "3"
End Sub
Sub Taste5()
___lcdno = 0
Initlcd
Cursor Off
Cls
Home
Lcd "Taste5"
End Sub
Sub Willkommen()
___lcdno = 0
Initlcd
Cursor Off
Cls
Locate 1 , 1
Lcd "Zahl eingeben:"
Lowerline
Cursor Blink
End Sub
Sub Taste6()
Initlcd
Cursor Off
Cls
Locate 1 , 1
Lcd "Taste6"
End Sub
Nun steht in der ersten Zeile auf dem LCD "Zahl eingeben" dann wird der blinkende Cursor in die Zeile darunter gesetzt.
Wenn ich jetzt die Taster 1-3 drücke klappt ja alles bis auf das, dass er nach x belibiegen eingegebenen Zeichen aus der oberen einen Teil der Zeichen löscht und in eine andere Zeile setzt.
Was ich möchte ist, dass ich erstmal mit den Tastern eine durchgehende,fortlaufende Zahlenreihe eingeben kann.
Gibt es da einen best. Befehl?
was ist daran falsch?
mfg
Timo
Danke
-
Hallo,
Du machst ziemlich oft Initlcd, reicht das nicht einmal am Anfang ?
Da wird doch immer das LCD zurückgesetzt, und vergisst was es bis jetzt angezeigt hat :-k
-
hi!
Wenn ich das initlcd und das ___lcdno=0 an den Anfang schreibe, dann sind nach einem Tastendruck auf dem ganzen LCD nur 2en z.B zu sehen.
Wenn ich es in die Sub's mit reinschreibe, dann löscht er Teilstücke des Textes.
Wo würdest du es genau reinschreiben?
Timo
-
@ timo1105
Vielleicht hilft dir das hier:
https://www.roboternetz.de/phpBB2/ze...light=tastatur
Das Prinzip ist das selbe, in diesem Fall ist es eben eine Tastatur. Dies kann aber auch ein Taster, Schalter o.ä. sein :-)
Gruß
Stefan
-
hi
dankeschön für den tip! schau ich mir morgen genauer an, wenn ich zeit habe.
Beim ersten überflug über dein Programm ist mir aufgefallen, das die Werte "case 400 to 440" bei dir fehlen?! Also die Werte die beim ADC ankommen,entstanden durch die versch. Widerstände.
Was bedeutet erst,zweit, drittbelegung?
heißt das, dass z.B die Taste 1 mehrere belegungen hat wenn man sie mehrmals drückt?
Danke
Timo
-
Wie im Thread geschrieben, speichere ich alle Werte am Anfang und kann mit einer best. Taste oder Schalter einfach die print-Befehle ändern.
Sicher kann man das Programm noch erheblich verbessern und komprimieren, für den Anfang aber funktionierts :-)
Gruß
Stefan