> The traditional way would be to arrange the 16 as a 4 x 4 and use IOC > (Interrupt-On-Change). If the PIC is inactive, the buttons will not be > being scanned so pull-ups (internal are available) on the columns (PortB > <4:7> ) and lows on the 4 row drive pins. On interrupt/wake-up, you'd > know only which column caused the IOC, so scan to get the row > I've used this method for an LED matrix. I don't know why I didn't think of it here. I'll prototype something out on a breadboard. If I understand correctly, the 4 IOC pins (columns) would be pulled up high and the 4 row pins would be driven low. When a button is pressed, an IOC is triggered and a timer would delay Xms as a debounce, then one would have to drive each of the row pins high one at a time to see what row was pressed. Thanks, Scott -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist