reverse engineering lcd display for sale

Next check the display response by changing the signal inputs and recording the response. You don’t need to record everything the display does just if it changes or not and if the display goes out. Since Pin 1 is negative voltage and no signal, and pin two is 0 voltage and no signal we can assume they are Vss. and ground.
Pin 3 and 4 are fixed high so start with Pin 5 checking one pin at a time, fix the voltage too high, or in this case 2.3 volts and observe what happens to the display.
Record the response of pin 5 then move to Pin 6 fixing it to high then observe the response on the display and record it. Continue with this process for pin 7 and pin 8. The changes on the display were funky symbols in the alphanumeric segments and random lighting up of the custom bar. You may notice the response only affects the custom bar or the alphanumeric bars make note of that because the pin data inputs may be bar specific.
Starting with Pin 3 start checking one pin at a time, fix the voltage to low or in this case 0 volts and observe what happens to the display. Pin 3 and 4 when set low shut down the display, pins 5 to 8 when set to low or 0 volts made different symbols in the alphanumeric segments, and different random lighting up of the symbols in the custom bar.

Over at DorkbotPDX in Portland, a member showed up with a stack of large LCD displays from point of sale terminals. [Paul] took it upon himself to reverse engineer the displays so that they can be recycled in future projects.
The control circuit for this LCD resides on a rather large PCB with quite a variety of components. The board was reduced to three main components: an MSM6255 display controller, a 32k RAM chip which is used as the framebuffer, and a tri-state driver.
With all the unneeded components out of the way, a custom board based around an ATmega88 MCU was added. This board was soldered in to interface with the LCD controller’s bus. This allows data to be written from the 128k flash ROM on the custom board into the frame buffer. Once this is done, the display controller will display the data on the LCD.
Now that data could be written, [Paul] figured out the correct configuration for the display controller. That was the final piece in getting images to show up correctly on the display. If you happen to find some old Micros 2700 POS terminals, [Paul]’s detailed write-up will help you scavenge the displays.

A large share of our business originates from customers who need our LCD reverse engineering services for a replacement display module. Their current supplier has discontinued the LCD series or no longer supplies Liquid Crystal Displays.
A short time ago a customer contacted our technical engineering support department and asked if we could develop a 40x2 custom character LCD display to replace a module that their previous supplier had discontinued. They required our LCD reverse engineering services to provide a drop-in equivalent including EL backlight and exact pin-out.
This display is much larger than most character LCD displays with a length of 9.8 inches and a width of 1.5 inches. Its character height is a little over ½ inch.
This large character display is a good solution for products that need to be read at a distance. This includes industrial, test and measurement, scales and many outdoor applications.
Although the standard display configuration is with an EL (Electro-luminescent) backlight, the character display can be manufactured with a LED (Light Emitting Diode) backlight.
EL backlights are AC (Alternating Current) driven which means there needs to be an inverter on the LCD or on the customers PCB to convert the DC (Direct Current) to AC. This adds cost and requires real estate on the PCB.
EL backlights now have a higher minimum order quantity of 500 displays per build. Focus is able to hold inventory in our Chandler warehouse if necessary.
EL backlights are limited in their size, when a larger backlight is required, a CCFL (Cold Cathode Fluorescent Lamp) is required. The challenge is that CCFL backlights in LCDs have been phased out.
LEDs can create hot and cold spots under the LCD glass. Most of the time the light can be ‘smoothed’ out with a diffuser, but the brighter the LED backlight is driven, the greater the chances of hot spots.
Character displays can be built in a variety of background and backlight colors. The photos below present a sampling of different options. Available colors include:
The standard operating temperature range for this character display is -20C to 60C, but it is possible to build the display as a wide temperature version that will operate from -30C to 70C.
If the display needs to operate to a lower temperature than -30C, it would be necessary to add a heater. Contact Focus Displays for help with your custom LCD heater.
The standard, stock display is built as a positive mode, but can be built as a negative mode.Positive mode means that there are dark letters on a light colored background.
Below are photos of two character displays in both positive and negative mode. Positive mode is standard, but the character LCD can be built as negative mode
The negative mode version requires the backlight to be on for the display to be readable, and is not the best solution for battery and solar powered products.
FSTN monochrome LCD displays contains a retardation film applied to the STN display to produce a black and white display. The film produces a higher contrast and wider viewing angle than STN or TN.
STN monochrome LCDs require less power and are less expensive to manufacture than TFT’s. They produce a sharper contrast then TN but less sharp then FSTN. Basic color options are Gray, Blue and Yellow/Green (most common). Other colors are available through the use of filters.
TN monochrome LCDs is the lowest cost of the three options. Contrast is not as sharp as STN and FSTN. Primary color options are black letters on a gray background. Other colors are available through the use of filters.
As mentioned at the beginning of the article. Focus Displays is able to design and build an equivalent character LCD to take the place of a discontinued display. Sometimes it may require LCD reverse engineering services.
Many times a one-time tooling or NRE (Non-Recurring Engineering) fee is required. This tooling fee is much lower for segment, character and monochrome graphic displays than it is for OLEDs (Organic light emitting diode) and TFT"s (thin-film-transistor).
The first step is for the customer to send Focus Displays the datasheets for the LCD they were using. If the customer does not have a current datasheet or there is a concern that it may not be accurate, Focus may be able to ‘estimate’ a cost from a photo.
Most LCD displays require some type of on-board controller driver processor. There are many companies that manufacture LCD IC’s. The challenge is that a controller from one company may not be 100% compatible with the controller from a second company.
Focus Display Solutions provides off-the-shelf standard displays as well as custom LCD design services to help companies replace their current LCD. Call Focus now (480-503-4295) if you need LCD reverse engineering services. Or fill out the contact form.

