Advertisement
milanmetal

[RSDMK] Kol 3 // Igra memorije

Jun 5th, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.97 KB | None | 0 0
  1. #include <c8051f340.h>
  2. #include <stdlib.h>      
  3. #include "time.h"
  4. #include "TFT.h"
  5. #include "joy.h"
  6. #include "bitmap.h"
  7.  
  8. void OSCILLATOR_Init (void);          
  9. void PORT_Init (void);
  10. bit iscrtano = 0;
  11.  
  12. unsigned int *slike[4] = {winter, spring, summer, autumn};
  13. int pamtim[4];
  14. int zapamceno[4];
  15.  
  16. void gen_rand_bmp() {
  17.     int i = 0;
  18.     for(i = 0; i < 4; i++) {
  19.         pamtim[i] = rand()%4;
  20.         TFT_drawBitmap(i*32, 20, 32, 32, slike[pamtim[i]], 1);
  21.         delay_ms(100);
  22.  
  23.     }
  24.    
  25.     iscrtano = 0;  
  26. }
  27. void target()
  28. {
  29.     int i = 0;
  30.     TFT_setColor(0, 0, 255);
  31.     for(i = 0; i < 4; i++) {
  32.         TFT_drawRect(i*32, 70, i*32 + 32, 102);
  33.     }  
  34. }
  35.  
  36. void gen_index(char smer, char sp, int *h, int *v){
  37.     switch(smer) {
  38.         case 'y':
  39.             switch(sp) {
  40.                 case 's':
  41.                     if(*v > 0) {
  42.                         (*v)--;
  43.                     }
  44.                 break;
  45.  
  46.                 case 'p':
  47.                      if(*v < 3) {
  48.                         (*v)++;
  49.                     }
  50.                 break;
  51.             }  
  52.         break;
  53.  
  54.         case 'x':
  55.             switch(sp) {
  56.                 case 's':
  57.                     if(*h > 0) {
  58.                         (*h)--;
  59.                     }
  60.                 break;
  61.  
  62.                 case 'p':
  63.                     if(*h < 3) {
  64.                         (*h)++;
  65.                     }
  66.                 break;
  67.             }
  68.         break;
  69.     }
  70. }
  71.  
  72. void main(void)
  73. {
  74.     int joyX, joyY, prevX, prevY;
  75.     bit fire, prevFire;
  76.     int hor, ver;
  77.     int i = 0;
  78.     int wl = 0;
  79.    
  80.  
  81.     PCA0MD &= ~0x40;    // Watchdog tajmer iskljucen
  82.  
  83.     OSCILLATOR_Init();  // Inicijalizacija oscilatora (Fosc = 22.1184 MHz)
  84.     TIME_Init();        // Inicijalizacija sistemskog vremena (koristi se prekid tajmera 2)
  85.     PORT_Init();        // Inicijalizacija portova
  86.     TFT_Init();         // Inicijalizacija displeja
  87.     JOY_Init();         // Inicijalizacija dzojstika
  88.  
  89.     TFT_clrScr();
  90.  
  91.     //test aplikacija:
  92.     while (1)
  93.     {
  94.         TFT_setColor(0, 0, 0);
  95.         TFT_clrScr();
  96.  
  97.         ver = 0;
  98.         hor = 0;
  99.  
  100.         //citanje X pozicije
  101.         prevX = joyX;
  102.         joyX = JOY_ReadX();
  103.  
  104.         //citanje Y pozicije
  105.         prevY = joyY;
  106.         joyY = JOY_ReadY();
  107.  
  108.         //citanje stanja tastera
  109.         prevFire = fire;
  110.         fire = JOY_ReadTrigger();
  111.  
  112.         gen_rand_bmp();
  113.        
  114.         delay_ms(1000);
  115.  
  116.         TFT_setColor(0, 0, 0);
  117.         TFT_clrScr();
  118.  
  119.         target();
  120.         //TFT_drawBitmap(0, 63, 32, 32, winter, 1);
  121.  
  122.         while(fire) {
  123.  
  124.                     //citanje X pozicije
  125.             prevX = joyX;
  126.             joyX = JOY_ReadX();
  127.    
  128.             //citanje Y pozicije
  129.             prevY = joyY;
  130.             joyY = JOY_ReadY();
  131.             fire = JOY_ReadTrigger();
  132.  
  133.             if (prevX != joyX ){
  134.                 if(joyX > 126) {
  135.                     gen_index('x', 'p', &hor, &ver);
  136.                 }
  137.    
  138.                 if(joyX < 3) {
  139.                     gen_index('x', 's', &hor, &ver);
  140.                 }
  141.                
  142.                 zapamceno[hor] = ver;  
  143.             //  TFT_drawBitmap(hor * 32, 70, 32, 32, slike[ver], 1);
  144.             }
  145.  
  146.             if (prevY != joyY ){
  147.                 if(joyY > 126) {
  148.                     gen_index('y', 'p', &hor, &ver);
  149.                 }
  150.    
  151.                 if(joyY < 3) {
  152.                     gen_index('y', 's', &hor, &ver);
  153.                 }
  154.                 zapamceno[hor] = ver;  
  155.                 //TFT_drawBitmap(hor * 32, 70, 32, 32, slike[ver], 1);
  156.             }
  157.             TFT_drawBitmap(hor * 32, 70, 32, 32, slike[ver], 1);
  158.        
  159.  
  160.     /*  if (prevX != joyX || prevY != joyY || fire != prevFire) //doslo je do promene?
  161.         {
  162.             TFT_setColor(0, 0, 0);              //crno
  163.             TFT_fillCircle(prevX, prevY, 4);    //izbrisi krug sa trenutne pozicije
  164.  
  165.             if (fire)
  166.                 TFT_setColor(255, 255, 0);      //zuto
  167.             else
  168.                 TFT_setColor(255, 0, 0);        //crveno
  169.             TFT_fillCircle(joyX, joyY, 4);      //nacrtaj krug na novoj poziciji
  170.            
  171.             target();                           //ponovo nacrtaj metu
  172.            
  173.             if (fire)
  174.                 TFT_setColor(255, 255, 0);      //zuto
  175.             else
  176.                 TFT_setColor(255, 0, 0);        //crveno
  177.             TFT_fillCircle(joyX, joyY, 4);      //nacrtaj krug na novoj poziciji
  178.         } */
  179.        
  180.         }
  181.         wl = 1;
  182.         for(i = 0; i < 4; i++) {
  183.             if(pamtim[i] != zapamceno[i]) {
  184.            
  185.                 wl = 0;
  186.                 break;
  187.             }
  188.         }
  189.        TFT_setColor(255, 255, 255);
  190.         switch(wl) {
  191.             case 0:
  192.                   TFT_print("YOU LOSE", 40, 60, 0);
  193.             break;
  194.  
  195.             case 1:
  196.                   TFT_print("YOU WIN", 40, 60, 0);
  197.             break;
  198.         }
  199.        
  200.         delay_ms(1000);    
  201.     }                            
  202.  }
  203.  
  204. void PORT_Init (void)
  205. {
  206.    P2MDIN |= 0x0F;              // 4 najniza bita porta P2 -> digitalni
  207.    P2MDOUT = 0x0C;              // Pinovi za LED -> push-pull izlazi
  208.  
  209.    // Crossbar inicijalizacija
  210.    XBR1    = 0x40;              // Dozvola crossbar-a i slabih pull-up otpornika
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement