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 | }
|