I have a LCD from the retail scale, the LCD connects to the existing controller via 16 pads and an elastomeric strip, from some measurements I took a long time ago I think there are 4 commons i.e. 1/4 bias so there should be 4 common and 12 segment lines.

Does anyone have any ideas or interest in the project? If you’d like to help reverse engineer one of these and have the tools/knowledge to do so but lack the Micro Arcade to work on let me know! If you have one but don’t want to risk damaging it but can help out, let me know!

Licensee may install and use the Software on more than one computer owned or managed by Licensee. However, such use is restricted to only applications involving the display.
Licensee may not reverse engineer, decompile or disassemble the Software. Panasonic shall not be bound by warranty for any defects in the Software caused by License"s reverse engineering, decompiling or disassembly of the Software.
Furthermore, Panasonic or its distributors or dealers will not be responsible for any damage to the Licensee caused by Licensee"s reverse engineering, decompiling or disassembly of the Software.
Furthermore, Panasonic makes absolutely no warranty for the use of this Software for any purpose other than for applications associated with the display with which this Software is bundled.

At 11 June 2013, 13:42:13 user Allan wrote: [reply @ Allan]Very interesting. Thanks for taking time to make these videos. What exactly does your breadboard circuit do in order to shift (scroll) to the next scan line on the LCD ?
At 24 August 2012, 7:22:43 user Giorgos Lazaridis wrote: [reply @ Giorgos Lazaridis]@kiranvarma-npeducations which software do you mean? The PIC software? It is very messy and i made it only for testing the LCD. If this is what you want, i can certainly give it to you. But it is not commented.
At 3 July 2012, 8:36:44 user kiranvarma-npeducations wrote: [reply @ kiranvarma-npeducations]Is that software shown in video is designed by you, its cool! simply generating binary code for bitmap images and serializing.. to LCD panel via some controller (i think from Philips). Which language that u have used to develop software. Final output in LCD panel is mind blowing, you are genius in both software and hardware part. Really amazing video, really reverse engineering. Thanks for such wonderful project tutorial. I will bookmark your site for my learning benefit
At 6 May 2012, 20:31:17 user Giorgos Lazaridis wrote: [reply @ Giorgos Lazaridis]@sdfdsfadsjk But first i will finish my coffee maker for which this LCD is supposed to go. But due to lack of funds, the project will be delayed for a while.
At 21 November 2011, 5:41:30 user Kammenos wrote: [reply @ Kammenos]@Annonymois sure there are methods for this, but not by hacking the LCD that way. There are programs for example for PCs and others for telephones to do this, there are also very VERY cheap gadgets (http://www.ebay.com/sch/?_kw=gsm%20spy&_clu=2&_fcid=5&_localstpos=&_sop=15&_stpos=&gbr=1). If i were you, i would start with a simple PC format, and then install a firewall on the PC. Any surveillance program installed would then be erased.
At 20 November 2011, 22:10:52 user Annonymois wrote: [reply @ Annonymois]Hi. I saw your YouTube video about reverse engineering an LCD screen. And some posters had said this process is used by hackers in order to spy on people through their computer screens? And I started googling this questions because I perceive I am being watched by people I know. I don"t know how. I suspect there is a website where the hackers stream the audio and visuals to the recipients who include friends and so-called family members. They drop subtle hints to me as to the fact they they know what I"m doing by posting comments on YouTube videos I"ve just watched or they repeat the words I"ve just spoken by writing it down on my Facebook wall or in my junk email subject line. If you google gang stalking, cause stalking, gas lighting, you will see that there are a lot of people who are experiencing electronic surveillance. It"s crazy. I know I saw a real life police show once and they were receiving visual feed from the cell phone of a criminal. I don"t know how they did it. But I have been abused by people I know at work and in the last year by my own family because they used to like / love me and now they hate me. My brothers family in particular and my nephew from my sister have been befriended by these cause stalkers and they constantly let me know I"m being watched. They don"t admit it but I"ve heard them talk about private conversations I"ve had when they were no where near me! It"s crazy.
I finally got my display working! It"s only 160x80 so I can get great refresh rates from a pic... right now the controller is an 18f2455 and i"m using it"s internal ram for the display. Currently it only displays a test image that I stored in program memory, but I plan to add a 5x7 font, a gal for timing logic, external serial display ram, and serial character input... then I"ll use it for console output on a couple of hacked linux devices. Thanks for all the information!!
I have obtained a large (200-300) lot of bare LCD Screens (no driver/controller boards). About half of them are 3.8" Sharp LQ038 screens. These were stored loose in a box and many are obviously broken. I would like to do something with these and I am at this point looking for a simple circuit so that I can test them, also possibly a way to turn them into digital photo frames. I am an Electrical Engineer, but it has been a while since I have done detailed component work like this and I have never worked with Color LCD displays before. Can someone direct me to where I can find some circuit designs that I may be able to use?
At 2 August 2011, 18:30:42 user Tom wrote: [reply @ Tom]Just recently got back to my lcd project... The M signal is to drive the LCD voltages: the col/seg drivers use it to alternate the voltage applied to the cells, otherwise the lifespan is shortened. The pic simply alternates M from high to low every frame.
My lcd is only 160x80, and I"ve generated a test image with a pic18f2455... I"m only running at 20MHz right now but the refresh rate is good because it"s a much smaller screen. Thanks again!!
At 12 April 2011, 21:00:08 user jparker wrote: [reply @ jparker]You are very good at debugging (reverse engineering). I like your honesty when you talk about your projects/experiments. You also inspire me to explore some of my broken devices parts. Hang on to the curiosity you have and it will be kind to you in the future I"m sure. Thx for the website.....
My first monochrome LCD, like yours, didn"t have a smart controlle, I put the LC7981 controller on it and it worked. My second monochrome LCD was this:
I had to do a change there. It"s been a long time and I don"t remember but here is bottom line: The SED1335 supports a 16 bit address bus and the memory on this LCD is only 8 kBytes. I found an 32 kBytes RAM with the same layout as the 8 kBytes. The difference was that the 8 kBytes RAM had two NC lines in the place of the two extra address lines on the 32 kBytes RAM. So, I replaced the RAM, hardwired the NC pins to the correct SED1335 pins and it worked perfectly :)
At 27 March 2011, 21:10:58 user Tom wrote: [reply @ Tom]Nice work! You gave me the idea to work on my own 160x80 lcd which has the same common and segment driver. Two questions if you don"t mind...
2. what is the M pin (pin 94 on the 79430 and pin 86 on the 79401) on your lcd connected to? i have a pin on my connector that goes to M on the drivers and i"m not sure what to do with it... the specs say M is an input - "LCD drive output alternating current (AC) signal"
You can have a 32MHz INTOSC (8MHz with 4x PLL; see section 5.2.2.6 of the 16F1934 data sheet). You can also use the MSSP to fetch bytes from the external memory for you at one bit per CPU cycle while sending the previous byte to the LCD, or get display data from internal program memory or even RAM instead.
Of more interest is that with small changes you can store tiles in program memory for easy character display. It is slightly slower, but can (barely) achieve 50Hz screen refresh with a fully tile-based screen layout. For example, code to choose among 64 tiles, 16x16 pixels in size (2kword program memory), might look like:

