Forum: Mikrocontroller und Digitale Elektronik 10er Tastaur mit Bascom


von Stefan (Gast)


Lesenswert?

Folgende Frage:
Ich habe einen ATxMega128a3-Board mit 3,2" Touch-Grafikdisplay von 
[[http://www.ribu.at/]].
Über das LCD habe ich einen Zehnertastaur mit den Zusatztasten delete 
und ok gezeichnet. Einen einzelnen Tastendruck auslesen ist kein 
Problem, aber wie kann ich aus einzelnen Ziffern eine Zahl formen? 
(analog bei der Eingabe eines Taschenrechners)
Mit dem Befehl GETATKBD()war ich erfolglos, da die Abfrage des Touch 
Screen über die serielle Schnittstelle mit dem Hilfsprogramm 
Grafikroutinen für PICASO-SGC vom Ribu gemacht wird. Ausgelesen wird der 
Touch Screen so: (Beispiel für zwei Tasten)

Do
   Call Ilcd_get_touch()  Rem Touchpanel abfrage  X_Touch = X-Wert,
                               Y_Touch = Y-Wert
   If X_touch > 1 And X_touch < 77 Then
   If Y_touch > 100 And Y_touch < 130 Then
      Rap_sol = 1
   End If
   End If

   If X_touch > 83 And X_touch < 157 Then
   If Y_touch > 100 And Y_touch < 130 Then
   Rap_sol = 2
   End If
   End If
Loop

von Karl H. (kbuchegg)


Lesenswert?

Stefan schrieb:

> und ok gezeichnet. Einen einzelnen Tastendruck auslesen ist kein
> Problem, aber wie kann ich aus einzelnen Ziffern eine Zahl formen?
> (analog bei der Eingabe eines Taschenrechners)

Du hast die Zahl 8. Und an die willst du eine 3 drannhängen, um daraus 
83 zu formen.
1
  Neue Zahl = Alte Zahl * 10  + nächste Ziffer
2
3
  8 * 10  -> 80
4
  80 + 3  -> 83

und an diese 83 kommt jetzt noch die 5 hinten drann
1
    83 * 10   ->  830
2
    830 + 5   ->  835

Ja, manchmal muss man doch tatsächlich ein bischen rechnen. Ist aber 
nicht so schwer, wenn man erkannt hat, dass eine Multiplikation mit 10 
typografisch einer 'Verschiebung' um 1 Stelle nach links entspricht.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Ist denn die Länge der Zahl bekannt?

Wenn jeden Tastendruck in ein Array abspeichern mit sagen wir einem '!' 
als Stopzeichen.
Bevor Tasten ausgelesen werden muss das gesamte Array mit '!' 
beschrieben werden.

Jetzt landen 3 Zahlen in dem Array.
Nun guckste wie Lang dein Array ist, also alle Indexe zählen bis '!'.
Dies ergibt 3.
Damit fütterst du eine forschleife die von 2 nach 0 zählt (also die 
Indexe des Arrays abklappert).

als variablen ahste deine zahlvariable und eine multiplikatorvariable

ich kanns jetz nur in C schreiben
1
zahlvariable = 0;
2
multiplikator = 1;
3
for (int i = arraylength(zahlarray)-1; i >=0; i--){
4
5
zahlvariable = zahlvariable + zahlarray[i]*multiplikator;
6
multiplikator = multiplikator*10;
7
8
}

das geht das Array durch und Addiert alle zahlen mit dem richtigen 
Dezimalmultiplikator auf.

von Stefan (Gast)


Lesenswert?

Danke Karl!
Habe das letzte mal in meiner Schulzeit (>30 Jahre) kleine Programme 
geschrieben.

von Stefan (Gast)


Lesenswert?

Hallo Martin!
Nein. Sie soll die Eingabe für einen Abschaltewert des Zählers sein. Sie 
kann im zweistelligen Bereich sein aber auch fünfstellig. Je nach dem, 
wieviele Rapporte (Fabwechsel) die Maschine häckelt.
ich denke, fürs Array fehlts noch an meinem Wissen. Da kann ich Karls 
Methode leichter umsetzen.

von Karl H. (kbuchegg)


Lesenswert?

Martin Wende schrieb:
> Ist denn die Länge der Zahl bekannt?

Machs nicht so kompliziert.
Man kann die Zahl zusammensetzen, während der Benutzer die Tasten 
drückt. Bei ganzen Zahlen ist das überhaupt kein Problem, lediglich auf 
Overflows muss man aufpassen. Mit jedem Tastendruck multipliziert man 
das bisherige mit 10 und addiert die Ziffer dieses Tastendrucks dazu.

Pseudocode
1
  ...
2
3
  number = 0
4
5
  do
6
  {
7
    if( User Pressed a Key )
8
    {
9
      key = next Key pressed
10
11
      if( key is numeric )
12
      {
13
        digit = numeric value of key
14
        number = 10 * number + digit
15
      }
16
17
      else if( key is 'Delete' )
18
        number = number / 10
19
20
      else if( key is 'Clear' )
21
        number = 0
22
23
      show number on display
24
    }
25
  } while( User did not Press Enter )

von Stefan (Gast)


Lesenswert?

Danke, es funktioniert!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.