Hallo,
beschäftige mich erst seit kurzem mit uControllern und habe die ersten
LED/Taster Übungen hinter mir und habe jetzt ein 2*16 LCD an einem
ATMega88 Controller. Das ganze betreibe ich mit der Library von Peter
Fleury, funktioniert prima. Würde nun gerne Zahlen per RS232 an den PC
senden, klappt mit statischen auch super (wobei ich noch nie über 5
Stellige Zahlen (mit atoi) gekommen bin).
Mein Wunsch ist nun, über das LCD und ein paar Taster (z.B. rechts/links
für Stellenauswahl und hoch/runter zum ändern der Ziffer an der Stelle)
eine Zahl über das LCD einzugeben und diese zu versenden. Wie macht man
das am Besten? Man kann das LCD ja auch wieder auslesen, sprich ich
zeige eine Zahl auf dem LCD an, mache was mit den Tasten und lese die
Zahl wieder aus. Oder eher Zahl anzeigen, nur Tastendrücke auswerten und
im uC verarbeiten und nach Druck auf eine Enter/OK-Taste das LCd
aktualisieren?
1) Wie geht man da prinzipiell vor?
2) Hat das evtl. schon mal jemand gemacht und hätte einen Codeschnipsel?
3) Wie kann ich "beliebig" große Zahlen in einzelne Chars, bzw. einen
String wandeln?
Gruß,
Jan
mit itoa und utoa kannst Du nach char wandeln.
Ich würde mir von hand ein char mit beliebiger Länge machen char
zahl[i]. Bei Druck auf die Enter-Taste wird i incrementiert. Dann die
Ziffer aus dem Array
mit +/- incrementieren bzw decrementieren.
Den Cursor würde ich mit lcd_gotoxy(i, y) an die entsprechende Ziffer
stellen und blinken lassen (lcd_command(LCD_DISP_ON_BLINK)). Und dann
halt nur an dieser Stelle nach Auswertung der Taste die Ziffer updaten
(lcd_putc (zahl[i])).
Zumindest so in groben Zügen.
Gruss Ralf
Hallo,
Ralf: danke für die Tipps, werde es wohl so machen
Falk: das wäre der "umgekehrte Weg", möchte ja ncihts ausgeben, sondern
vom LCD einlesen. Hat mich aber auch nicht dümmer gemacht ;=)
Gruß,
Jans
Wieso willst Du vom LCD etwas einlesen, was Du eh vorher da
reingeschrieben hast? Hast Du Angst, das LCD könnte eigenmächtig etwas
an dem Text verändern?
@Jan,
normalerweise geht das so:
- im uC wird der anzuzeigende Wert im Programm in einer Variable
gespeichert und auf dem Display angezeigt
- beim Drücken der [+] bzw. [-] Taste erhöht bzw. erniedrigt der uC den
Wert der Variablen und aktualisiert die Anzeige auf dem Display
Für Fließkommazahlen und die Änderung einzelner Stellen mußt Du dir im
uC die Stelle merken, die Du ändern möchtest (auch in einer Variablen).
Bei [+]/[-] ist dann etwas an Berechnung notwendig, damit sich nur die
eine Stelle ändert bzw. bei einem Überlauf/Unterlauf die vorherigen
Stellen auch angepaßt werden (4,594 -> 2'te Nachkommastelle [+] ->
4,604). Nach jedem Tastendruck auf [+] bzw. [-] wird die Änderung
duchgeführt und anschließend das Display aktualisiert. Zur Information,
welche Stelle geändert wird, kannst Du nach jeder Display-Aktualisierung
den aktivierten Cursor auf die jeweilige Stelle setzen.
Gruss
Christoph
@ Christoph (Gast)
>Für Fließkommazahlen und die Änderung einzelner Stellen mußt Du dir im>uC die Stelle merken, die Du ändern möchtest (auch in einer Variablen).
Fliesskommazahlen braucht man nur sehr selten. Besser sind meist
Festkommazahlen.
Festkommaartihmetik
MFg
Falk
Hallo,
noch mal zum Verständnis: mein LCD ist ein 2*16, also 2 Zeilen a 16
Stellen. Was ich bis jetzt schaffe, sind Zahlen die in 2^16 (also atoi)
passen einfach in der letzten Stelle zu erhöhen/erniedrigen. Hätte aber
gerne so etwas wie:
123456789012345
im uController. aber selbst mit einem long bin ich da aufgeschmissen.
Und das auch nur mit Hilfe einer +/- Taste immer um 1 zu erhöhen ist
wohl auch nicht so toll. Also suchte ich nach etwas was ich Stellenweise
erhöhen kann.
Hätte dann auf dem Display halt die Zahlenkolonne zu Anfang ausgegeben
und würde die an den einzelnen Stellen verändern (Ziffer an
Cursorposition auslesen, je nach Tastendruck um eins erhöhen oder
erniedrigen) und zum Schluss die Zeile ganz einlesen und irgendwie in
eine Zahl umwandeln. Werde da mal eine Nacht drüber schlafen und mir
Gedanken machen.
Grüße,
Jan
So viel ich weiss haben die meisten uC einen eigenen Speicher, du musst
nicht auslesen, was im LCD steht, denn das hast du bereits im Speicher
deines uC.
Wenn du nun mit dem Cursor auf dem Display auf der Hunderterstelle bist
und die Taste + gedrückt wird, dann addierst du im uC 100 zu deiner
Variable und lässt die Zahl wieder auf dem uC anzeigen.
Eine eigene Frage?
Dieser Thread ist über 19 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.