Making use of an old TI-83 Plus LCD Screen

Since my previous attempts at getting the Motorola smart cards to work were generally fruitless, I decided to revive an old attempt to get a TI-83 Plus LCD screen to work by itself. Earlier tries failed due to mistakes in creating a pinout for the LCD, and at one point I thought I damaged the driver as the chip got very hot.

After completing a recent assignment for my electronics engineering class involving the classic 8-bit parallel HD44780 LCD (and finally understanding the difference between 8080 and 6800-type parallel interfacing), I dug up a datasheet for the LCD and spent about an hour and a half getting it to display content.

2013-03-02 13.17.52

… And it worked! Because this LCD is a graphic LCD, there is no built-in method to display text. For my tests I manually entered the command and graphic data, by hand, using nothing more than a bank of DIP switches and a debounced pushbutton.

The LCD, when first initialized, has complete garbage in the built-in display SRAM. I had to manually enter 0s for all the visible pixels on screen in order to clean up the display, then set the rows and columns manually to print out “Hello world!” on-screen.

The LCD driver is a Toshiba T6K04, which has 128×64 resolution internally but only the left 96 pixels are visible on the screen. It uses an 8-bit 6800-type parallel interface (CE is used for clocking in data) and, depending on the age of the calculator, has all the support circuitry on the same PCB.

Note that newer TI-83 Plus models are built a lot “cheaper” than the older models. The newer ones don’t have a PCB on the back of the LCD screen and all the support components are on the mainboard. I had one that was made around 2004, give or take a couple years. There are older models that use the Toshiba T6A04. I believe the pinout for the older TI-83s using the T6A04 is different, but the command set is the same.

For the ~2004 era of TI-83 Plus calculators, the pinout is as follows:

  1. Reset: Active-low input for resetting the LCD screen.
  2. D0: Input for the 8-bit parallel interface
  3. D1: Input for the 8-bit parallel interface
  4. D2: Input for the 8-bit parallel interface
  5. D3: Input for the 8-bit parallel interface
  6. D4: Input for the 8-bit parallel interface
  7. D5: Input for the 8-bit parallel interface
  8. D6: Input for the 8-bit parallel interface
  9. D7: Input for the 8-bit parallel interface
  10. CE: Active-low clock for the parallel interface
  11. RW: Input for parallel interface read/write mode: High = read, low = write. For most purposes you can leave this tied low.
  12. D/I: Selects whether to send graphic data, or to send a command. High = data, low = command.
  13. STB: Active-low standby input. Typically you would leave this tied high unless you want to put the LCD in a low-power state.
  14. NC: Bare pad that is not connected to anything on the PCB.
  15. NC: Bare pad that is not connected to anything on the PCB.
  16. VCC: Power supply input: 2.7-5.5 volts DC.
  17. GND: Power supply ground.

After a bit of tinkering I’ve created a table of commands to send to the LCD to initialize it.

D/¬I

R/¬W

D7

D6

D5

D4

D3

D2

D1

D0

Action

0

0

0

0

0

0

0

0

0

1

Set 8 bit mode

0

0

0

0

0

0

0

0

1

1

Enable display

0

0

1

1

x

x

x

x

x

x

Set contrast (0bxxxxxx)

0

0

0

0

0

0

0

1

0

1

Sets counter mode: 8 bits along X, each write increases row # by 1

0

0

0

1

c

c

c

c

c

c

Set column (0bcccccc), display driver is 128×64 but left 96 columns are visible

0

0

1

0

r

r

r

r

r

r

Set row (0brrrrrr)

1

0

d

d

d

d

d

d

d

d

Write display data (8 bits wide)

If time permits (and after college midterms are over, etc.) I’ll write up a quick microcontroller program to control the LCD.