The contractor will physically examine the item; produce drawings and specifications through technical analysis performed during the reverse engineering process, and provide same for review. The contractor and the Government agree when the borrowed part will be returned or a Source Approval Request (SAR) package will be provided to the Government.
The following general guidelines are provided to assist in developing a data package. Additional information on reverse engineering is contained in MIL-HDBK-115, U.S. Army Reverse Engineering Handbook. For Reverse Engineering, also see the associated

Years ago, around the time DorkbotPDX"s meetup moved from Vendetta to NW Lucky Lab, Ben Bleything brought LCDs from decommissioned point-of-sale terminals to the meetup. I did some reverse engineering to get them working!
At the time, I wrote 3 blog articles aboug the reverse engineering effort. Only one of them survived from the early days of this website. Recently, I found the original text those old 3 articles, and also a small pile of the LCDs... which I"ll be giving away at upcoming meetings!
That big chip in the center is a Z80 processor, and the two memory chip above it appear to be the firmware and RAM it uses. The big chip right below the frame buffer memory is a IDT7132 dual-port RAM chip, which I believe the designers used to communicate between this Z80 and the main Z80 that runs the rest of the terminal (together with several other Z80s). But really, who cares about that? I just want to figure out how to scrape all that stuff off and get access to the display....
It also seems not all the power pins of all the chips are connected together. The LCD and its frame buffer, for example, do not connect to the same power as the Z80 and its memory.
The MSM6255 has two busses, both 8 bit data, 16 bit addresses. One bus is for the Z80 microcontroller, and the other is a dedicated bus for the frame buffer RAM chip. The LCD controller only has 9 configuration registers, and a single instruction register. It only listens on 1 of the 16 address lines, which select between the instruction register or the 9 config registers. To write to the chip, you write to instruction register with A0=1, with the number of the config reigster you want. Then you write again with A0=0 to configure. Repeat this process 9 times to configure everything. However, a few of the reigsters only matter in character mode, and this board is wired only for graphical mode.
Since there are no other chips on the Z80 bus, I just wired the LCD controller chip select low (fount at U20, pin 10), and then it only takes 1 write select signal (found at U13, pin 11) to strobe the data in. Of course, A0 and the 8 data lines have to correct before pulsing the write pin low.
To access the frame buffer, the is a 74HCT245 tri-state buffer which causes the Z80 data lines to drive the frame buffer data lines. The LCD controller also has an address mux controlled by the DIEN signal. Both of these fortunately are high for the controller to access the frame buffer and low when the Z80 bus drives the RAM. So I just shorted them together (found at U19, pin 2 and 11). The RAM has its read signal low all the time. All I had to do was short the RAM CS signal low (found at U20, pin 6) to allow it to work.
The frame buffer can be written at any time this way, but if this also happens to be at a moment when the LCD controller is reading, the screen will momentarily display whatever was on the frame buffer RAM data lines being driven by the 74HCT245 buffer. It appears this is the way the Micros 2700 worked.
The datasheet gives two suggestions for detecting times when the LCD controller isn"t reading the data lines, and one of them isn"t practical for large displays like this one. The other basically involves watching the CH0 signal from the controller and doing the framebuffer access right after it changes. I could not find the CH0 signal routed anywhere on the board, so I"m pretty sure Micros just didn"t use it (they certainly didn"t build the complex flip-flop sync circuit suggested in the MSM6255 datasheet). Maybe when I"ve got everything figured out I"ll wire CH0 to a port pin and write a bit of code that waits for it to change right before I do the framebuffer write. It looks like CH0 is about a 560 kHz square wave, so that"s plenty of time for a tight loop in the 18.432 MHz AVR to detect and complete the access. But for now, I"m not worrying about CH0.
On the top are three 74HC164 shift register chips. These are connected to the MOSI and SCLK signals, so whatever the last 3 bytes were on the SPI port, they end up driving the Z80 address and data bus. The board has two headers that plug into the socket for the RAM chip that was dedicated to the Z80, so power, ground and all the address and data lines are connected there. That just leave the 2 write strobes for the LCD controller and frame buffer RAM, and the enable signal to drive the frame buffer bus. Only 3 extra signals! Well, maybe a 4th when/if I connect CH0 to avoid flicker.
Clearly, I haven"t got the correct configuration for the LCD controller yet. The controller is designed to drive 2 sets of shift registers on the LCD, with 1, 2 or 4 bits per. This LCD seems to have only 1 shifter register with 4 bits, so I"m not entirely sure if I should use 2 or 4 bit mode, and exactly what the duty cycle setting should be isn"t clear either. I"ve tried many different settings (mostly randomly), and so far none have been perfect.
I"ll probably do one more session with the ohm meter to figure out more about how the LCD interfaces to the controller, and details about the frame buffer bus (which so far I"ve assumed is wired like the datasheet describes, but really all my probing has been on the Z80 bus and the many control signals).
First, the simple part, the backlight. It"s a cold cathode flourscent lamp, and there is a module inside the main power supply. It"s attached to the high voltage board deep inside, and so far I"ve just left it alone. I did stick my meter probe in there (past all the live 120 volt stuff in the way), and it looks like that module takes 24 volts DC input. Not at nice as 5 volts, but still not too bad. It looks like it can be easily separated and liberated from the big hulking power supply. The one sad bit is there is only 1 in there, with a Y cable to drive both LCDs.... so if everyone wants one of these LCDs for a project, half of them will need to acquire or build a CCFL driver.
The not-as-simple part (but still a lot simpler than the LCD config and frame buffer bus) is the LCD drive voltage. The LCD runs on 5 volts for its logic, and a negative voltage, up to -19 volts. The parts on the far right side of the board are a little switching power supply that converts +5 into a variable negative voltage.
At first I thought the littl blue trim pot was the answer, but I kept getting very random results, especially if I touched the board. It turns out the chip in the lower right corner is a X9C103 digitally controlled pot, which adjusts the LCD drive voltage (which is what controls the contrast). I thought about hooking it up to the microcontroller, but in the interest of getting this thing to work, I simply clipped it off the board and wiring in a concention 10K pot, which you can see in the photo. However, the digital control pot is there on the board, so when/if anyone else uses all this, it"s possible to control it from software. The X9C103 contains EEPROM memory to store the pot setting. I must have changed mine hundreds of times while touching the floating inputs with my fingers and wondering what I was doing that changed the LCD so much!
I had hoped to get this thing working before the next Dorkbot meeting, but it looks like I might have to put this whole thing on the shelf for a couple weeks (to make room for a paying project - which funds all this fun stuff....) I"m pretty sure I"ll get the LCD config and frame buffer issues worked out, and when I do it"s my hope everone in Portland Dorkbot who wants one of these displays can have one!
The wiring is pretty much like I described in the last entry... you need 3 control signals and the bus, which has 8 data lines and 16 address lines. I used SCK and MOSI to drive 3 shift register chips, so really this entire display interfaces with only 5 pins.
From the mail list..I"d love to take one of the LCDs home at the next meeting. Would I need "the big card" as well to get them running via your instructions? I"m hoping to just follow what you wrote exactly and see if I can get one displaying something for myself.
Yes, the display needs to be driven by the MSM6255 chip and its related circuitry, which is on the big card. The other stuff is a RAM chip, which holds the currently displayed image (the "frame buffer"), which is continuously read by the MSM6255. There"s also a "245 buffer chip, with lets you override the MSM6255"s control of the RAM, so you can write new image data into it. The display runs on +5 volts, as does the card. The display also needs a negative supply, which is produced from the +5 by the circuitry on the far edge of the card.
The motherboard has what looks like the same circuits on it, used to drive the other display. I haven"t traced out of the signals on the motherboard like I did on the card, but if people use up the cards and can"t figure out where to tap the signals on the motherboard, I could do it.
To use the display, you need to connect 8 data lines, 15 address lines, and 3 control signals (and short a couple signals to ground - and of course remove all unnecessary chips). Because the MEGA88 has so few I/O pins, I used three 74HC164 shift register chips connected to MOSI and SCLK to get all the address and data lines. If you used a chip like the MEGA644P with lots of I/O pins, you could probably just use I/O pins and not worry about the shift registers. Then again, there are never enough I/O pins so using only MOSI and SCLK is nice, even if it takes a little time to wait for the 3 bytes to shift out.
To write into the frame buffer is really very simple. You just output the 8 bit data you want, and the 15 bit address where you want it written. Then you drive the "245 enable line low to take control of the RAM chip, and then drive the write strobe low to write the data. Then rise the write line back high to complete the write, and the enable signal back high again to allow the MSM6255 to keep using the RAM normally. The buffer enable signal also connects to the DIEN pin on the MSM6255, so your 15 address lines get fed though the MSM6255 to the RAM while the buffer feeds your data to it. It"s nice that they made both of them high for normal display operation and low for access to the RAM. There"s also one other write strobe, which you use (without the buffer enable) to write configuration into the MSM6255 (see the MSM6255 datasheet for details, and my code for the config guesswork I did that seems to work pretty well - though other configs might be possible).
The one other thing you need to do is control the LCD negative voltage. There is a digitally controlled pot on the board. I just cut if off and wired in a normal pot, which was a lot easier for reverse engineering the display (while trying to guess the MSM6255 config settings, turning the pot back and forth and viewing from different angles could let me guess if parts of the LCD were being double-scanned from incorrect config - and believe me, I tried many incorrect settings!) If you want software control of the contrast, you might try configuring the pot? That should be pretty easy to troubleshoot since you can just measure the voltage as you try it. If you"re going to replace with a normal pot, you"ll need a 10K linear taper (maybe on the group order?)

