In this article we examine a five digit, seven-segment LED display from Hewlett-Packard, the 5082-7415:

According to the data sheet (HP 5082-series.pdf) and other research this was available for a period of time around 1976 and used with other 5082-series modules in other HP products. Such as the Hewlett-Packard 3x series of calculators, for example:

Using the display is very easy – kudos to the engineers at HP for making a simple design that could be reusable in many applications. The 5082-7415 is a common-cathode unit and wiring is very simple – there are the usual eight anodes for segments a~f and the decimal point, and the five cathodes.

As this module isn’t too easily replaceable, I was very conservative with the power supply – feeding just under 1.6V at 10mA to each of the anode pins. A quick test proved very promising:

Excellent – it worked! But now to get it displaying some sort of interesting way. Using the following hardware…

… it was connected in the same method as a four-digit display (except for the extra digit) as described in my tutorial. Don’t forget to use the data sheet (HP 5082-series.pdf). You don’t have to use Arduino – any microcontroller with the appropriate I/O can take care of this.

Here is a simple Arduino sketch that scrolls through the digits with and then without the decimal point:

Arduino

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

// Arduino sketch to demonstrate HP 5082-7415 LED Display unit

// John Boxall, April 2012

intclockPin=6;

intlatchPin=7;

intdataPin=8;

// array for cathodes - sent to second shift register

bytedigits[]={

B10000000,

B01000000,

B00100000,

B00010000,

B00001000,

B11111000};// use digits[6] to turn all on

// array for anodes (to display 0~0) - sent to first shift register

bytenumbers[]={

B11111100,

B01100000,

B11011010,

B11110010,

B01100110,

B10110110,

B10111110,

B11100000,

B11111110,

B11110110};

voidsetup()

{

pinMode(clockPin,OUTPUT);

pinMode(latchPin,OUTPUT);

pinMode(dataPin,OUTPUT);

}

voidloop()

{

inti;

for(i=0;i<10;i++)

{

digitalWrite(latchPin,LOW);

shiftOut(dataPin,clockPin,LSBFIRST,digits[6]);

shiftOut(dataPin,clockPin,LSBFIRST,numbers[i]);

digitalWrite(latchPin,HIGH);

delay(250);

}

// now repeat with decimal point

for(i=0;i<10;i++)

{

digitalWrite(latchPin,LOW);

shiftOut(dataPin,clockPin,LSBFIRST,digits[6]);

shiftOut(dataPin,clockPin,LSBFIRST,numbers[i]+1);

digitalWrite(latchPin,HIGH);

delay(250);

}

}

And the results:

Now for something more useful. Here is a function that sends a single digit to a position on the display with the option of turning the decimal point on or off:

Arduino

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

voiddisplayDigit(intvalue,intposit,booleandecPoint)

// displays integer value at digit position posit with decimal point on/off

{

digitalWrite(latchPin,LOW);

shiftOut(dataPin,clockPin,LSBFIRST,digits[posit]);

if(decPoint==true)

{

shiftOut(dataPin,clockPin,LSBFIRST,numbers[value]+1);

}

else

{

shiftOut(dataPin,clockPin,LSBFIRST,numbers[value]);

}

digitalWrite(latchPin,HIGH);

}

So if you wanted to display the number three in the fourth digit, with the decimal point – use

Arduino

1

displayDigit(3,3,true);

with the following result:

We make use of the displayDigit() function in our next sketch. We introduce a new function:

Arduino

1

displayInteger(number,cycles);

It accepts a long integer between zero and 99999 (number) and displays it on the module for cycles times:

Arduino

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

// Arduino sketch to demonstrate HP 5082-7415 LED Display unit

// Displays numbers on request

// John Boxall, April 2012

intclockPin=6;

intlatchPin=7;

intdataPin=8;

// array for cathodes - sent to second shift register

bytedigits[]={

B10000000,

B01000000,

B00100000,

B00010000,

B00001000,

B11111000};// use digits[6] to turn all on

// array for anodes (to display 0~0) - sent to first shift register

bytenumbers[]={

B11111100,

B01100000,

B11011010,

B11110010,

B01100110,

B10110110,

B10111110,

B11100000,

B11111110,

B11110110};

voidsetup()

{

pinMode(clockPin,OUTPUT);

pinMode(latchPin,OUTPUT);

pinMode(dataPin,OUTPUT);

randomSeed(analogRead(0));

}

voidclearDisplay()

// turns off all digits

{

digitalWrite(latchPin,LOW);

shiftOut(dataPin,clockPin,LSBFIRST,0);

shiftOut(dataPin,clockPin,LSBFIRST,0);

digitalWrite(latchPin,HIGH);

}

voiddisplayDigit(intvalue,intposit,booleandecPoint)

// displays integer value at digit position posit with decimal point on/off

{

digitalWrite(latchPin,LOW);

shiftOut(dataPin,clockPin,LSBFIRST,digits[posit]);

if(decPoint==true)

{

shiftOut(dataPin,clockPin,LSBFIRST,numbers[value]+1);

}

else

{

shiftOut(dataPin,clockPin,LSBFIRST,numbers[value]);

}

digitalWrite(latchPin,HIGH);

}

voiddisplayInteger(longnumber,intcycles)

// displays a number 'number' on the HP display.

{

longi,j,k,l,z;

floatf;

clearDisplay();

for(z=0;z

voidloop()

{

longl2;

l2=random(0,100001);

displayInteger(l2,400);

}

For demonstration purposes the sketch displays random numbers, as shown in the video below:

Have fun and keep checking into tronixstuff.com. Why not follow things on twitter, Google+, subscribe for email updates or RSS using the links on the right-hand column, or join our forum – dedicated to the projects and related items on this website.