7-Seg 4 Digit Display code for ICM7211

I looked around for a while trying to find some code for a ICM7211 display driver and didn't see anything so I've posted one below in case someone is looking for the same. The pins on this were used on a 644P chip so just change for Arduino variant you're using.

/*******************************************************/
/* Author: Richard Vogel                               */
/* Date: 12/12/12                                      */
/*                                                     */
/* Description: Simple sketch to utilize a ICM7211AM   */
/* 7-segment 4-digit display driver with Arduino.      */
/* Example display for use with this sketch would be   */
/* Varitronix PN: VI-402-DP-FC-S                       */
/* Digi-Key PN: 153-1103-ND  //as of 12/12/12          */
/*******************************************************/


const int d0 = 28;
const int d1 = 29;
const int d2 = 30;
const int d3 = 31;

const int dS1 = 13;
const int dS2 = 14;

const int cS1 = 2;
const int cS2 = 3;

/*****************************************************************************/
/*This example is to display a temp to tenth of degree precision. 
Decimal point connection has to go directly to diplay. Same goes for if 
you want to use the colon on the display for a clock feature. The 
ICM7211 does not output these lines.*/
/*****************************************************************************/
const int dP = 4;  

int tNow[4]={10,3,5,6};   // current temperature   (-35.6)

boolean on = 1;
boolean off = 0;
boolean lcdNum[16][4]=
{
  {off,off,off,off}, // 0
  {off,off,off,on},  // 1
  {off,off,on,off},  // 2
  {off,off,on,on},   // 3  
  {off,on,off,off},  // 4
  {off,on,off,on},   // 5
  {off,on,on,off},   // 6
  {off,on,on,on},    // 7
  {on,off,off,off},  // 8
  {on,off,off,on},   // 9
  {on,off,on,off},   // -      //array pos 10
  {on,off,on,on},    // E      //array pos 11
  {on,on,off,off},   // H      //array pos 12
  {on,on,off,on},    // L      //array pos 13
  {on,on,on,off},    // P      //array pos 14
  {on,on,on,on}      // Blank  //array pos 15
};

void setup() 
{
  pinMode(d0, OUTPUT);
  pinMode(d1, OUTPUT);
  pinMode(d2, OUTPUT);
  pinMode(d3, OUTPUT);
  pinMode(dS1, OUTPUT);
  pinMode(dS2, OUTPUT);
  pinMode(cS1, OUTPUT);
  pinMode(cS2, OUTPUT);
  pinMode(dP, OUTPUT);
  digitalWrite(d0, LOW);
  digitalWrite(d1, LOW);
  digitalWrite(d2, LOW);
  digitalWrite(d3, LOW);
  digitalWrite(dS1, HIGH);
  digitalWrite(dS2, HIGH);
  digitalWrite(cS1, LOW);
  digitalWrite(cS2, HIGH);
  digitalWrite(dpColon, HIGH);
  Serial.begin(9600);
}
void loop() 
{
  
  for (int x = 0; x < 16; x++)
  { 
    disD1(lcdNum[x][0], lcdNum[x][1], lcdNum[x][2], lcdNum[x][3]); 
    disD2(lcdNum[x][0], lcdNum[x][1], lcdNum[x][2], lcdNum[x][3]);
    disD3(lcdNum[x][0], lcdNum[x][1], lcdNum[x][2], lcdNum[x][3]);
    disD4(lcdNum[x][0], lcdNum[x][1], lcdNum[x][2], lcdNum[x][3]);
    delay(500);
  }
    bootUpDisplay();
    delay(500);
    clearMemDisplay();
    delay(500);
    helpDisplay();
    delay(500);
    blankDisplay();
    delay(500);  
    displayTemp(tNow[0], tNow[1], tNow[2], tNow[3]);
    delay(1000);

}

void disD1(boolean a, boolean b, boolean c, boolean d)
{
  digitalWrite(d3, a);
  digitalWrite(d2, b);
  digitalWrite(d1, c);
  digitalWrite(d0, d);
  digitalWrite(dS1, LOW);
  digitalWrite(dS2, LOW);
  delay(2);
  digitalWrite(cS2, LOW);
  delay(2);
  digitalWrite(cS2, HIGH);
}

