You can also use shift registers to read the keyboard and output information to the display. I did this once to hook up a 16 key matrix keypad and a parallel LCD (a total of 15 pins) to a Basic Stamp using only six pins! I can't remeber what exact registers I used but a lot of them are chainable too, just as long as everything on them is going the same direction (input or output). Anyway when I read the keypad I shifted in the data from the keypad shift register (connected by three pins, DQ, CLK, and RST) simply by pulsing reset, then pulsing clock. Every time I pulsed the clock, DQ would change, high or low, depending on the state of the pin that was relatvie to which pulse I sent out. So if pins 1, 4, and 6 on the shift were on, and the rest off (numbering starting at 1, ending at 8 ), I would get this data from shifting the bits into an integer: 10010100. Then all I had to do for the LCD was to shift OUT the data that I wanted on each pin of the LCD hookup so that the pins were in that state on the register, then I pulsed the LCD's clock. The LCD would read the states of the five pins connected to the register (Four data bits plus one to indicate half byte per clock data mode), then I would shift the next four bits to the resiters and pulse the LDC clock again. Cake! No extra microcontrollers, you just have to mind what direction the bits are going to end up in on the shift (input grabs bit 1 first and output pushes bit 8 first on the ones I used) Anyway, they can slow response time, but I never have had that problem. Give it a whirl for your input and output devices, but I wouldn't recommend memory devices. Best of luck on your project!