www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zahleneingabe mittels LCD und Taster: Vorgehensweise, Code?


Autor: Jan Mayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jan Mayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: Jan Mayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: wechsi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.