Zahleneingabe mittels LCD und Taster: Vorgehensweise, Code?

Gast #630412
Lesenswert?
• ▲
▼
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
Gast #630445
Lesenswert?
• ▲
▼
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
Gast #630476
Lesenswert?
• ▲
▼
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
Gast #630555
Lesenswert?
• ▲
▼
@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
Gast #630789
Lesenswert?
• ▲
▼
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
Gast #630792
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.