void disD2(boolean a, boolean b, boolean c, boolean d)
{
  digitalWrite(d3, a);
  digitalWrite(d2, b);
  digitalWrite(d1, c);
  digitalWrite(d0, d);
  digitalWrite(dS1, HIGH);
  digitalWrite(dS2, LOW);
  delay(2);
  digitalWrite(cS2, LOW);
  delay(2);
  digitalWrite(cS2, HIGH);
}

void disD3(boolean a, boolean b, boolean c, boolean d)
{
  digitalWrite(d3, a);
  digitalWrite(d2, b);
  digitalWrite(d1, c);
  digitalWrite(d0, d);
  digitalWrite(dS1, LOW);
  digitalWrite(dS2, HIGH);
  delay(2);
  digitalWrite(cS2, LOW);
  delay(2);
  digitalWrite(cS2, HIGH);
}

void disD4(boolean a, boolean b, boolean c, boolean d)
{
  digitalWrite(d3, a);
  digitalWrite(d2, b);
  digitalWrite(d1, c);
  digitalWrite(d0, d);
  digitalWrite(dS1, HIGH);
  digitalWrite(dS2, HIGH);
  delay(2);
  digitalWrite(cS2, LOW);
  delay(2);
  digitalWrite(cS2, HIGH);
}

void bootUpDisplay() //"E1E1"
{
  disD1(lcdNum[11][0], lcdNum[11][1], lcdNum[11][2], lcdNum[11][3]);
  disD2(lcdNum[1][0], lcdNum[1][1], lcdNum[1][2], lcdNum[1][3]);
  disD3(lcdNum[11][0], lcdNum[11][1], lcdNum[11][2], lcdNum[11][3]);
  disD4(lcdNum[1][0], lcdNum[1][1], lcdNum[1][2], lcdNum[1][3]);
}

void clearMemDisplay() //"E2E2"
{
  disD1(lcdNum[11][0], lcdNum[11][1], lcdNum[11][2], lcdNum[11][3]);
  disD2(lcdNum[2][0], lcdNum[2][1], lcdNum[2][2], lcdNum[2][3]);
  disD3(lcdNum[11][0], lcdNum[11][1], lcdNum[11][2], lcdNum[11][3]);
  disD4(lcdNum[2][0], lcdNum[2][1], lcdNum[2][2], lcdNum[2][3]);
}

void helpDisplay() //"HELP"
{
  disD1(lcdNum[12][0], lcdNum[12][1], lcdNum[12][2], lcdNum[12][3]);
  disD2(lcdNum[11][0], lcdNum[11][1], lcdNum[11][2], lcdNum[11][3]);
  disD3(lcdNum[13][0], lcdNum[13][1], lcdNum[13][2], lcdNum[13][3]);
  disD4(lcdNum[14][0], lcdNum[14][1], lcdNum[14][2], lcdNum[14][3]);
}
void blankDisplay() // "  "
{
  disD1(lcdNum[15][0], lcdNum[15][1], lcdNum[15][2], lcdNum[15][3]);
  disD2(lcdNum[15][0], lcdNum[15][1], lcdNum[15][2], lcdNum[15][3]);
  disD3(lcdNum[15][0], lcdNum[15][1], lcdNum[15][2], lcdNum[15][3]);
  disD4(lcdNum[15][0], lcdNum[15][1], lcdNum[15][2], lcdNum[15][3]);
}

void displayTemp(int t4, int t3, int t2, int t1)
{
  disD1(lcdNum[t4][0], lcdNum[t4][1], lcdNum[t4][2], lcdNum[t4][3]);
  disD2(lcdNum[t3][0], lcdNum[t3][1], lcdNum[t3][2], lcdNum[t3][3]);
  disD3(lcdNum[t2][0], lcdNum[t2][1], lcdNum[t2][2], lcdNum[t2][3]);
  disD4(lcdNum[t1][0], lcdNum[t1][1], lcdNum[t1][2], lcdNum[t1][3]);
}

Display.pdf (146 KB)

ICM7211.pdf (205 KB)

IMG_0897.MOV (1.45 MB)

HI,

This was useful.

this is a 28 segment driver, means it can drive four digits.

can you please let me know how do you control the decimal point segment on the LCD.

If you can share a sketch of the connections would help.

Shivu