PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Text per Tasterdruck ändern



Strahleman
12.04.2006, 20:35
Ich experimentiere gerade mit meinen LCD Add-On rum und habe es auch schon geschafft Text anzuzeigen. Nun probiere ich den angezeigten Text per Tasterdruck zu verändern und zwar so, dass er auch auf dem LCD lesbar bleibt, wenn man den Taster loslässt.

Mein Versuch:
Eine LED an PinC.0 ein Taster an PinC.1. Die LED leuchtet durchgehend, das LCD zeig "LED ein" an und wenn man auf den Taster drückt geht die LED aus. Dementsprechend zeigt das LCD "LED aus" an. Lässt man den Taster nun los, geht die LED wieder an, doch sie soll aus bleiben.

Ich habe es schon mit Debounce versucht, das funktioniert mit der LED aus soweit, doch wie kann ich da den LCD Text einbinden?! Oder gibt es dafür extra Befehle?!

x-ryder
13.04.2006, 17:19
hä? was hast du gemacht? schick mal bitte deinen quellcode ^^

Martin

Strahleman
13.04.2006, 17:34
'Deklarationen
$regfile = "m8def.dat"
$crystal = 8000000

Ddrc = &B00000010
Portc = &B00000001

'LCD
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcdbus = 4

'Programm
Do
If Pinc.0 = 1 Then
Portc.1 = 1

Cls
Locate 1 , 1
Lcd "LED ein"

Else
Portc.1 = 0

Cls
Locate 1 , 1
Lcd "LED aus"

End If
Loop
End

Der Code geht auch soweit. Nur ich möchte, dass es so wie mit Debounce ist. Taster einmal drücken: LED aus und LCD sagt "LED aus". Taster wieder drücken LED an und LCD sagt "LED an".
Wenn ich das in Debounce umwandle, funktioniert das mit der LED auch wunderbar, nur die LCD Ausgabe stimmt nicht mehr. Am Anfang ist sie noch richtig, also "LED ein" und wechselt beim ersten Mal Taster drücken auch auf "LED aus" nur bleibt sie dann immer so und schaltet nicht mehr auf "LED ein" um, wenn die LED per Taster wieder eingeschaltet wird.

x-ryder
13.04.2006, 17:41
so, dass sollte es sein, brauchst dann zwei debs:


'Deklarationen
$regfile = "m8def.dat"
$crystal = 8000000

Ddrc = &B00000010
Portc = &B00000001

'LCD
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcdbus = 4

'Programm
Do
Debounce Pinc.0 , 1 , Led_ein
Debounce Pinc.0 , 0 , Led_aus
Loop
End

'Subroutinen
Led_ein:
Portc.1 = 1

Cls
Locate 1 , 1
Lcd "LED ein"
Return

Led_aus:
Portc.1 = 0

Cls
Locate 1 , 1
Lcd "LED aus"
Return

Martin

BlackDevil
13.04.2006, 18:12
Kleine Frage
sind LCD Texte so einfach?
Lcd "Text"
?

wow ...

Hanni
13.04.2006, 22:39
Naja ... Basecom halt ...

Ich will allerdings nicht den Code sehen den der Compiler daraus erstellt ...

x-ryder
14.04.2006, 07:48
och das mit dem code hält sich noch stark in grenzen ^^

Strahleman
14.04.2006, 12:29
Hm der Code funktioniert leider auch nur so, wie meiner. Die LED leuchtet und das LCD zeigt an "LED ein" und wenn man den Taster betätigt geht die LED so lange aus, wie man den Taster gedrückt hält. Lässt man ihn los, so geh die LED wieder an.

Ich würde aber gerne haben, dass die LED aus bleibt und erst beim nächsten Tasterdruck wieder angeht und dazu eben das LCD die korrekten Daten ausgibt.

x-ryder
14.04.2006, 12:31
achsooooo, na dann lass mich nochmal dran, iss gleich wieder fertig ^^

x-ryder
14.04.2006, 12:37
'Deklarationen
$regfile = "m8def.dat"
$crystal = 8000000

Ddrc = &B00000010
Portc = &B00000001

'LCD
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcdbus = 4
Dim Led As Bit

'Programm
Do
Debounce Pinc.0 , 1 , Flag
If Led = 1 Then Gosub Led_ein
If Led = 0 Then Gosub Led_aus
Loop
End

'Subroutinen
Led_ein:
Portc.1 = 1

Cls
Locate 1 , 1
Lcd "LED ein"
Return

Led_aus:
Portc.1 = 0

Cls
Locate 1 , 1
Lcd "LED aus"
Return

Flag:
Toggle Led
Return

