AT2560 Zeichen auf LCD Display beim Drücken von Joystick

Gast #2700149
Lesenswert?
• ▲
▼
Hallo,
ich bin dabei ein Snake Spiel(Architektur), das ich vor einiger Zeit 
einmal am PC programmiert habe, auf den AT2560 (AVR Einsteigerset) zu 
konvertieren.

Bei kleinen hanwerklichen Versuchen muss ich jedoch ein Problem 
feststellen.
Zunächst einmal einen Balken, der sich solange nach rechts bewegt, wie 
der Joystick gedrückt ist. Jedoch "flackert " der Baclken am rechten 
Rand, die Bewegung ist nicht sauber. Woran könnte das liegen?
Schönen Dank,
Jochen
1
#define F_CPU 16000000
2
#include <avr/io.h>
3
 
4

5
#include <avr/io.h>
6
#include "Auto.h"
7
int main(void)
8
{ Auto a;
9
  a.init();
10
  a.refresh();   
11
 
12
   
13
  DDRB=0xff;
14
  DDRK=0x00; // Port-K komplett auf EINGANG
15
   
16
  PORTK= 0xFF; // alle Pull-Up Widerstände aktivieren
17

18
PORTK= 0xFF; 
19
 
20
   
21
    while(1)
22
    {
23
    while(  (PINK&0b01000000)==0){
24
    
25
     a.right();
26
  } 
27
  }   
28

29
}
30

31
Auto.cpp
32
 
33
#include <avr/io.h>
34
#include <string.h>   
35
#include <MK3_2560_LCD.h>
36
#include <math.h>
37
#include <util/delay.h> 
38
#include "auto.h"
39
 
40

41

42
void Auto::left()
43
{   
44
  x = x-1;
45
} 
46
void Auto::right()
47
{   
48
  x = x+1;
49
   
50
  refresh();
51
} 
52

53
void Auto::refresh()
54
{unsigned int n;
55
   
56
  
57
  y=0;
58
   
59
  for(int i=0;i<10;i++)
60
  {
61
    MK3_LCD_PIXEL_AT(x+i,y,MODE_SET);
62
    MK3_LCD_PIXEL_AT(x+i,y+1,MODE_SET); 
63
  }
64
      _delay_ms(1000);
65
}
66
void Auto::init()
67
{
68
  char led_wert=0;
69
  char x,y;
70

71
  MK3_INIT_LCD();          // init des LCD
72
  
73
  MK3_LCD_CLEAR();        // LCD loeschen
74
  MK3_LCD_LIGHT(true);      // beleuchtung einschalten
75
  
76
   
77
  MK3_LCD_SETCURSOR(0,0);
78
}
Gast #2700762
Lesenswert?
• ▲
▼
Zum Ansteuern des LCD verwende ich den Treiber
von http://www.mikrocontroller-4u.de 06 = Grafik-LCD-Treiber
In der Schleife der Funktion refresh() in meinem Code zeichne ich zwei 
übereinander liegende Linien. Beim Rechtsklick des Joysticks
trifft die Bedingung while(  (PINK&0b01000000)==0) aus der Main Routine 
zu und es wird die Funktion right auf der Instanz a aufgerufen. Das 
führt dazu, dass die x Korrdinate erhöht wird und die oben beschriebene 
Funktion refresh aufgerufen wird. Diese zeichnet in Abhängigkeit vom 
x-wert die Linien erneut.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.