21 thoughts on “Making use of an old TI-83 Plus LCD Screen

  1. Can you share more information about your tear-down? This is a really great idea and I want to use this with my own project. Let me know if you have any pictures.

    Like

      • Pinout and wiring information. I tore mine down and I have an arduino or raspberry pi I want to use either with the screen. I can solder in a new cable and connect to a breadboard but I am not sure where to go from there to duplicate your results. I am just starting my Electrical Engineering degree. If you don’t mind sharing what components you have used or the code to run the screen, it would get me past a lot of hurdles. If not, any information is fine. You can email me if you like.

        Like

        • There is a list of pins for a pinout, but no graphical labeling at the moment. As for microcontroller code, I don’t have any yet. What you see in the picture was me manually entering the opcodes with a DIP switch and a debounced pushbutton.

          Like

  2. I set up a system where an arduino would set the pins following the table you wrote to control the screen, but when it got to the display data command the screen just went black and the contrast only set how dark the screen was. I am not exactly sure if I was using the clock correctly, after I set each row I pulsed the clock so it would apply the changes, and the screen was blank until I hit the display data command where it went black, and I was wondering if you could help diagnose the issue. Here is a list of my pinouts (Is it correct?):
    Sketch starting…
    reset, 0
    reset, 1
    RW, 0
    STB, 1
    D/I, 0
    CE, 0
    D0, 1
    D1, 0
    D2, 0
    D3, 0
    D4, 0
    D5, 0
    D6, 0
    D7, 0
    CE, 1
    CE, 0
    D0, 1
    D1, 1
    D2, 0
    D3, 0
    D4, 0
    D5, 0
    D6, 0
    D7, 0
    CE, 1
    CE, 0
    D0, 0
    D1, 0
    D2, 0
    D3, 0
    D4, 0
    D5, 1
    D6, 1
    D7, 1
    CE, 1
    CE, 0
    D0, 1
    D1, 0
    D2, 1
    D3, 0
    D4, 0
    D5, 0
    D6, 0
    D7, 0
    CE, 1
    CE, 0
    D0, 0
    D1, 0
    D2, 0
    D3, 1
    D4, 0
    D5, 0
    D6, 1
    D7, 0
    CE, 1
    CE, 0
    D0, 0
    D1, 0
    D2, 1
    D3, 0
    D4, 0
    D5, 0
    D6, 0
    D7, 1
    CE, 1
    CE, 0
    D0, 1
    D1, 0
    D2, 1
    D3, 0
    D4, 1
    D5, 0
    D6, 1
    D7, 0
    DI, 1
    CE, 1
    CE, 0
    Sketch done.

    Like

    • In my case, the T6K04 marking was visible on the flex circuit that holds the controller chip and connects to the glass LCD panel. As for identifying which variant of TI-83 I had, I can’t tell you as I have scrapped that unit years ago, and never wrote down which specific one I harvested this LCD from.

      Like

  3. which firmware version do you have/had on your Ti83-Plus?
    it helps in understanding how old is the calculator

    1.03 17/03/1999
    1.06 03/xx/1999
    1.08 03/xx/1999
    1.10 06/05/1999
    1.12
    1.13 04/xx/2001
    1.14 16/12/2001
    1.15 26/08/2002
    1.16 06/xx/2003
    1.17
    1.18 08/xx/2004
    1.19 16/01/2006

    Like

  4. it seems T6A04 has a shorter cable, 16 pin instead of 17
    (http://www.sweclockers.com/forum/trad/138858-grafiska-lcder)

    1 +5
    2 GND
    3 /RST L -> Reset state
    4 NC
    5 /STB L -> standby, T6A04 cannot accept any commands or data
    6 D/I H -> Display data, L -> control data
    7 /CE /WR=L -> Data is latched on rising edge of /CE
    /WR=H -> Data appears while /CE is low
    8 D7 Data bit 7
    9 D6
    10 D5
    11 D4 …
    12 D3
    13 D2
    14 D1
    15 D0 Data bit 0
    16 /WR H -> Read selected, L -> Write selected

    Like

  5. Did you ever work out any microcontroller code or come up with additional information? I have a busted TI-82 and I would like to stuff an arduino inside of it.

    Like

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.