Engineer Guarav Singh has released an open-source SPI to MIPI DSI bridge, designed to allow a field-programmable gate array (FPGA) to drive a salvaged 1.54" LCD display panel without any closed-source code.
"As display technology is advancing, high resolution LCD/TFT LCD panel are becoming more common," Singh writes. "With higher resolution comes nicer picture quality, rich content with higher bandwidth requirement to transfer that content from the display controller to the display it self. Gone those days of 8-bit parallel bus, now MIPI [Display Serial Interface] is becoming more and more common with nice display. Yes one can still buy parallel or LVDS interface display. But as one try to move towards nicer quality display MIPI is becoming dominant. Basic MIPI DPHY can achieve 1Gps per-lane with MIPI DPHY V2.5 you can go up to 6Gbps Max total bandwidth."
While most commercial SoC designs include a MIPI DSI block for driving displays, they"re typically based on proprietary closed-source hardware. Singh"s detailed write-up goes into the creation of an open-source equivalent, written in the Verilog hardware description language and ready to run on an FPGA - complete with full source, released under the GNU General Public Licence 3.0 copyleft licence.
Using a display salvaged from an old iPod, and a bit of fine-pitch soldering, Singh was able to reverse-engineer the panel and write some Verilog to implement the MIPI DSI signal. Following the protoboard work to prove the concept, Singh created a PCB which sits between the Lattice Semiconductor FPGA development board and the display panel - making installation as simple as inserting a ribbon cable into a socket. Finally, Singh developed a PIC32-based host adapter which provides an SPI interface over USB, plus a matching Qt5-based GUI application, to allow a host device to control the display via the FPGA.
![]()
If you’re buying these on eBay and going with the cheap vendors, you get two pieces - the LCD assembly, and the I2C adapter. It should be obvious which is which. If you buy the few-cents-more version, they often come pre-soldered.
Assembly is pretty straightforward. Put the I2C adapter on the backside of the LCD board. It can go two ways, so put it the most reasonable looking way - board facing in. It won’t work the other way.
Then solder the pins. A small alligator clip or similar is useful to help keep the interface board fully pressed against the LCD board while soldering.
These boards are all using a HD44780U or compatible controller - the datasheet is a fun read, but not entirely relevant for using them. If you want to do something beyond just displaying text, the character bitmaps are useful to know about.
The LCDs have quite a few pins - and most of the matter! Here’s a rundown of the pins and what they do. You will probably have something along these lines.
The interface boards simply take a byte as an I2C slave device and write that byte onto the parallel output bus - which, conveniently, has just enough pins to run the LCD (if you happen to be using 4 data pins instead of all 8)!
The goal here is to find out which data pin from the PCF8574 connects to which LCD input. This information is needed to configure the LiquidCrystal class to drive your panel.
To work with an I2C LCD from an Arduino, you probably want to use New Liquid Crystal - the stock library doesn’t work with I2C adapters, and it’s not trivial to drive a display like this over an I2C adapter.
lcd_Addr is the I2C address of the expander (found with your scanner above), most of the values are the bit number of the output from the expander (bits 0-7), and the last argument is the backlight polarity.
Here’s what the display looks like with the contrast set wrong - absolutely blank, other than the backlight. You can write to this all day long and not see a thing.
If you haven’t initialized the LCD at all (there’s voltage present, but the LiquidCrystal class hasn’t started up yet), you should see alternating rows of dark and light squares. This is helpful to verify that you have your contrast set at least somewhat sanely. If you don’t see this, play with the contrast first, or you’ll drive yourself batty trying to figure out why your screen isn’t working, when it’s working fine!
Ms.Josey
Ms.Josey