void pinInit(void) { UP_BUTTON_DIR(IN); UP_PULL_UP; DN_BUTTON_DIR(IN); DN_PULL_UP; LT_BUTTON_DIR(IN); LT_PULL_UP; RT_BUTTON_DIR(IN); RT_PULL_UP; AA_BUTTON_DIR(IN); AA_PULL_UP; BB_BUTTON_DIR(IN); BB_PULL_UP; MISO_DIR(IN); csFM_DIR(OUT); wpFM_DIR(OUT); wpFM_STATE(HIGH); // This active low pin prevents write operations to the memory array or the status register. holdFM_DIR(OUT); holdFM_STATE(HIGH); }
/* Main function. */ int main(void) { SET(DDRD, _BV(PD7), ON); LCD_CD_DIR(OUT); SCK_DIR(OUT); MOSI_DIR(OUT); MISO_DIR(IN); LCD_CS_SET(OFF); FRAM_HOLD_SET(OFF); FRAM_CS_SET(OFF); FRAM_WP_SET(OFF); // SS pin! BAT_LOW_LED_DIR(OUT); SPI_ENABLE; byte rx_data; rx_data = FRAM_read_sr(); FRAM_write_enable(); rx_data = FRAM_read_sr(); while (TRUE) {}; /* FRAM_write_enable(); // ~~~~~~~~~~~~~~~~ BEGIN TEST CODE ~~~~~~~~~~~~~~~~~~~~~~ byte tx_byte, rx_byte = OFF;; while (TRUE) { tx_byte = 0x03; rx_byte = FRAM_read_sr(); //writeNumToScreen(rx_byte); FRAM_write_enable(); FRAM_write_byte(FRAM_FRAME_BUFFER_START_MSB, FRAM_FRAME_BUFFER_START_LSB, tx_byte); rx_byte = FRAM_read_byte(FRAM_FRAME_BUFFER_START_MSB, FRAM_FRAME_BUFFER_START_LSB); BAT_LOW_LED(rx_byte); //writeNumToScreen(rx_byte); //_delay_ms(GAME_LOOP_DELAY); //_delay_ms(GAME_LOOP_DELAY); //_delay_ms(GAME_LOOP_DELAY); //_delay_ms(GAME_LOOP_DELAY); //_delay_ms(GAME_LOOP_DELAY); tx_byte = 0x04; FRAM_write_enable(); FRAM_write_byte(FRAM_FRAME_BUFFER_START_MSB, FRAM_FRAME_BUFFER_START_LSB, tx_byte); rx_byte = FRAM_read_byte(FRAM_FRAME_BUFFER_START_MSB, FRAM_FRAME_BUFFER_START_LSB); BAT_LOW_LED(rx_byte); //writeNumToScreen(rx_byte); } // ~~~~~~~~~~~~~~~~ END TEST CODE ~~~~~~~~~~~~~~~~~~~~~~ */ /* setup(); clearScreen(); clearFrameBuffer(); // Initialise variables. byte local_button_state[NUM_BUTTONS]; byte collision_state = FALSE; byte row = INITIAL_CURSOR_ROW, col = INITIAL_CURSOR_COL; byte pwm_value = OFF; byte screen_inverted = FALSE; PWM_VALUE(pwm_value); // Create a state machine based on the button values. while (TRUE) { // Slow down the game for the user. _delay_ms(GAME_LOOP_DELAY); // Create a local button state variable to avoid bstate changing during one cycle. copyButtonState(button_state, local_button_state); // ADMINISTRATIVE BUTTONS // // RESET THE GAME if ( local_button_state[BSTATE_A] ) { clearFrameBuffer(); clearScreen(); collision_state = FALSE; row = INITIAL_CURSOR_ROW; col = INITIAL_CURSOR_COL; game_state = GAME_STATE_IDLE; } // INVERT THE LCD DISPLAY. if ( local_button_state[BSTATE_B] ) { if (screen_inverted) { // Uninvert the screen. LCD_command_tx(LCD_CMD_NON_INVERTED); // Display inverse off. screen_inverted = FALSE; } else { LCD_command_tx(LCD_CMD_INVERTED); // Display inverse on. screen_inverted = TRUE; } _delay_ms(GAME_LOOP_DELAY); _delay_ms(GAME_LOOP_DELAY); } // CHANGE THE BRIGHTNESS OF THE SCREEN if ( local_button_state[BSTATE_ACTION] ) { if (pwm_value == OFF) { pwm_value = ON; } else if (pwm_value < PWM_STEP) { pwm_value = OFF; } else { pwm_value -= PWM_STEP; } PWM_VALUE(pwm_value); } // GAME PLAY BUTTONS // // IF COLLISION, GAME HAS BEEN LOST. WAIT UNTIL USER RESET. if (collision_state) { // If a collision occured draw a pattern over the screen. drawScreenPattern(); } else { // MOVE CURSOR UP. if ( game_state == GAME_STATE_UP ) { if (row==0) { row = LCD_MAX_ROWS; } else { row--; } } // MOVE CURSOR DOWN if ( game_state == GAME_STATE_DOWN ) { if (row == LCD_MAX_ROWS) { row = 0; } else { row++; } } // MOVE CURSOR LEFT if ( game_state == GAME_STATE_LEFT ) { if (col==0) { col = LCD_MAX_COLS; } else { col--; } } // MOVE CURSOR RIGHT if ( game_state == GAME_STATE_RIGHT ) { if (col == LCD_MAX_COLS) { col = 0; } else { col++; } } // If the cursor has been moved, check for a collision with the previous path. if ( game_state != GAME_STATE_IDLE ) { collision_state = checkForCollision(row,col); } addPixelToFrameBuffer(row, col, ON); drawFrameBuffer(); } } */ }