void init(void) { //Alustus cli(); //Estetään keskeytykset DDRE |= (1 << PE4) | (1 << PE5); //kaiutin pinnit ulostuloksi PORTE &= ~(1 << PE4); // pinni PE4 nollataan PORTE |= (1 << PE5); // pinni PE5 asetetaan TCCR3A &= ~( (1 << WGM31) | (1 << WGM30) ); // ajastin nollautuu, kun sen ja OCR3A rekisterin arvot ovat samat TCCR3B |= (1 << WGM32); TCCR3B &= ~(1 << WGM33); ETIMSK |= (1 << OCIE3A); OCR3AH = 0x00; // asetetaan OCR1A rekisterin arvoksi 0x22 OCR3AL = 0x22; TCCR3B |= (1 << CS32) | (1 << CS30); DDRA &= ~(1 << PA0); // näppäin pinnit sisääntuloksi DDRA &= ~(1 << PA2); DDRA &= ~(1 << PA4); DDRA |= (1 << PA6); // led pinni ulostuloksi lcd_init(); //LCD-näytön alustaminen lcd_write_ctrl(LCD_ON); lcd_write_ctrl(LCD_CLEAR); }
int annaseed() { lcd_write_ctrl(LCD_CLEAR); lcd_write_str("***Battleship***", 0); lcd_write_str("****************",1); int nappiylos = 0; int nappipohjassa = 0; int seed = 0; while(!(nappipohjassa && nappiylos)) { if(ButtonCenter){ nappipohjassa = 1; seed = seed +6; } else { if(nappipohjassa == 1){ nappiylos = 1; seed = seed + 4; } } seed++; if (seed > 542) seed = 0; } lcd_write_ctrl(LCD_CLEAR); _delay_ms(250); // Aikaa reagoida pelin alkamiseen return seed; }
void lcd_gotoxy (int x, int y) { if ( y==0 ) lcd_write_ctrl(LCD_DDRAM | (0x00+x)); else lcd_write_ctrl(LCD_DDRAM | (0x40+x)); }
void init_settings(void){ //Add costum characters for(int i=0;i<24;i++) { lcd_write_ctrl(LCD_CGRAM+i); lcd_write_data(__csettings[i]); } lcd_write_ctrl(LCD_CLEAR); lcd_write_data(2); lcd_write_data('E'); lcd_write_data('n'); lcd_write_data('a'); lcd_write_data('b'); lcd_write_data('l'); lcd_write_data('e'); lcd_write_data('/'); lcd_write_data('D'); lcd_write_data('i'); lcd_write_data('s'); lcd_write_data('a'); lcd_write_data('b'); lcd_write_data('l'); lcd_write_data('e'); lcd_gotoxy(0,1); lcd_write_data('A'); lcd_write_data('c'); lcd_write_data('c'); lcd_write_data('e'); lcd_write_data('l'); lcd_write_data('e'); lcd_write_data('r'); lcd_write_data('a'); lcd_write_data('t'); lcd_write_data('i'); lcd_write_data('o'); lcd_write_data('n'); lcd_gotoxy(15,1); if(acceleration == 1) { lcd_write_data(1); } else { lcd_write_data(0); } }
void init_menu(void) { //Start randomizer for obstacles start_timer_for_randomizer(); //Add right arrow character for(int i=0;i<8;i++) { lcd_write_ctrl(LCD_CGRAM+i); lcd_write_data(__cmenu[i]); } refresh_menu(); lcd_gotoxy(0,0); lcd_write_data(0); start = 1; }
void refresh_menu() { lcd_write_ctrl(LCD_CLEAR); lcd_gotoxy(1,0); lcd_write_data('S'); lcd_write_data('T'); lcd_write_data('A'); lcd_write_data('R'); lcd_write_data('T'); lcd_gotoxy(8,0); lcd_write_data('S'); lcd_write_data('E'); lcd_write_data('T'); lcd_write_data('T'); lcd_write_data('I'); lcd_write_data('N'); lcd_write_data('G'); lcd_write_data('S'); lcd_gotoxy(3,1); lcd_write_data('H'); lcd_write_data('I'); lcd_write_data('G'); lcd_write_data('H'); lcd_write_data(' '); lcd_write_data('S'); lcd_write_data('C'); lcd_write_data('O'); lcd_write_data('R'); lcd_write_data('E'); lcd_write_data('S'); }
int main(void) { /*Valikot*/ init(); int vaikeus = 25; // Oletus = helppo char merkki = 0b00111110; int seed = annaseed(); char y = 0; // valikko muuttujia char z = 0; while (1) { y = 0; z = 0; lcd_write_ctrl(LCD_CLEAR); lcd_write_str(" Pelaa nyt", 0); //Main menu lcd_write_str(" Vaikeustaso", 1); while (1) { lcd_gotoxy(0,y); lcd_write_data(' '); if (ButtonDown && y < 1) y++; if (ButtonUp && y > 0) y--; if (ButtonCenter) { while (ButtonCenter) // ei poistuta funktiosta nappipohjassa _delay_ms(50); break; } lcd_gotoxy(0,y); lcd_write_data(merkki); _delay_ms(50); } while (y == 0) { // Aloita peli switch (pelifunktio(vaikeus, seed)) { case 0: // Voitto lcd_write_ctrl(LCD_CLEAR); lcd_write_str("*****VOITTO*****", 0); while (ButtonCenter) // Odotetaan että nappi päästetään irti _delay_ms(50); nyancat(); break; case 1: // Häviö lcd_write_ctrl(LCD_CLEAR); lcd_write_str("*****HAVIO*****", 0); havio(); _delay_ms(500); while (!(ButtonCenter)) // Voitossa tätä ei tarvita koska nyan huolehtii napin päästön _delay_ms(50); while (ButtonCenter) _delay_ms(50); break; case 2: continue; } lcd_write_ctrl(LCD_CLEAR); lcd_write_str(" Uusi peli", 0); lcd_write_str(" Valikkoon", 1); while (1) { lcd_gotoxy(0, z); lcd_write_data(' '); if (ButtonDown && z < 1) z++; if (ButtonUp && z > 0) z--; if (ButtonCenter) { while (ButtonCenter) _delay_ms(50); break; } lcd_gotoxy(0,z); lcd_write_data(merkki); _delay_ms(50); } if (z == 0) { y = 0; seed++; } else y = 5; //hypätään seuraavien ehtojen yli } if (y == 1) { vaikeus = 0; lcd_write_ctrl(LCD_CLEAR); lcd_write_str(" Helppo (25)", 0); lcd_write_str(" Vaikea (10)", 1); while (1) { lcd_gotoxy(0, vaikeus); lcd_write_data(' '); if (ButtonDown && vaikeus < 1) vaikeus++; if (ButtonUp && vaikeus > 0) vaikeus--; if (ButtonCenter) { while (ButtonCenter) _delay_ms(50); break; } lcd_gotoxy(0,vaikeus); lcd_write_data(merkki); _delay_ms(50); } if (vaikeus == 0) vaikeus = 25; else // Jos lisätään tasoja muuta ifiksi vaikeus = 10; } } }
void piirtofunktio(int (*kentta)[10], int vasenyk, int x, int y, int ammusmaara) { /* Ei muokkaa mitään, piirtää pelikentän */ lcd_write_ctrl(LCD_CLEAR); //piirretään varmmaan n.10x sekunnissa TAI ainakun käyttäjä painaa nappia char avaamatonruutu = '^'; char tyhjaruutu = '.'; char taysiruutu = '*'; lcd_gotoxy(0,0); for(int i = 0; i<10; i++) { switch(kentta[i][vasenyk]) { case 1: case 0: lcd_write_data(avaamatonruutu); break; case 2: lcd_write_data(tyhjaruutu); break; case 3: lcd_write_data(taysiruutu); break; } } //yksinkertaisuuden takia en käytä sisäkkäistä silmukkaa kahdella kierroksella lcd_write_data(' '); lcd_write_data(' '); lcd_write_data('A'); lcd_write_data('='); //http://stackoverflow.com/questions/1114741/how-to-convert-int-to-char-c if(ammusmaara > 9) lcd_write_data((char)(((int)'0')+(ammusmaara / 10))); else lcd_write_data(' '); lcd_write_data((char)(((int)'0')+(ammusmaara % 10))); //kaikki 16 käytetty //alemman rivin piirto lcd_gotoxy(0,1); for(int i = 0; i<10; i++) { switch(kentta[i][vasenyk+1]) { case 1: case 0: lcd_write_data(avaamatonruutu); break; case 2: lcd_write_data(tyhjaruutu); break; case 3: lcd_write_data(taysiruutu); break; } } lcd_write_data(' '); lcd_write_data(' '); lcd_write_data('L'); lcd_write_data('='); if(y > 8) { //Rivin korkeus, pelaajalle näytetään rivi + 1 lcd_write_data('1'); y = y - 10; } else { lcd_write_data(' '); } lcd_write_data((char)(((int)'0')+(y+1))); }