Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <pic32mx.h>
- #include <stdint.h>
- #include <stdlib.h>
- #define DISPLAY_VDD PORTFbits.RF6
- #define DISPLAY_VBATT PORTFbits.RF5
- #define DISPLAY_COMMAND_DATA PORTFbits.RF4
- #define DISPLAY_RESET PORTGbits.RG9
- #define DISPLAY_VDD_PORT PORTF
- #define DISPLAY_VDD_MASK 0x40
- #define DISPLAY_VBATT_PORT PORTF // VBATT sätter på själva skärmen
- #define DISPLAY_VBATT_MASK 0x20
- #define DISPLAY_COMMAND_DATA_PORT PORTF
- #define DISPLAY_COMMAND_DATA_MASK 0x10
- #define DISPLAY_RESET_PORT PORTG
- #define DISPLAY_RESET_MASK 0x200
- void *stdout = (void *) 0;
- char textbuffer[4][16];
- // vilken page boll och spelare är i
- int pos1, pos2, posball, posballt, posballk, ballx, moveback, course,
- counter1, counter2, impage;
- // Player1 ska vara på x = 10 (pixeln längst till vänster)
- // Player2 ska vara pp x = 115
- static const uint8_t const font[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 94, 0, 0, 0, 0,
- 0, 0, 4, 3, 4, 3, 0, 0,
- 0, 36, 126, 36, 36, 126, 36, 0,
- 0, 36, 74, 255, 82, 36, 0, 0,
- 0, 70, 38, 16, 8, 100, 98, 0,
- 0, 52, 74, 74, 52, 32, 80, 0,
- 0, 0, 0, 4, 3, 0, 0, 0,
- 0, 0, 0, 126, 129, 0, 0, 0,
- 0, 0, 0, 129, 126, 0, 0, 0,
- 0, 42, 28, 62, 28, 42, 0, 0,
- 0, 8, 8, 62, 8, 8, 0, 0,
- 0, 0, 0, 128, 128, 0, 0, 0,
- 0, 8, 8, 8, 8, 8, 0, 0,
- 0, 0, 0, 0, 128, 0, 0, 0,
- 0, 64, 32, 16, 8, 4, 2, 0,
- 0, 62, 65, 73, 65, 62, 0, 0,
- 0, 0, 66, 127, 64, 0, 0, 0,
- 0, 0, 98, 81, 73, 70, 0, 0,
- 0, 0, 34, 73, 73, 54, 0, 0,
- 0, 0, 14, 8, 127, 8, 0, 0,
- 0, 0, 35, 69, 69, 57, 0, 0,
- 0, 0, 62, 73, 73, 50, 0, 0,
- 0, 0, 1, 97, 25, 7, 0, 0,
- 0, 0, 54, 73, 73, 54, 0, 0,
- 0, 0, 6, 9, 9, 126, 0, 0,
- 0, 0, 0, 102, 0, 0, 0, 0,
- 0, 0, 128, 102, 0, 0, 0, 0,
- 0, 0, 8, 20, 34, 65, 0, 0,
- 0, 0, 20, 20, 20, 20, 0, 0,
- 0, 0, 65, 34, 20, 8, 0, 0,
- 0, 2, 1, 81, 9, 6, 0, 0,
- 0, 28, 34, 89, 89, 82, 12, 0,
- 0, 0, 126, 9, 9, 126, 0, 0,
- 0, 0, 127, 73, 73, 54, 0, 0,
- 0, 0, 62, 65, 65, 34, 0, 0,
- 0, 0, 127, 65, 65, 62, 0, 0,
- 0, 0, 127, 73, 73, 65, 0, 0,
- 0, 0, 127, 9, 9, 1, 0, 0,
- 0, 0, 62, 65, 81, 50, 0, 0,
- 0, 0, 127, 8, 8, 127, 0, 0,
- 0, 0, 65, 127, 65, 0, 0, 0,
- 0, 0, 32, 64, 64, 63, 0, 0,
- 0, 0, 127, 8, 20, 99, 0, 0,
- 0, 0, 127, 64, 64, 64, 0, 0,
- 0, 127, 2, 4, 2, 127, 0, 0,
- 0, 127, 6, 8, 48, 127, 0, 0,
- 0, 0, 62, 65, 65, 62, 0, 0,
- 0, 0, 127, 9, 9, 6, 0, 0,
- 0, 0, 62, 65, 97, 126, 64, 0,
- 0, 0, 127, 9, 9, 118, 0, 0,
- 0, 0, 38, 73, 73, 50, 0, 0,
- 0, 1, 1, 127, 1, 1, 0, 0,
- 0, 0, 63, 64, 64, 63, 0, 0,
- 0, 31, 32, 64, 32, 31, 0, 0,
- 0, 63, 64, 48, 64, 63, 0, 0,
- 0, 0, 119, 8, 8, 119, 0, 0,
- 0, 3, 4, 120, 4, 3, 0, 0,
- 0, 0, 113, 73, 73, 71, 0, 0,
- 0, 0, 127, 65, 65, 0, 0, 0,
- 0, 2, 4, 8, 16, 32, 64, 0,
- 0, 0, 0, 65, 65, 127, 0, 0,
- 0, 4, 2, 1, 2, 4, 0, 0,
- 0, 64, 64, 64, 64, 64, 64, 0,
- 0, 0, 1, 2, 4, 0, 0, 0,
- 0, 0, 48, 72, 40, 120, 0, 0,
- 0, 0, 127, 72, 72, 48, 0, 0,
- 0, 0, 48, 72, 72, 0, 0, 0,
- 0, 0, 48, 72, 72, 127, 0, 0,
- 0, 0, 48, 88, 88, 16, 0, 0,
- 0, 0, 126, 9, 1, 2, 0, 0,
- 0, 0, 80, 152, 152, 112, 0, 0,
- 0, 0, 127, 8, 8, 112, 0, 0,
- 0, 0, 0, 122, 0, 0, 0, 0,
- 0, 0, 64, 128, 128, 122, 0, 0,
- 0, 0, 127, 16, 40, 72, 0, 0,
- 0, 0, 0, 127, 0, 0, 0, 0,
- 0, 120, 8, 16, 8, 112, 0, 0,
- 0, 0, 120, 8, 8, 112, 0, 0,
- 0, 0, 48, 72, 72, 48, 0, 0,
- 0, 0, 248, 40, 40, 16, 0, 0,
- 0, 0, 16, 40, 40, 248, 0, 0,
- 0, 0, 112, 8, 8, 16, 0, 0,
- 0, 0, 72, 84, 84, 36, 0, 0,
- 0, 0, 8, 60, 72, 32, 0, 0,
- 0, 0, 56, 64, 32, 120, 0, 0,
- 0, 0, 56, 64, 56, 0, 0, 0,
- 0, 56, 64, 32, 64, 56, 0, 0,
- 0, 0, 72, 48, 48, 72, 0, 0,
- 0, 0, 24, 160, 160, 120, 0, 0,
- 0, 0, 100, 84, 84, 76, 0, 0,
- 0, 0, 8, 28, 34, 65, 0, 0,
- 0, 0, 0, 126, 0, 0, 0, 0,
- 0, 0, 65, 34, 28, 8, 0, 0,
- 0, 0, 4, 2, 4, 2, 0, 0,
- 0, 120, 68, 66, 68, 120, 0, 0,
- };
- uint8_t Screen [] =
- {
- 0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,
- // Page 0 // Varje sådan rad 28 element bred, varje page 128 bred (element)
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // Page
- 1
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // Page
- 2
- 126,18,18,12,0,0,4,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,18,18,12,0,0,68,98,82,76
- // Page 3
- };
- void delay(int cyc) {
- int i;
- for(i = cyc; i > 0; i--);
- }
- uint8_t spi_send_recv(uint8_t data) { // vad gör/hur fungerar spi ???
- while(!(SPI2STAT & 0x08));
- SPI2BUF = data;
- while(!(SPI2STAT & 0x01));
- return SPI2BUF;
- }
- void display_init() {
- DISPLAY_COMMAND_DATA_PORT &= ~DISPLAY_COMMAND_DATA_MASK;
- // and med inversen av 0x10
- delay(10);
- DISPLAY_VDD_PORT &= ~DISPLAY_VDD_MASK; // and med inversen
- av 0x40
- delay(1000000);
- spi_send_recv(0xAE); // set display off
- DISPLAY_RESET_PORT &= ~DISPLAY_RESET_MASK;
- delay(10);
- DISPLAY_RESET_PORT |= DISPLAY_RESET_MASK;
- delay(10);
- spi_send_recv(0x8D); // Charge Pump Setting
- spi_send_recv(0x14); // Enable charge pump
- spi_send_recv(0xD9); // Set Pre-charge Period
- spi_send_recv(0xF1); // bit 0-3 är period 1 och 4-7 är period 2. Kan max vara 15 klockcyklar, 0 är invalid.
- DISPLAY_VBATT_PORT &= ~DISPLAY_VBATT_MASK;
- delay(10000000);
- spi_send_recv(0xA1); // Set Segment Re-map: A1h, X[0]=1b: column address 127 is mapped to SEG0
- spi_send_recv(0xC8); // Set COM Output Scan Direction
- spi_send_recv(0xDA); // Set COM Pins Hardware configuration
- spi_send_recv(0x20); // Set memory adressing mode
- spi_send_recv(0xAF); // set display on.
- }
- void display_string(int line, char *s) {
- int i;
- if(line < 0 || line >= 4)
- return;
- if(!s)
- return;
- for(i = 0; i < 16; i++)
- if(*s) {
- textbuffer[line][i] = *s;
- s++;
- } else
- textbuffer[line][i] = ' ';
- }
- void display_update() {
- int i, j, k, a, b, d;
- int c;
- for(i = 0; i < 4; i++) {
- DISPLAY_COMMAND_DATA_PORT &=
- ~DISPLAY_COMMAND_DATA_MASK;
- spi_send_recv(0x22);
- spi_send_recv(i);
- spi_send_recv(0x0);
- spi_send_recv(0x10);
- DISPLAY_COMMAND_DATA_PORT |=
- DISPLAY_COMMAND_DATA_MASK;
- for(j = 0; j < 16; j++) {
- c = textbuffer[i][j];
- if(c & 0x80)
- continue;
- for(k = 0; k < 8; k++)
- spi_send_recv(font[c*8 + k]);
- }
- }
- // displayupdate tar slut
- }
- void display_Screen(int x, const uint8_t *data){
- int i, j;
- for(i = 0; i < 4; i++) {
- DISPLAY_COMMAND_DATA_PORT &=
- ~DISPLAY_COMMAND_DATA_MASK;
- spi_send_recv(0x22); // Setup page start and end address
- spi_send_recv(i); // fyra olika pages
- spi_send_recv(x & 0xF); // and med de fyra sista bitarna? 0000? (Lower column limit).
- spi_send_recv(0x10 | ((x >> 4) & 0xF)); // 0001
- 0000 OR 0110 (om x = 128) = 0001 0110 = 0x16 (Upper column limit)
- DISPLAY_COMMAND_DATA_PORT |=
- DISPLAY_COMMAND_DATA_MASK;
- for(j = 0; j < 128; j++)
- // avgör hur stor del(av vektorn) som får synas på skärmen
- spi_send_recv(data[i*128 + j]);
- // inversen av hundens vektor[1, 2, 3, ..., j] [32 + 1,
- 2, 3,..., j] [64 + 1, 2, 3, ..., j]
- }
- }
- void move_ballf()
- {
- int i;
- // Flyttar bollen fram en pixel
- for (i = 1; i<4; i++) // allt kommer att flyttas ett steg åt höger. Ballx är den pixeln längs vänster
- {
- Screen[ballx + i + 128*(posball-1)] = Screen[ballx + 1 +
- 128*(posball-1)];
- Screen[ballx + i + 128*(posball)] = Screen[ballx + 1 +
- 128*(posball)];
- Screen[ballx + i + 128*(posball+1)] = Screen[ballx + 1 +
- 128*(posball+1)];
- if (posball != 0)
- {
- Screen[ballx + i + 128*(posball-1)] =
- Screen[ballx + 128*(posball-1)];// Kopierar pagen ovanför
- }
- if (posball != 3)
- {
- Screen[ballx + i + 128*(posball+1)] =
- Screen[ballx + 128*(posball+1)];// Kopierar pagen nedanför
- }
- }
- Screen[ballx + 128*(posball-1)] = 0;
- Screen[ballx + 128*(posball+1)] = 0;
- Screen[ballx + 128*posball] = 0;
- // tar bort fula pixlar vid pagebyte. Tar bort och sedan uppdaterar.
- ballx++;
- // Anger nya x-värdet
- delay(100);
- }
- void move_ballb()
- {
- // behöver endast flytta en vektorenhet åt vänster. De andra behåller sitt värde. Den längst åt höger blir den längst till vänster.
- Screen[ballx - 1 + 128*(posball)] = Screen[ballx +
- 128*(posball)]; // Kopierar pagen
- Screen[ballx - 1 + 128*(posball+1)] = Screen[ballx +
- 128*(posball+1)];// Kopierar pagen nedanför
- Screen[ballx - 1 + 128*(posball-1)] = Screen[ballx +
- 128*(posball-1)];// Kopierar pagen ovanför
- Screen[ballx+2 + 128*posball] = 0;
- // Tar bort vektorsiffran längst till höger
- Screen[ballx+2 + 128*(posball-1)] = 0;
- Screen[ballx+2 + 128*(posball+1)] = 0;
- // tar bort fula pixlar vid pagebyte
- ballx--;
- // Anger nya x-värdet
- delay(100);
- }
- void move_ballu()
- {
- int i;
- // Kollar om bollen ligger längst upp i pagen, värdena är så att längst till höger om talet är längst upp.
- int left3 = 0; // Om den är precis vid page-kanten
- int left2 = 0; // Om en rad redan passerat page-kanten
- int left1 = 0; // Om två rader redan passerat page-kanten
- for (i = 0; i<128; i++)
- {
- if (Screen[i + posball*128] == 7)
- // Om bollen ligger längst upp i sin page, 7 = 0000 0111
- left3 = 1;
- }
- for (i = 0; i<128; i++)
- {
- if (Screen[i + posball*128] == 3)
- // Om bollen ligger längst upp i sin page eller mellan
- left2 = 1;
- }
- for (i = 0; i<128; i++)
- {
- if (Screen[i + posball*128] == 1)
- // Om bollen ligger längst upp i sin page eller mellan
- left1 = 1;
- }
- // Flyttar bollen upp en pixel
- if ((left1 + left2 + left3) == 0) // Om bollen inte ligger nära kanten
- {
- Screen[ballx + 128*posball] = Screen[(ballx +
- 128*posball)]/2; // Dividerar alla (aktuella) vektorsplatser med 2. VL = nuvarande
- Screen[ballx + 1 + 128*posball] = Screen[(ballx + 1 +
- 128*posball)]/2; // divison då till höger om det binära talet är högst upp
- Screen[ballx + 2 + 128*posball] = Screen[(ballx + 2 +
- 128*posball)]/2;
- for(i = 0; i<3; i++) //Tar bort splitts?
- {
- if (Screen[ballx + 128*posball]
- == 96)
- Screen[ballx + i + 128*posball]
- = 112;
- }
- }
- if (left3 == 1) // Om den preci kommit till kanten
- {
- for (i = 0; i<3; i++) //Tar bort en rad på nedre pagen
- {
- Screen[ballx + i + posball*128] = 3;
- Screen[ballx + i + (posball-1)*128] = 128;
- // Startar ny rad på övre pagen
- }
- }
- if (left2 == 1) // Om den preci kommit till kanten
- {
- for (i = 0; i<3; i++)
- {
- Screen[ballx + i + posball*128] = 1;
- Screen[ballx + i + (posball-1)*128] = 192;
- // Startar ny rad på övre pagen
- }
- }
- if (left1 == 1) // Om den preci kommit till kanten
- {
- for (i = 0; i<3; i++)
- {
- Screen[ballx + i + posball*128] = 0;
- Screen[ballx + i + (posball-1)*128] = 224;
- // Startar ny rad på övre pagen
- }
- delay(1000);
- posball--;
- }
- }
- void move_balld()
- {
- // Kollar om bollen ligger längst upp i pagen
- int left3 = 0; // Om den är precis vid page-kanten
- int left2 = 0; // Om en rad redan passerat page-kanten
- int left1 = 0; // Om två rader redan passerat page-kanten
- int i;
- for (i = 0; i<114; i++)
- {
- if (Screen[i + posball*128] == 224)
- // Om bollen ligger löngst ned i sin page, 224 = 111 000 00
- left3 = 1;
- }
- for (i = 0; i<114; i++)
- {
- if (Screen[i + posball*128] == 192)
- // Om bollen ligger löngst ned i sin page eller mellan
- left2 = 1;
- }
- for (i = 0; i<114; i++)
- {
- if (Screen[i + posball*128] == 128)
- // Om bollen ligger löngst ned i sin page eller mellan
- left1 = 1;
- }
- // Flyttar bollen upp en pixel
- if ((left1 + left2 + left3) == 0) // Om bollen inte ligger nära kanten
- {
- Screen[ballx + 128*posball] = Screen[(ballx +
- 128*posball)]*2; // Multiplicerar alla (aktuella) vektorsplatser med 2. VL = nuvarande
- Screen[ballx + 1 + 128*posball] = Screen[(ballx + 1 +
- 128*posball)]*2;
- Screen[ballx + 2 + 128*posball] = Screen[(ballx + 2 +
- 128*posball)]*2;
- Screen[ballx + 1 + 128*(posball-1)] = 0;
- Screen[ballx + 2 + 128*(posball-1)] = 0;
- }
- if (left3 == 1) // Om den preci kommit till kanten
- {
- for (i = 0; i<3; i++) //Tar bort en rad på nedre pagen
- {
- Screen[ballx + i + posball*128] = 192;
- Screen[ballx + i + (posball+1)*128] = 1;
- // Startar ny rad på nedre pagen
- }
- }
- if (left2 == 1) // Om den preci kommit till kanten
- {
- for (i = 0; i<3; i++)
- {
- Screen[ballx + i + posball*128] = 128;
- Screen[ballx + i + (posball+1)*128] = 3;
- // Startar ny rad på övre pagen
- }
- }
- if (left1 == 1) // Om den preci kommit till kanten
- {
- for (i = 0; i<3; i++)
- {
- Screen[ballx + i + posball*128] = 0;
- Screen[ballx + i + (posball+1)*128] = 7;
- // Startar ny rad på övre pagen
- }
- delay(1000);
- if( 0 <= posball < 3)
- {
- posball++;
- }
- }
- }
- void course_generator() // Ger en random course-siffra som passar vilken page den studsar på
- {
- // För studs på vänstra sidan
- if( (ballx == 13) && (posball == pos1) && (posball == 0))
- {
- course = (rand() % 6) + 12;
- // course avgör hur många pixlar framåt/bakåt bollen åker innan den åker upp/ned.
- }
- else if( (ballx == 13) && (posball == pos1) && (posball == 1))
- {
- course = (rand() % 6) + 16;
- }
- else if( (ballx == 13) && (posball == pos1) && (posball == 2))
- {
- course = (rand() % 6) + 12;
- }
- // För studs på högra sidan
- else if( (ballx == 112) && (posball == pos2) && (posball == 0))
- {
- course = (rand() % 6) + 12;
- }
- else if( (ballx == 112) && (posball == pos2) && (posball == 1))
- {
- course = (rand() % 6) + 16;
- }
- else if( (ballx == 112) && (posball == pos2) && (posball == 2))
- {
- course = (rand() % 6) + 12;
- }
- }
- void move_ball() {
- if( (ballx == 12)) // bollen är bakom player1
- {
- for(;;)
- {
- moveback = 2;
- display_update();
- display_string(0, " GAME
- OVER");
- display_string(2, " Player 2 wins");
- }
- }
- if( (ballx == 113))
- {
- for(;;){
- moveback = 2;
- display_update();
- display_string(0, " GAME
- OVER");
- display_string(2, " Player 1 wins");
- }
- }
- if( (ballx == 13) && (posball == pos1))
- {
- course_generator();
- moveback = 0;
- impage = pos1;
- }
- if((ballx == 112) && (posball == pos2))
- {
- course_generator();
- moveback = 1;
- impage = pos2;
- }
- delay(1000);
- if (moveback == 0)
- {
- move_ballf();
- counter1++;
- delay(100);
- if (counter1 == course)
- {
- if ((impage == 0) | (impage == 1))
- {
- move_balld();
- counter1 = 0;
- }
- else if ((impage == 2))
- {
- move_ballu();
- counter1 = 0;
- }
- }
- }
- if (moveback == 1) // om impact sker vid antingen page 2 eller 3 ska den åka upp
- {
- move_ballb();
- counter2++;
- delay(100);
- if (counter2 == course)
- {
- if ((impage == 0) | (impage == 1))
- {
- move_balld();
- // posball uppdateras här?
- counter2 = 0;
- }
- else if ((impage == 2))
- {
- move_ballu();
- counter2 = 0;
- }
- }
- }
- }
- void move_player1u()
- {
- if(pos1 != 0)
- {
- int i;
- for(i=0; i<3; i++)
- // 3 bred
- {
- Screen[pos1*128 + 10 + i] = 0;
- }
- for(i=0; i<3; i++)
- {
- Screen[(pos1-1)*128 + 10 + i] = 255;
- }
- pos1--;
- }
- // OM pos 1 == 0 ska inget hända
- }
- void move_player1d()
- {
- if(pos1 != 2)
- {
- int i;
- for(i=0; i<3; i++)
- {
- Screen[pos1*128 + 10 + i] = 0;
- }
- for(i=0; i<3; i++)
- {
- Screen[(pos1+1)*128 + 10 + i] = 255;
- }
- pos1++;
- }
- }
- void move_player2u()
- {
- if(pos2 != 0)
- {
- int i;
- for(i=0; i<3; i++)
- {
- Screen[pos2*128 + 115 + i] = 0;
- }
- for(i=0; i<3; i++)
- {
- Screen[(pos2-1)*128 + 115 + i] = 255;
- }
- pos2--;
- }
- }
- void move_player2d()
- {
- if(pos2 != 2)
- {
- int i;
- for(i=0; i<3; i++)
- {
- Screen[pos2*128 + 115 + i] = 0;
- }
- for(i=0; i<3; i++)
- {
- Screen[(pos2+1)*128 + 115 + i] = 255;
- }
- pos2++;
- }
- }
- int main(void)
- {
- /* Set up peripheral bus clock */
- OSCCON &= ~0x180000;
- OSCCON |= 0x080000;
- /* Set up output pins */
- AD1PCFG = 0xFFFF;
- ODCE = 0x0;
- TRISECLR = 0xFF;
- PORTE = 0x0;
- /* Output pins for display signals */
- PORTF = 0xFFFF;
- PORTG = (1 << 9);
- ODCF = 0x0;
- ODCG = 0x0;
- TRISFCLR = 0x70;
- TRISGCLR = 0x200;
- /* Set up input pins */
- TRISDSET = (1 << 8);
- TRISFSET = (1 << 1);
- /* Set up SPI as master */
- SPI2CON = 0;
- SPI2BRG = 4;
- /* Clear SPIROV*/
- SPI2STATCLR &= ~0x40;
- /* Set CKP = 1, MSTEN = 1; */
- SPI2CON |= 0x60;
- /* Turn on SPI */
- SPI2CONSET = 0x8000;
- display_init();
- pos1 = 0;
- pos2 = 0;
- posball = 0;
- ballx = 70;
- moveback = 0;
- course = 8;
- counter1 = 0;
- counter2 = 0;
- impage = 0;
- int h;
- for(h = 0; h < 3; h++)
- Screen[posball*128 + ballx + h] = 224;
- //course_generator();
- for(;;){
- {
- display_Screen(0,Screen);
- if (getbtn() == 0x08) // om endast btn 4 är tryckt(nedåt)
- {
- move_player1u();
- }
- if (getbtn() == 0x04) // om endast btn 3 är tryckt(uppåt)
- {
- move_player1d();
- }
- if (getbtn() == 0x2)
- {
- move_player2u();
- }
- if(getbtn1() == 0x01)
- {
- move_player2d();
- }
- move_ball();
- // move_balld();
- delay(500000);
- //delay(1000000);
- }
- } ;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement