Forum: Compiler & IDEs GLCD dynamische Variable Anzeigen


von Toni D. (tonidittmann)


Lesenswert?

Hallo,

Ich brauche mal einen kleinen Denkanstoß. Ich arbeite mit einem 
Grafik-LCD von Pollin mit einem ks0108 Chip und der lib vom ape hier aus 
dem Forum.

Ich bin nicht sehr erfahren was mikrocontroller betrifft, daher ist die 
Freude das es erstmal funktioniert groß :-)

Nun möchte ich aber Variablen ausgeben die sich ändern (später 
Temperatur und zeit).
Im Moment simuliere ich die Änderung der Variablen mit dem hochzuholen 
von einem Taster.
Wenn jetzt aber z.b. aus einer 2 eine 3 wird dann ist die 2 immernoch im 
Hintergrund und die 3 überlagert die alte Zahl.

Wie kann ich das denn ändern? Ich komm nicht so wirklich drauf.
Ich hoffe ihr könnt mir helfen.

Anbei der Code von der Main.c (bin noch Anfänger daher ist der Code wohl 
nicht der schönste...)
1
#include <inttypes.h>
2
#include <avr/io.h>
3
#include <avr/pgmspace.h>
4
#include <stdlib.h>
5
6
#include "ks0108.h"
7
#include "font12x16.h"
8
#include "font6x8.h"
9
10
//Setzen PD2 und PD3 als Eingänge
11
t1 = PD2;
12
t2 = PD3;
13
14
int oel1;
15
oel1 = 12 ;
16
int oel2;
17
oel2 =  5;
18
int luft1;
19
luft1 = 22;
20
int luft2;
21
luft2 = 0;
22
23
int main(void) {
24
  
25
  DDRD &= ~((1<<PD2) | (1<<PD3));
26
  DDRD |= (1<<PD4);  
27
28
  volatile uint16_t in;
29
  struct font largeFont, smallFont;
30
  
31
  for(in=0; in<15000; in++);
32
  
33
  
34
  largeFont.width = FONT12X16_WIDTH;
35
  largeFont.height = FONT12X16_HEIGHT;
36
  largeFont.charData = Font12x16;
37
  
38
  smallFont.width = FONT6X8_WIDTH;
39
  smallFont.height = FONT6X8_HEIGHT;
40
  smallFont.charData = Font6x8;
41
  
42
ks0108Init();
43
  
44
while(1) {  
45
  
46
if (PIND & (1<<PD2) ) { PORTD ^= (1<<PD4); oel1++ ; }
47
48
  
49
//Anzeige Zeit
50
  ks0108GotoXY(34,0);
51
  ks0108PutString("16:38 \n", largeFont);
52
53
// Anzeige Datum & Text
54
  ks0108GotoXY(15,17);
55
  ks0108PutString("Montag 03.08.2012",smallFont);
56
  ks0108DrawLine(63,31,63,63);
57
  ks0108GotoXY(1,31);
58
  ks0108PutString("Temp. Luft", smallFont);
59
  ks0108GotoXY(70,31);
60
  ks0108PutString("Temp Oel",smallFont);
61
  
62
63
//Ausgabe Öl Temperatur
64
  ks0108GotoXY(1,45);
65
  char Buffer[20];
66
  itoa( oel1 , Buffer, 10);
67
  ks0108PutString( Buffer , largeFont);
68
  ks0108PutString(".", largeFont);
69
  itoa( oel2 , Buffer, 10);
70
  ks0108PutString( Buffer , largeFont);
71
72
//Ausgabe Luft Temperatur  
73
  ks0108GotoXY(70,45);
74
  itoa( luft1 , Buffer, 10);
75
  ks0108PutString( Buffer , largeFont);
76
  ks0108PutString(".", largeFont);
77
  itoa( luft2 , Buffer, 10);
78
  ks0108PutString( Buffer , largeFont);
79
80
  
81
  }
82
  return 0;
83
}

von Timmo H. (masterfx)


Lesenswert?

ks0108ClearScreen();
Oder vorher die Zeichen wo die Variable auftaucht entsprechend der max 
länge mit Leerzeichen überschreiben

von Steven (. (ovular) Benutzerseite


Lesenswert?

oder den Bereich mit einem gefüllten Rechteck überschreiben.
D.h. du musst eine Routine schreiben die jeden Pixel abklappert

Das habe ich für einen ILI9325 geschrieben:
1
void LCD_Square(uint16_t hor, uint16_t ver,uint16_t wide,uint16_t high,uint16_t Color, uint16_t fill)
2
//if fill = 0xAAAA then transparent
3
{
4
  if (fill!=0xAAAA) //wenn nicht Transparent, dann Füllen
5
  {
6
    for(uint16_t i=0;i<=high;i++)
7
    {
8
      LCD_GRAM_select(hor,ver+i); //Pixel anwählen
9
      for(uint16_t j=0;j<=wide;j++)
10
      {
11
          //Der ILI9325 inkrementiert von alleine in x-Richtung
12
          LCD_WRITE(0x22,fill); //Farbwert des Pixels ändern
13
      }
14
    }
15
16
  }  
17
18
  //hier wird ein Rahmen von 1px drumherumgezogen
19
  LCD_GRAM_select(hor,ver);
20
  for(int i=0;i<=wide;i++) LCD_WRITE(0x22,Color);
21
  LCD_GRAM_select(hor,ver+high);
22
  for(int i=0;i<=wide;i++) LCD_WRITE(0x22,Color);
23
  
24
  for(int i=0;i<=high;i++)
25
  {
26
    LCD_GRAM_select(hor,ver+i);
27
    LCD_WRITE(0x22,Color);
28
    LCD_GRAM_select(hor+wide,ver+i);
29
    LCD_WRITE(0x22,Color);
30
  }
31
  //Rahmen Ende
32
33
}

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.