Main Content

Control 7-Segment Display with 74HC595 Shift Register

This example shows how to use the MATLAB® Support Package for Arduino® Hardware to control a 1-Digit 7-Segment display with a 74HC595 8-bit serial-in-parallel-out shift register.

Hardware Requirements

  • Arduino board

  • Common anode 7-segment display

  • 74HC595 8-bit serial-in-parallel-out shift register

  • Eight 330 ohm resistors

  • Breadboard and wires

Hardware Setup

Connect the 7-Segment display and 74HC595 shift register to Arduino hardware:

  • Connect Vcc pin on 74HC595 to 5V pin on Arduino hardware.

  • Connect GND and OE pins on 74HC595 to GND pin on Arduino hardware.

  • Connect DS or SER pin on 74HC595 to digital pin 8 on Arduino hardware.

  • Connect SHCP or SRCLK pin on 74HC595 to digital pin 10 on Arduino hardware.

  • Connect STCP or RCLK pin on 74HC595 to digital pin 9 on Arduino hardware.

  • Connect Q0-Q6 or QA-QG pin on 74HC595 to pin A-G on 7-segment display.

  • Connect Q7 or QH pin on 74HC595 to pin DP on 7-segment display.

  • Connect common anode pins (pin 3 and 8 on the diagram) on 7-segment display to 5V pin on Arduino hardware.

Create Shift Register Object

Create an arduino object, and include the ShiftRegister library.

   a = arduino('COM4','Uno','Libraries','ShiftRegister')
a = 
  arduino with properties:

                  Port: 'COM4'
                 Board: 'Uno'
         AvailablePins: {'D2-D13', 'A0-A5'}
  AvailableDigitalPins: {'D2-D13', 'A0-A5'}
      AvailablePWMPins: {'D3', 'D5-D6', 'D9-D11'}
   AvailableAnalogPins: {'A0-A5'}
    AvailableI2CBusIDs: [0]
             Libraries: {'ShiftRegister'}

Create shift register object for the display module, specifying the connected data pin, clock pin, and latch pin.

   dataPin = 'D8';
   clockPin = 'D10';
   latchPin = 'D9';
   register = shiftRegister(a,'74HC595',dataPin,clockPin,latchPin)
register = 
  ShiftRegister with properties:

           Model: '74HC595'      
         DataPin: 'D8'           
        ClockPin: 'D10'          
        LatchPin: 'D9'           
        ResetPin: Not specified

Display Numbers

Each segment of the 7-segment display is controlled by a pin corresponding to the segment, including pin A-G and pin DP. Common anode 7-segment display means the segment pin needs to be low to turn it on. Here is the mapping between the segments and the pins, including shift register outputs.

Create a table of binary character vectors for all single digit numbers.

   digitTable = {...
        '11000000', ...  % 0
        '11001111', ...  % 1
  	'10100100', ...  % 2
  	'10110000', ...  % 3
  	'10011001', ...  % 4
  	'10010010', ...  % 5
  	'10000010', ...  % 6
  	'11111000', ...  % 7
  	'10000000', ...  % 8
  	'10010000'  ...  % 9
};

To display a number on the module, write the corresponding 8-bit character vector to the shift register, which will get reflected on its outputs, therefore controlling the on and off of the segments. Here is the code to loop through the ten digits on the display,

   for iLoop = 1:10
       digit = digitTable{iLoop};
       write(register,digit);
       pause(0.5);
   end

Clean Up

When the connection is no longer needed, clear the shift register and arduino object.

  clear register a