The main goal of this project was to write and develop a graphical version of the card game commonly referred to as Memory for use on an Atmel Mega32 microcontroller unit. Memory is a card game where the player tries to match pairs of identical cards together by only flipping any two cards over at a time. If the two selected cards match, they are removed from the current playing field; otherwise they are flipped back over. The challenge of the game is remembering where certain cards are located within the playing field so that future matches can be made.

To implement this popular game onto the microcontroller, the project was broken into two main objectives:

  1. To implement a fully functional graphical version of Memory in black and white. The user will utilize the keyboard for selecting cards/other on-screen game control. Each player will be timed in his/her completion of one game and a small high score table will be implemented to keep track of our best players. Additionally, two different difficulty levels will be available for selection, which will vary the number of cards that are dealt onto the playing field.
  2. To integrate a Sega Genesis controller into the game to allow the user an easier and more comfortable game control interface.

This project was chosen not only because it is always fun to create, develop, and play a video game, but also because it integrates all of the major lab aspects of ECE 476 into a single, more complex assignment. Our version of Memory demonstrates the use of complex state machines, video generation with a microcontroller, serial communications, and interfacing with third-party products.