Any 8051 can be used. And the external buss can be used to drive memory AND external hardware. However, you have to know how to assign the different hardware to different address blocks. This is done with the use of a 74HC138, which reads the MSBs of the address and sets 1 of is 8 pins low to drive active low chip enable (CE) lines. This breaks the data memory address block of 0x0000-0xFFFF into 8 different "banks" -
Y0 Low/Bank 0 - 0x0000-0x1FFF
Y1 Low/Bank 1 - 0x2000-0x3FFF
Y2 Low/Bank 2 - 0x4000-0x5FFF
Y3 Low/Bank 3 - 0x6000-0x7FFF
Y4 Low/Bank 4 - 0x8000-0x9FFF
Y5 Low/Bank 5 - 0xA000-0xBFFF
Y6 Low/Bank 6 - 0xC000-0xDFFF
Y7 Low/Bank 7 - 0xE000- 0xFFFF
The CE pin of the external memory is driven by Y0 on the 74HC138. This locks the external memory into bank 0. We then use output Y1 on the 138 to drive the input of a NOR gate. The gate "masks" the write strobe from the LCD as long as Y1 is high. You can then use the "movx" instruction to read from or write to your external hardware that is on the bus.
Shown below is the schematic that shows how to interface the LCD to the bus. The 74HC138 locks the 8K memory chip to address block 0x0000-0x1FFF while locking the LCD display to the 0x2000-0x3FFF address block. movx instructions executed on even numbered addresses in the address block of 0x2000-0x3FFF will write instructions to the LCD while movx instructions executed on odd numbered addresses in the address block of 0x2000-0x3FFF will write data to the LCD. The 74HC02 NOR gate "masks" the write pulse "WR" if CS0 from the HC138 is high. CS0 is high unless address the 0x2000-0x3FFF address block.
**broken link removed**