Strahleman
14.04.2006, 18:01
Wenn ich den Code so benutze, kommen auf meinem LCD komische Zeichen und die LED geht weder an noch aus.

Stromi
14.04.2006, 19:40
Bei Debounce fehlt die Sub-Erklärung und das Display muss nur einmal überhaupt gecleart werden, sonst flackert es. Wird ja doch an die gleiche Stelle geschrieben. Sonst läuft es.

Debounce Pinc.0 , 1 , Flag , Sub

Strahleman
14.04.2006, 19:57
Ja, so geht es. Dankeschön ;)

Strahleman
15.04.2006, 18:46
Noch eine kleine Frage: ist es möglich, eine Zeile des LCDs zu invertieren? Also die Segmente zu schwärzen und die Zeichen grün unterlegen? Wollte ein Menü machen, in dem man mehrere Punkte auswählen kann und das Invertrieren wäre praktisch um den momentan ausgewählten Command hervorzuheben.

x-ryder
15.04.2006, 19:17
nope, das geht nicht, das musste mit nem > oder so machen oder () oder so

Martin

Strahleman
15.04.2006, 19:23
Oki, dann nehm ich einfach nen Pfeil ;)

x-ryder
15.04.2006, 19:25
was du natürlich machen kannst fällt mir grad ein, du kannst zumindest nen char selber definen und da dann nen pfeil basteln oder sogar aus mehreren ne animation oder sowas ^^

ansonsten kauf dir nen glcd, die können alles, und sind auch gar nich mehr so teuer ^^

Martin

Strahleman
15.04.2006, 20:50
Hm ich habe eher an ein 4*20 Zeichen Display gedacht, da mir die vier Zeilen ausreichen (da ich nur 3 Kommandos für die Steuerung habe).

Aber noch eine Frage: wie könnte man es realisieren, dass der Pfeil zwischen den drei Auswahlmöglichkeiten hin und her switcht?
Ich würde gerne die drei Kommandos auf dem LCD haben, die dann über einen Taster nacheinander angewählt werden können. Geht das auch noch mit Debounce oder muss ich da einen anderen Befehl für verwenden?

So habe ich mir das vorgestellt:

-> Kommando 1
Kommando 2
Kommando 3

Kommando 1
-> Kommando 2
Kommando 3

Kommando 1
Kommando 2
-> Kommando 3

x-ryder
15.04.2006, 20:55
geht genauso mit debounce, musste immer hochzählen, wenner taster gedrückt wurde, und wenn die zahl größer als 3 wird, dann auf 1 zurücksetzen.

und dann fragste im programm die zahl ab, wo der pfeil nur gezeichnet werden soll, und zeigstn dort an.

Martin

Strahleman
15.04.2006, 21:48
Habe nun etwas rumgespielt und auch das Programm zu meiner Zufriedenheit hinbekommen. In meinem LCD flackert es leider ein bisschen (nicht schlimm, nur ein Schönheitsfehler).
Da ich aber noch Anfänger in Bascom bin und dies eigentlich mein erstes echts Projekt ist, würde ich gern wissen, ob man den Code vielleicht irgendwo noch vereinfachen könnte (ausserdem bin ich echt stolz, dass ich das [fast] ganz alleine geschafft habe und will mein Ergebnis präsentieren :cheesy: )




'Deklarationen
$regfile = "m8def.dat"
$crystal = 8000000

Ddrc = &B00001100
Portc = &B00000011

'LCD
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcdbus = 4
Dim Command As Bit
Dim Led1 As Bit
Dim Led1_sub As Bit
Dim Led2 As Bit
Dim Led2_sub As Bit

'Programm
Cls
Do
Locate 1 , 1
Lcd " Led1"
Locate 2 , 1
Lcd " Led2"

Debounce Pinc.0 , 1 , Flag , Sub
If Command = 0 Then Gosub Led1
If Command = 1 Then Gosub Led2

Loop
End

'Subroutinen
Led1:
Debounce Pinc.1 , 1 , Led1_sub , Sub
Locate 1 , 1
Lcd "-> Led1"

Return

Led1_sub:
If Portc.2 = 1 Then
Portc.2 = 0
Locate 1 , 9
Lcd "(aus)"
Else
Portc.2 = 1
Locate 1 , 9
Lcd "(an)"
End If
Return

Led2:
Debounce Pinc.1 , 1 , Led2_sub , Sub
Locate 2 , 1
Lcd "-> Led2"

Return

Led2_sub:
If Portc.3 = 1 Then
Portc.3 = 0
Locate 2 , 9
Lcd "(aus)"
Else
Portc.3 = 1
Locate 2 , 9
Lcd "(an)"
End If
Return

Flag:
Toggle Command
Return