Forum: Mikrocontroller und Digitale Elektronik LCD Encoder Ausgabe von rechts nach links


von Michael H. (h_m)


Lesenswert?

Hallo,

also ich habe mir nachfolgenden Code erstellt. In dem ich mir den 
eingelesenen Wert, eines Drehencoders über ein lcd Display ausgebe. Dazu 
habe ich  die .c und .h Dateien aus 
[[http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung]] 
eingebunden. Der Wert wird mir jetzt in Zeile 1 an der Achten Stelle 
ausgegeben. Wenn der Wert jetzt über 9 geht, also auf 10, dann springt 
mir die null an die 9.te Stelle, wie kann ich das jetzt lösen, das mir 
die 1 der 10 an die 7.te Stelle springt und die 0 an die 8.te usw. 
Könnte mir bitte jemand einen Tip geben, oder sogar zeigen.





1
#define F_CPU 16000000
2
#include <avr/interrupt.h>
3
#include <util/delay.h>
4
#include <string.h>
5
#include <avr/io.h>
6
7
8
char zustand = 6;               //Anfangszustand
9
volatile int global_wert;       // =0 ist nicht nötig, da globale Variablen mit 0 initialisiert werden
10
11
char automat [7][4] =  {        { 0, 1, 2, 0 },    //Automatentabelle
12
                                { 0, 1, 1, 3 },
13
                                { 0, 2, 2, 5 },
14
                                { 3, 1, 4, 3 },
15
                                { 2, 2, 2, 2 },
16
                                { 3, 3, 3, 3 },
17
                                { 0, 1, 2, 3 }};
18
19
20
ISR(TIMER2_OVF_vect)
21
{   
22
  zustand = automat[zustand][PINB & 0x3];             //A,B an PB0 und PB1
23
  if(zustand == 4 )
24
  global_wert++;
25
  if(zustand == 5)
26
  global_wert--;
27
}
28
29
int main(void)
30
{  
31
  int wert;
32
  char fe[20];
33
  DDRB = 0x03;      
34
  
35
  char outpt[16];
36
  lcd_init();
37
  
38
  //fuer Mega328 ...
39
  TIMSK2 = TIMSK2 | (1<<TOIE2);             //Timer/Counter2 Overflow Interrupt Enable
40
  TCCR2B |= (1<<CS20);                      //Clock ohne Teiler an Timer
41
  
42
  while(1)
43
  {  
44
     cli();                               //Fuer kurze Zeit den Interrupt deaktivieren
45
     wert = global_wert;
46
     sei();
47
     
48
    lcd_clear();
49
    lcd_setcursor(8, 1);
50
    itoa(wert, outpt, 10);
51
    lcd_string(outpt);
52
      _delay_ms(100);
53
    
54
  }
55
}

von Genialer Programmierer (Gast)


Lesenswert?

Meinst du sowas vielleicht?
1
void demo (void)
2
{
3
  int wert;
4
  char  tmpstr[20];
5
6
  wert =  9;
7
  sprintf (tmpstr, "%02d", wert);
8
  lcd_string(tmpstr);
9
10
  wert = 10;
11
  sprintf (tmpstr, "%02d", wert);
12
  lcd_string(tmpstr);
13
}

von Genialer Programmierer (Gast)


Lesenswert?

oder auch
1
  sprintf (tmpstr, "%2d", wert);

(schreibt keine führende Null)

von Michael H. (h_m)


Lesenswert?

Danke, das ist schon nicht so schlecht, wie schreibt man den die Ausgabe 
dann, wenn ich rückwärts auch noch zählen will? also zb -123 das der 
3.er auf der acht bleibt?

von Genialer Programmierer (Gast)


Lesenswert?

Michael H. schrieb:
> wenn ich rückwärts auch noch zählen will?
1
  sprintf (tmpstr, "%5d", wert);

von Michael H. (h_m)


Lesenswert?

danke, alles klar.

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.