Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <c8051f340.h>
- #include <stdlib.h>
- #include <string.h>
- #include "time.h"
- #include "TFT.h"
- #include "joy.h"
- #include "bitmap.h"
- //#define int byte
- byte prevXX = 0;
- byte prevYY = 0;
- int xx = 0;
- /*int niz1[300];
- int niz2[300];
- int niz3[30];
- int niz4[30000];
- int niz5[400];*/
- void OSCILLATOR_Init (void);
- void PORT_Init (void);
- void intToStr(int num, char *digits) {
- // broj cifara
- char digitCnt = 0;
- // pomocna cifra
- char digitTmp;
- char i = 0;
- while(num) {
- // +'0' prisiljava konverziju integera u char,
- // kastovanje iz nekog razloga ne radi.
- digitTmp = (num % 10)+'0';
- num = num / 10;
- /*
- * Za one koji zele da vide kako radi ovaj while(num)
- * Ispisuje jednu po jednu cifru... Radice dobro samo ako se
- * koristi van neke druge funkcije, pozoves samu negdje npr.
- */
- *(digits+digitCnt) = digitTmp;
- digitCnt++;
- }
- // u ovom trenutku imamo sve cifre, ali naopako poslagane. Obrcem.
- for(i = 0; i < digitCnt / 2; i++) {
- // komentari za prvi prolaz petlje:
- digitTmp = *(digits+i); // uzmem prvu cifru niza
- /*
- * -1 postoji da se odmaknem korak nazad
- * od terminacionog karaktera
- */
- *(digits+i) = *(digits+digitCnt-1-i); // na prvu stavim poslednju
- *(digits+digitCnt-1-i) = digitTmp; // na poslednju stavim prvu
- // i proces se ponavlja sa 2. i n-1, sa 3. i n-2 cifrom itd.
- }
- // pravim string, dodajem terminacioni karakter na kraj.
- // *(digits+digitCnt) = '\0';
- //return digits;
- }
- void randDraw(int imgSizeX, int imgSizeY, bitmapdatatype dat)
- {
- int x = rand() % (127 - imgSizeX);
- int y = rand() % (127 - imgSizeY);
- TFT_setColor(255, 255, 255);
- TFT_fillRect(prevXX, prevYY, prevXX + imgSizeX, prevYY + imgSizeY);
- prevXX = x;
- prevYY = y;
- TFT_drawBitmap(x, y , imgSizeX, imgSizeY, dat, 1);
- }
- void target()
- {
- TFT_setColor(255, 255, 255);
- TFT_drawLine(0, 63, 127, 63);
- TFT_drawLine(63, 0, 63, 127);
- TFT_drawCircle(63, 63, 16);
- TFT_drawCircle(63, 63, 32);
- TFT_drawCircle(63, 63, 48);
- TFT_drawCircle(63, 63, 64);
- }
- void main(void)
- {
- int joyX, joyY, prevX, prevY;
- bit fire, prevFire;
- int timeout;
- int score = 5;
- char score_str[5] = "";// = intToStr(int num, char *digits)
- //char label[16] = "Score: ";
- //char *jebemliga;
- PCA0MD &= ~0x40; // Watchdog tajmer iskljucen
- OSCILLATOR_Init(); // Inicijalizacija oscilatora (Fosc = 22.1184 MHz)
- TIME_Init(); // Inicijalizacija sistemskog vremena (koristi se prekid tajmera 2)
- PORT_Init(); // Inicijalizacija portova
- TFT_Init(); // Inicijalizacija displeja
- JOY_Init(); // Inicijalizacija dzojstika
- TFT_clrScr();
- TFT_fillScr(255,255,255);
- //test aplikacija:
- while (1)
- {
- intToStr(score, score_str);
- //citanje X pozicije
- prevX = joyX;
- joyX = JOY_ReadX();
- //citanje Y pozicije
- prevY = joyY;
- joyY = JOY_ReadY();
- //citanje stanja tastera
- prevFire = fire;
- fire = JOY_ReadTrigger();
- if(sec_flag) {
- randDraw(64, 64, bird);
- TFT_print(score_str, 5, 5, 0);
- sec_flag = 0;
- }
- if (prevX != joyX || prevY != joyY || fire != prevFire) //doslo je do promene?
- {
- TFT_setColor(255, 255, 255); // belo
- TFT_fillCircle(prevX, prevY, 4); //izbrisi krug sa trenutne pozicije
- if (fire)
- TFT_setColor(0, 255, 0); //zeleno
- else
- TFT_setColor(255, 0, 0); //crveno
- TFT_fillCircle(joyX, joyY, 4); //nacrtaj krug na novoj poziciji
- //target(); //ponovo nacrtaj metu
- if (!fire){
- if((joyX >= prevXX) && (joyX <= prevXX + 64) && (joyY >= prevYY) && (joyY <= prevYY + 64))
- {
- score++;
- sec_flag = 1;
- }
- //intToStr(score, score_str);
- }
- }
- }
- }
- void PORT_Init (void)
- {
- P2MDIN |= 0x0F; // 4 najniza bita porta P2 -> digitalni
- P2MDOUT = 0x0C; // Pinovi za LED -> push-pull izlazi
- // Crossbar inicijalizacija
- XBR1 = 0x40; // Dozvola crossbar-a i slabih pull-up otpornika
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement