/*
|
|
Command a four-digits seven-segments display.
|
|
|
|
Use sDisplayDigitValue[] to change the digits values.
|
|
The digits are listed from left to right.
|
|
You can use SegmentCharacter.h to get the binary code for a given character.
|
|
|
|
Example:
|
|
void setup(){
|
|
sDisplayDigitValue[0]=SC_4;
|
|
sDisplayDigitValue[1]=SC_NUMBER[1];
|
|
sDisplayDigitValue[2]=SC_EQUAL;
|
|
sDisplayDigitValue[3]=SC_A;
|
|
}
|
|
void loop(){
|
|
powerSegmentDisplay();
|
|
delay(20);
|
|
}
|
|
*/
|
|
|
|
#include "SegmentDisplay.h"
|
|
const int pinSDisplayShiftRegisterSER=23;
|
|
const int pinSDisplayShiftRegisterRCLK=22;
|
|
const int pinSDisplayShiftRegisterSRCLK=5;
|
|
|
|
const byte pinSDisplayDigit[4]={17,18,19,21};
|
|
|
|
byte sDisplayDigitValue[]={0,0,0,0};
|
|
|
|
void setupSegmentDisplay(){
|
|
pinMode(pinSDisplayShiftRegisterSER,OUTPUT);
|
|
pinMode(pinSDisplayShiftRegisterRCLK,OUTPUT);
|
|
pinMode(pinSDisplayShiftRegisterSRCLK,OUTPUT);
|
|
|
|
for(int i=0;i<sizeof(pinSDisplayDigit);i++){
|
|
pinMode(pinSDisplayDigit[i],OUTPUT);
|
|
digitalWrite(pinSDisplayDigit[i],LOW);
|
|
}
|
|
}
|
|
|
|
void powerSegmentDisplay(){
|
|
for (int x=0; x<4; x++){
|
|
for (int j=0; j<4; j++){
|
|
digitalWrite(pinSDisplayDigit[j],LOW);
|
|
}
|
|
digitalWrite(pinSDisplayShiftRegisterRCLK,LOW);
|
|
shiftOut(pinSDisplayShiftRegisterSER,pinSDisplayShiftRegisterSRCLK,MSBFIRST,sDisplayDigitValue[x]);
|
|
digitalWrite(pinSDisplayShiftRegisterRCLK,HIGH);
|
|
digitalWrite(pinSDisplayDigit[x],HIGH);
|
|
delay(1);
|
|
}
|
|
|
|
for (int j=0; j<4; j++){
|
|
digitalWrite(pinSDisplayDigit[j],LOW);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set a number to be display using all the available digits.
|
|
* First digit is E if the number is > 9999 or <-999.
|
|
*/
|
|
void setNumberToDisplay(int number){
|
|
if(number<0){
|
|
sDisplayDigitValue[0]=SC_MINUS;
|
|
if(number<-999){
|
|
sDisplayDigitValue[0]=SC_E;
|
|
}
|
|
number=number*-1;
|
|
}else{
|
|
sDisplayDigitValue[0]=SC_NUMBER[number/1000];
|
|
}
|
|
|
|
int n=number%1000;
|
|
sDisplayDigitValue[1]=SC_NUMBER[n/100];
|
|
n=n%100;
|
|
sDisplayDigitValue[2]=SC_NUMBER[n/10];
|
|
n=n%10;
|
|
sDisplayDigitValue[3]=SC_NUMBER[n];
|
|
|
|
if(number>9999){
|
|
sDisplayDigitValue[0]=SC_E;
|
|
}
|
|
}
|