80188 MP3 Player

This is an MP3 player I built for the EE/CS 52 course at Caltech. It can read and play MP3 files from an IDE hard drive and has a simple interface with keys and a 2x24 LCD. The system is controlled with a 80188 microprocessor. This was my first introduction into electronics, so it was a pretty memorable project for me.


For the project, the major hardware components were already specified, and we were provided a premade prototyping PCB board to build on.

However, we had a fair amount of freedom (or work to do) in the implementation details - what buffers/latches to use for the bus, how to hook up chip select and interrupt signals, required CPLD state machines, etc.


The general software interface was also provided, along with the code to read a FAT filesystem and parse ID data from an MP3 player. We just had to write some of the hardware-specific implementations, such as:

I also implemented some minor extra UI features like LCD text scrolling and volume / treble / bass settings.

Snake Game Easter Egg

The MP3 player also features a snake minigame! This is implemented via custom LCD characters; each individual LCD character block is treated as a 3x2 grid, for a 6x48 game grid. On each render, new custom characters are created to render the snake and the food correctly (though because the LCD is limited to 8 different custom characters at a time, there will be some rendering issues once the snake becomes long enough). To make the game more interesting/difficult, the game update speed increases by 25% each time food is eaten.