Advertisement
milanmetal

[RSDMK] Pokusaj K3 BLABLALEPTEJEBO

Jun 3rd, 2018
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.26 KB | None | 0 0
  1. #include <c8051f340.h>        
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "time.h"
  5. #include "TFT.h"
  6. #include "joy.h"
  7. #include "bitmap.h"
  8.  
  9. //#define int byte
  10.  
  11. byte prevXX = 0;
  12. byte prevYY = 0;
  13. int xx = 0;
  14. /*int niz1[300];
  15. int niz2[300];
  16. int niz3[30];
  17. int niz4[30000];
  18. int niz5[400];*/
  19.  
  20. void OSCILLATOR_Init (void);          
  21. void PORT_Init (void);
  22.  
  23. void intToStr(int num, char *digits) {
  24.     // broj cifara
  25.     char digitCnt   = 0;
  26.     // pomocna cifra
  27.     char digitTmp;
  28.  
  29.     char i = 0;
  30.  
  31.     while(num) {
  32.         // +'0' prisiljava konverziju integera u char,
  33.         // kastovanje iz nekog razloga ne radi.
  34.         digitTmp = (num % 10)+'0';
  35.         num = num / 10;
  36.        
  37.         /*
  38.          * Za one koji zele da vide kako radi ovaj while(num)
  39.          * Ispisuje jednu po jednu cifru... Radice dobro samo ako se
  40.          * koristi van neke druge funkcije, pozoves samu negdje npr.
  41.          */
  42.        
  43.         *(digits+digitCnt) = digitTmp;
  44.         digitCnt++;
  45.     }
  46.  
  47.     // u ovom trenutku imamo sve cifre, ali naopako poslagane. Obrcem.
  48.     for(i = 0; i < digitCnt / 2; i++) {
  49.                                                     // komentari za prvi prolaz petlje:
  50.         digitTmp = *(digits+i);                     // uzmem prvu cifru niza
  51.         /*
  52.          * -1 postoji da se odmaknem korak nazad
  53.          * od terminacionog karaktera
  54.          */
  55.         *(digits+i) = *(digits+digitCnt-1-i);       // na prvu stavim poslednju
  56.         *(digits+digitCnt-1-i) = digitTmp;          // na poslednju stavim prvu
  57.                                                     // i proces se ponavlja sa 2. i n-1, sa 3. i n-2 cifrom itd.
  58.     }
  59.     // pravim string, dodajem terminacioni karakter na kraj.
  60.    // *(digits+digitCnt) = '\0';
  61.     //return digits;
  62. }
  63.  
  64. void randDraw(int imgSizeX, int imgSizeY, bitmapdatatype dat)
  65. {
  66.     int x = rand() % (127 - imgSizeX);
  67.     int y = rand() % (127 - imgSizeY);
  68.  
  69.     TFT_setColor(255, 255, 255);
  70.     TFT_fillRect(prevXX, prevYY, prevXX + imgSizeX, prevYY + imgSizeY);
  71.            
  72.     prevXX = x;
  73.     prevYY = y;
  74.  
  75.     TFT_drawBitmap(x, y , imgSizeX, imgSizeY, dat, 1);
  76.  
  77. }
  78.  
  79.  
  80. void target()
  81. {
  82.     TFT_setColor(255, 255, 255);
  83.     TFT_drawLine(0, 63, 127, 63);
  84.     TFT_drawLine(63, 0, 63, 127);
  85.  
  86.     TFT_drawCircle(63, 63, 16);
  87.     TFT_drawCircle(63, 63, 32);
  88.     TFT_drawCircle(63, 63, 48);
  89.     TFT_drawCircle(63, 63, 64);
  90. }
  91.  
  92. void main(void)
  93. {
  94.     int joyX, joyY, prevX, prevY;
  95.     bit fire, prevFire;
  96.     int timeout;
  97.     int score = 5;
  98.     char score_str[5] = "";// = intToStr(int num, char *digits)
  99.     //char label[16] = "Score: ";
  100.     //char *jebemliga;
  101.  
  102.     PCA0MD &= ~0x40;    // Watchdog tajmer iskljucen
  103.  
  104.     OSCILLATOR_Init();  // Inicijalizacija oscilatora (Fosc = 22.1184 MHz)
  105.     TIME_Init();        // Inicijalizacija sistemskog vremena (koristi se prekid tajmera 2)
  106.     PORT_Init();        // Inicijalizacija portova
  107.     TFT_Init();         // Inicijalizacija displeja
  108.     JOY_Init();         // Inicijalizacija dzojstika
  109.  
  110.     TFT_clrScr();
  111.     TFT_fillScr(255,255,255);
  112.  
  113.     //test aplikacija:
  114.     while (1)
  115.     {
  116.        
  117.         intToStr(score, score_str);
  118.  
  119.         //citanje X pozicije
  120.         prevX = joyX;
  121.         joyX = JOY_ReadX();
  122.  
  123.         //citanje Y pozicije
  124.         prevY = joyY;
  125.         joyY = JOY_ReadY();
  126.  
  127.         //citanje stanja tastera
  128.         prevFire = fire;
  129.         fire = JOY_ReadTrigger();
  130.  
  131.         if(sec_flag) {
  132.             randDraw(64, 64, bird);
  133.  
  134.  
  135.             TFT_print(score_str, 5, 5, 0);
  136.            
  137.             sec_flag = 0;
  138.         }
  139.  
  140.         if (prevX != joyX || prevY != joyY || fire != prevFire) //doslo je do promene?
  141.         {
  142.  
  143.             TFT_setColor(255, 255, 255);                // belo
  144.             TFT_fillCircle(prevX, prevY, 4);    //izbrisi krug sa trenutne pozicije
  145.  
  146.             if (fire)
  147.                 TFT_setColor(0, 255, 0);        //zeleno
  148.             else
  149.                 TFT_setColor(255, 0, 0);        //crveno
  150.             TFT_fillCircle(joyX, joyY, 4);      //nacrtaj krug na novoj poziciji
  151.            
  152.             //target();                         //ponovo nacrtaj metu
  153.            
  154.             if (!fire){
  155.                 if((joyX >= prevXX) && (joyX <= prevXX + 64) && (joyY >= prevYY) && (joyY <= prevYY + 64))
  156.                 {
  157.                     score++;
  158.                     sec_flag = 1;
  159.                 }
  160.                 //intToStr(score, score_str);
  161.             }
  162.        
  163.         }      
  164.  
  165.     }                            
  166.  }
  167.  
  168. void PORT_Init (void)
  169. {
  170.    P2MDIN |= 0x0F;              // 4 najniza bita porta P2 -> digitalni
  171.    P2MDOUT = 0x0C;              // Pinovi za LED -> push-pull izlazi
  172.  
  173.    // Crossbar inicijalizacija
  174.    XBR1    = 0x40;              // Dozvola crossbar-a i slabih pull-up otpornika
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement