/***************************************************************************** * * Description: * Implements a menu * ****************************************************************************/ tU8 drawMenu(tMenu newMenu) { tU8 anyKey; menu = newMenu; //draw boarder lcdRect(menu.xPos, menu.yPos, menu.xLen, menu.yLen, menu.borderColor); lcdRect(menu.xPos+1, menu.yPos+16, menu.xLen-2, menu.yLen-17, menu.bgColor); //write header text lcdGotoxy(menu.headerTextXpos,menu.yPos+1); lcdColor(menu.borderColor,menu.headerColor); lcdPuts(menu.pHeaderText); //write choices cursor = menu.initialChoice; drawMenuCursor(); //dummy call just to reset previous key strokes checkKey(); while(1) { anyKey = checkKey(); if (anyKey != KEY_NOTHING) { //select specific function if (anyKey == KEY_CENTER) { return cursor; } else if (anyKey == KEY_UP) { if (cursor > 0) cursor--; else cursor = menu.noOfChoices - 1; drawMenuCursor(); } else if (anyKey == KEY_DOWN) { if (cursor < menu.noOfChoices - 1) cursor++; else cursor = 0; drawMenuCursor(); } } else osSleep(1); } }
/***************************************************************************** * * Description: * Draw/refresh game board * ****************************************************************************/ static void drawGame(void) { tS32 i,j; for (i=1; i<=BOARD_WIDTH; i++) for (j=1; j<=BOARD_HEIGHT; j++) if(board[i-1][j-1] != 0) lcdRectBrd(30+(i*6), 10+(j*6), 6, 6, 209,50,5); else lcdRect(30+(i*6), 10+(j*6), 6, 6, 0); }
/***************************************************************************** * * Description: * Draw game background and game board, initialize all variables * ****************************************************************************/ static void setupGame (tBool drawBoard) { tS32 i,j; //initialize random generator and reset score srand(ms); score = 0; #ifdef INCLUDE_EXAMPLE_GAME_BACKGROUND //draw background picture lcdIcon(0, 0, 130, 130, _brickWall_130x130c[2], _brickWall_130x130c[3], &_brickWall_130x130c[4]); #endif //draw game board if (drawBoard == TRUE) { lcdColor(1, 0xe0); lcdGotoxy(16, 116); lcdPuts(" Score: 0 "); lcdRect(34, 14, 64, 100, 3); lcdRect(36, 16, 60, 96, 0); } //initialise game board for (i=0; i<BOARD_WIDTH; i++) for (j=0; j<BOARD_HEIGHT; j++) board[i][j] = 0; currFigure = rand() % NUM_OF_FIGURE; currXpos = 3; currYpos = 0; insertFigure(currFigure, currXpos, currYpos); lastUpdate = ms; }
void demo() { lcdCls(); for (uint8_t i = 0x20; i <= 128; ++i) { lcdChar(i, LCD_XOR); } lcdUpdate(); _delay_ms(2000); lcdStrPos (3,11); lcdStr_P(PSTR("Free string"), LCD_WHITE); lcdStrPos (22,37); lcdStr_P(PSTR("positioning"), LCD_WHITE); lcdUpdate(); _delay_ms(3000); lcdCls(); lcdStr_P(PSTR("Lines, rectangles, circles."), LCD_BLACK); lcdUpdate(); _delay_ms(1000); lcdNewLine(); lcdStr_P(PSTR("Filled or unfilled."), LCD_BLACK); lcdUpdate(); _delay_ms(1000); lcdNewLine(); lcdStr_P(PSTR("Solid or XORed filling, text."), LCD_BLACK); lcdUpdate(); _delay_ms(5000); lcdRect(0, 0, LCD_Y_RES, LCD_X_RES, LCD_BLACK, LCD_FILL_BLACK); lcdStrPos(36,0); lcdStr_P(PSTR("MENU"), LCD_XOR); lcdRect(5,7,LCD_Y_RES-8, LCD_X_RES-10,LCD_WHITE, LCD_FILL_WHITE ); for (int i = 1; i < 8; ++i) { lcdStrPos(10, i*8); lcdInt(i, LCD_BLACK); lcdStr_P(PSTR(". Sample"), LCD_BLACK); lcdLine(5,8*i-1,LCD_X_RES-10, LCD_HORIZ, LCD_BLACK); } lcdUpdate(); _delay_ms(2000); lcdCircle(LCD_X_RES/2,LCD_Y_RES/2,30, LCD_XOR, LCD_FILL_XOR); lcdUpdate(); _delay_ms(2000); lcdBresenhamLine(0, 0, LCD_X_RES-1, LCD_Y_RES-1, LCD_XOR); lcdUpdate(); _delay_ms(2000); lcdBresenhamLine(0, LCD_Y_RES-1, LCD_X_RES-1, 0, LCD_XOR); lcdUpdate(); _delay_ms(5000); lcdCls(); lcdStr_P(PSTR("Per-pixel horizontal fill speed test in:"), LCD_BLACK);lcdUpdate();lcdNewLine(); _delay_ms(1000); lcdStr_P(PSTR("3..."), LCD_BLACK);lcdUpdate(); _delay_ms(1000); lcdStr_P(PSTR("2..."), LCD_BLACK);lcdUpdate(); _delay_ms(1000); lcdStr_P(PSTR("1..."), LCD_BLACK);lcdUpdate(); _delay_ms(1000); for (uint8_t x = 0; x < LCD_X_RES; ++x) { for (uint8_t y = 0; y < LCD_Y_RES; ++y) { lcdPixel(x,y,LCD_PIXEL_XOR); lcdUpdate(); } } _delay_ms(1000); lcdNewLine(); lcdStr_P(PSTR("Vertical in:"), LCD_XOR);lcdUpdate();lcdNewLine(); _delay_ms(1000); lcdStr_P(PSTR("3..."), LCD_XOR);lcdUpdate(); _delay_ms(1000); lcdStr_P(PSTR("2..."), LCD_XOR);lcdUpdate(); _delay_ms(1000); lcdStr_P(PSTR("1..."), LCD_XOR);lcdUpdate(); _delay_ms(1000); for (uint8_t y = 0; y < LCD_Y_RES; ++y) { for (uint8_t x = 0; x < LCD_X_RES; ++x) { lcdPixel(x,y,LCD_PIXEL_XOR); lcdUpdate(); } } _delay_ms(2000); lcdCls(); lcdStr_P(PSTR("Every pixel was filled with it's XORed value and updated."), LCD_XOR);lcdUpdate(); _delay_ms(5000); lcdCls(); lcdStr_P(PSTR("That's it!"), LCD_XOR); lcdNewLine(); lcdStr_P(PSTR("Thanks!"), LCD_XOR);lcdUpdate(); _delay_ms(5000); }