I'm going to attempt a slightly modified version of my previous schematic
What if you wire the lower mosfet's gate to the upper mosfet's drain? you can save the npn + resistors.
It's a good idea, but I think the voltage will be too low on the upper mosfet's drain, down to a max of ~300mV, depending on dut.
Anyway, it works with the transistor. Only I got some headaches from the mcu pin I assumed available, as it isn't connected to anything.
It's the only "free" IO pin, the other unused pins are analog only.
I'm not experienced in silabs 8051, so it took some datasheet reading to discover why it seemed to have weak pull up and not reacting to being set, when it was configured as push pull output.
Explanation found when I stared looking at the hardware peripheral assignments. Turns out it's assigned as MISO for the hardware SPI used to write to the display
So I had to switch it to a soft SPI to actually free up the pin. Not a big deal as it was running just 1 MHz SPI and waiting around for each byte to complete anyway.
It appears to be working correctly, but still needs a bit of software fine tuning.