Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <c8051f340.h>
- #include <stdlib.h>
- #include "time.h"
- #include "TFT.h"
- #include "joy.h"
- #include "bitmap.h"
- void OSCILLATOR_Init (void);
- void PORT_Init (void);
- bit iscrtano = 0;
- unsigned int *slike[4] = {winter, spring, summer, autumn};
- int pamtim[4];
- int zapamceno[4];
- void gen_rand_bmp() {
- int i = 0;
- for(i = 0; i < 4; i++) {
- pamtim[i] = rand()%4;
- TFT_drawBitmap(i*32, 20, 32, 32, slike[pamtim[i]], 1);
- delay_ms(100);
- }
- iscrtano = 0;
- }
- void target()
- {
- int i = 0;
- TFT_setColor(0, 0, 255);
- for(i = 0; i < 4; i++) {
- TFT_drawRect(i*32, 70, i*32 + 32, 102);
- }
- }
- void gen_index(char smer, char sp, int *h, int *v){
- switch(smer) {
- case 'y':
- switch(sp) {
- case 's':
- if(*v > 0) {
- (*v)--;
- }
- break;
- case 'p':
- if(*v < 3) {
- (*v)++;
- }
- break;
- }
- break;
- case 'x':
- switch(sp) {
- case 's':
- if(*h > 0) {
- (*h)--;
- }
- break;
- case 'p':
- if(*h < 3) {
- (*h)++;
- }
- break;
- }
- break;
- }
- }
- void main(void)
- {
- int joyX, joyY, prevX, prevY;
- bit fire, prevFire;
- int hor, ver;
- int i = 0;
- int wl = 0;
- 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();
- //test aplikacija:
- while (1)
- {
- TFT_setColor(0, 0, 0);
- TFT_clrScr();
- ver = 0;
- hor = 0;
- //citanje X pozicije
- prevX = joyX;
- joyX = JOY_ReadX();
- //citanje Y pozicije
- prevY = joyY;
- joyY = JOY_ReadY();
- //citanje stanja tastera
- prevFire = fire;
- fire = JOY_ReadTrigger();
- gen_rand_bmp();
- delay_ms(1000);
- TFT_setColor(0, 0, 0);
- TFT_clrScr();
- target();
- //TFT_drawBitmap(0, 63, 32, 32, winter, 1);
- while(fire) {
- //citanje X pozicije
- prevX = joyX;
- joyX = JOY_ReadX();
- //citanje Y pozicije
- prevY = joyY;
- joyY = JOY_ReadY();
- fire = JOY_ReadTrigger();
- if (prevX != joyX ){
- if(joyX > 126) {
- gen_index('x', 'p', &hor, &ver);
- }
- if(joyX < 3) {
- gen_index('x', 's', &hor, &ver);
- }
- zapamceno[hor] = ver;
- // TFT_drawBitmap(hor * 32, 70, 32, 32, slike[ver], 1);
- }
- if (prevY != joyY ){
- if(joyY > 126) {
- gen_index('y', 'p', &hor, &ver);
- }
- if(joyY < 3) {
- gen_index('y', 's', &hor, &ver);
- }
- zapamceno[hor] = ver;
- //TFT_drawBitmap(hor * 32, 70, 32, 32, slike[ver], 1);
- }
- TFT_drawBitmap(hor * 32, 70, 32, 32, slike[ver], 1);
- /* if (prevX != joyX || prevY != joyY || fire != prevFire) //doslo je do promene?
- {
- TFT_setColor(0, 0, 0); //crno
- TFT_fillCircle(prevX, prevY, 4); //izbrisi krug sa trenutne pozicije
- if (fire)
- TFT_setColor(255, 255, 0); //zuto
- else
- TFT_setColor(255, 0, 0); //crveno
- TFT_fillCircle(joyX, joyY, 4); //nacrtaj krug na novoj poziciji
- target(); //ponovo nacrtaj metu
- if (fire)
- TFT_setColor(255, 255, 0); //zuto
- else
- TFT_setColor(255, 0, 0); //crveno
- TFT_fillCircle(joyX, joyY, 4); //nacrtaj krug na novoj poziciji
- } */
- }
- wl = 1;
- for(i = 0; i < 4; i++) {
- if(pamtim[i] != zapamceno[i]) {
- wl = 0;
- break;
- }
- }
- TFT_setColor(255, 255, 255);
- switch(wl) {
- case 0:
- TFT_print("YOU LOSE", 40, 60, 0);
- break;
- case 1:
- TFT_print("YOU WIN", 40, 60, 0);
- break;
- }
- delay_ms(1000);
- }
- }
- 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