PLEASE NOTE: This article is obsolete or related to a discontinued product.

Interfacing a 7-seg display module

This article illustrates how to interface the mikroElektronika Serial 7-seg display module to the FOX Board LX

The mikroElektronika Serial 7-seg display module is a 4 digit module based on a MAX7219 serial input/output common-cathode display drivers with a SPI serial interface.

As other mikroElektronika extra board this module has a 5x2 female connector to be connected with a main board. The signals available on this connector (CN1) are:

1CS# 2
3 4SCK
5 6DIN
7DOUT 8
9+5VCC 10GND

The mikroElektronika Serial
7-seg display module

Wirings

The wirings between the FOX Board LX and the 7-seg module used in this example are:
J6.23 (OG1) --> CN1.1 (CS#)
J6.26 (OG3) --> CN1.4 (SCK)
J6.25 (OG4) --> CN1.6 (DIN)

J6.12 (+5VCC) --> CN1.9 (+5VCC)
J6.40 (GND) --> CN1.10 (GND)

Sample code in C

This is an example of code in C based on the original example provided by mikroElektronica:
/*
  7seg.c
  Sample of C code to use a mikroElektronika Serial 7-seg Display module
  with the Acme Systems FOX Board LX. 

  http://www.acmesystems.it/?id=71  

  Based on the C example code provided by Mikroelektronika.
*/


#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
#include "sys/ioctl.h"
#include "fcntl.h"
#include "time.h"
#include "string.h"
#include "linux/gpio_syscalls.h"

#define CS_HI gpiosetbits(PORTG,PG1)
#define CS_LO gpioclearbits(PORTG,PG1)
#define SCK_HI gpiosetbits(PORTG,PG3)
#define SCK_LO gpioclearbits(PORTG,PG3)
#define DIN_HI gpiosetbits(PORTG,PG4)
#define DIN_LO gpioclearbits(PORTG,PG4)


void SPI_init(void) {
  CS_HI;    
  SCK_LO;    
  DIN_LO;    
}

void SPI_write(unsigned char value) {
  int i;
  for (i=7;i>=0;i--) {
    if (value&(1<<i)) {
      DIN_HI;
    } else {
      DIN_LO;
    }
    SCK_HI;    
    SCK_LO;    
  }
}

void max7219_init1() {
  CS_LO;
  SPI_write(0x09);             // BCD mode for digit decoding
  SPI_write(0x5F);
  CS_HI;

  CS_LO;
  SPI_write(0x0A);
  SPI_write(0x0F);             // Segment luminosity intensity
  CS_HI;

  CS_LO;
  SPI_write(0x0B);
  SPI_write(0x07);             // Display refresh
  CS_HI;

  CS_LO;
  SPI_write(0x0C);
  SPI_write(0x01);             // Turn on the display
  CS_HI;

  CS_LO;
  SPI_write(0x00);
  SPI_write(0xFF);             // No test
  CS_HI;
}

void display_number(unsigned int data) {

  CS_LO;
  SPI_write(4);                // send Thousands digit
  SPI_write(data/1000);
  CS_HI;

  CS_LO;
  SPI_write(3);                // send Hundreds digit
  SPI_write((data/100)%10);
  CS_HI;

  CS_LO;
  SPI_write(2);                // send Tens digit
  SPI_write((data/10)%10);
  CS_HI;

  CS_LO;
  SPI_write(1);                // send Ones digit
  SPI_write(data%10);
  CS_HI;
}


int main(int argc, char **argv) {
  int cnt;

  SPI_init();
  max7219_init1();             // initialize  max7219
  
  for (cnt=0;cnt<10000;cnt++) {
    display_number(cnt);
    usleep(1000);
  }


  return(0);
}


Hand made prototype at work

Credits

This article has written in cooperation with Tigal.com (http://www.tigal.com).

It is possible to buy the 7-seg display module directly from Tigal.com web site on:
http://www.tigal.com/prodotti_scheda.asp?pid=1227

Links