Die Idee mit dem max232 war sehr gut.
Betreibe jetzt eines dieser Displays an einem Atmega 8 zu Testzwecken.
Ich lasse nur eine Softclock laufen und will sie mit 2 Tastern einstellen können.
Jetzt habe ich aber folgendes Problem:
Die Uhr läuft wunderbar, jedoch lässt sie sich nicht fehlerfrei einstellen. D.h. beim einstellen ist es immer eine Glückssache welche Zahl erscheint, weil die Zahlen viel zu schnell hochlaufen. Woran kann das liegen?
An XTAL hängt ein 32.xxx Quarz und der interne Oz ist auf 1 Mhz gesetzt.
Hier das Programm:
Code:
$regfile = "m8def.dat"
Enable Interrupts
Config Date = Mdy , Separator = /
Config Clock = Soft
Config Portc = Input
Config Graphlcd = 240 * 64 , Dataport = Portd , Controlport = Portb , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8
Cls
Cursor Off
Portc.0 = 1 'Taster1, Zeit/Datum stellen, PullUp ein, schaltet gegen Minus
Portc.3 = 1 'Taster2, Zahl hochzählen, PullUp ein, schaltet gegen Minus
Time$ = "00:00:00" 'Setzen auf Startwert
Date$ = "00/00/00" 'Setzen auf Startwert
Do
Locate 1 , 1
Lcd Time$ 'Zeige Zeit in Zeile1
If Pinc.0 = 0 Then Gosub Time 'wiederhole Anzeige bis Taster 1 zum Stellen gedrückt, springe nach Sub "Time"
Loop
End
'Stunde
Time:
Waitms 200
Cls 'lösche Zeilen
Do
Locate 1 , 1
Lcd "Set Hour:" 'Stunden setzen
Locate 2 , 1
Lcd _hour
If Pinc.3 = 0 Then 'Mit Taster 2
Incr _hour 'hochzählen
Locate 2 , 1
Lcd _hour
End If
If _hour > 23 Then 'Zählt bis Max, danach wieder ab 0
Cls
_hour = 00
End If 'solange, bis Taster 1 gedrückt
Loop Until Pinc.0 = 0
Waitms 200
'Minute
Cls
Do
Locate 1 , 1
Lcd "Set Minute:"
Locate 2 , 1
Lcd _min
If Pinc.3 = 0 Then
Incr _min
Locate 2 , 1
Lcd _min
End If
If _min > 59 Then
Cls
_min = 00
End If
Loop Until Pinc.0 = 0
Waitms 200
Cls
Return
Noch eine andere Frage:
Der Befehl "locate" setzt ja den Cursor auf eine bestimmte Zeile und Spalte. Aber es ja nicht die genaue Pixelzeile und spalte.
Z.B. möchte ich ganz oben im Display eine Linie angezeigt kriegen und darunter erst den Text mit "locate". Sage ich aber Locate 2 , 1 : Lcd "Es klingelt!" erscheint der Text einige Zeilen weiter runter.
Besteht auch die Möglichkeit eine genaue Zeile und Spalte mit Text anzusteuern?
Und die letzte Frage wäre:
Cls löscht ja das ganze Display. Gibt es auch eine Möglichkeit nur bestimmte Zeilen oder Stellen des Displays zu löschen?
Gibt es verschiedene Schriftarten bzw Größen die ich übertragen kann?
Was bedeutet das Mode?
Möchte z.B. einen Balken für die Spannung anzeigen, der bei weniger Spannung fällt. Wie ginge das am besten?
Lesezeichen