GLCD dynamische Variable Anzeigen

#3117171
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
}
Persönliche Seite #3124554
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren