Connector module between 32-bit serial-in parallel-out shift register module and 7-digit seven segment display module which will simplifies the connection between these two modules so that we could easily display our desired value on the 7-digit seven segment display from Arduino or ESP-12F IOT module.
Read the blog at : http://www.haberocean.com/2019/07/7-digit-seven-segment-display-using-esp-12f-iot-module-through-32-bit-serial-in-parallel-out-shift-register-module/
Purchase from Amazon : http://www.amazon.in/dp/B07TYKMFV3?ref=myi_title_dp
32-bit serial-in parallel-out shift register module using 74HC595. Module contains four 74HC595 ICs. Each IC will have eight outputs. From four ICs, there will be 32 outputs.
Refer links
Interfacing 32-bit Shift register module to Arduino UNO : http://www.haberocean.com/2019/05/shift-register-module-working-using-arduino-uno/
Cascading two 32-bit shift register modules using Arduino UNO : http://www.haberocean.com/2019/05/cascading-two-shift-register-modules-using-arduino-uno/
7-Digit seven segment display module from Arduino UNO through 32-bit shift register module : http://www.haberocean.com/2019/05/7-digit-seven-segment-display-module-from-arduino-uno-through-shift-register-module/
32-bit shift register module using ESP-12F IOT module : http://www.haberocean.com/2019/05/32-bit-shift-register-module-using-esp-12f-iot-module/
7-digit seven segment display using ESP-12F IOT module through 32-bit serial-in parallel-out shift register module : http://www.haberocean.com/2019/07/7-digit-seven-segment-display-using-esp-12f-iot-module-through-32-bit-serial-in-parallel-out-shift-register-module/
Purchase from Amazon : http://www.amazon.in/dp/B07SZ2194H?ref=myi_title_dp
7 digit seven segment display module using 4511 IC which will help you to display 7 digit numbers using microcontrollers or Arduino boards. Negative and dot point options are provided so that you will get – symbol at the left end seven segment display. Dot point can be displayed at any digit.
Reference blogs
7-digit seven segment display module using Arduino UNO : http://www.haberocean.com/2019/08/7-digit-seven-segment-display-module-using-arduino-uno/
7-digit seven segment display by Arduino UNO through 32-bit serial-in parallel-out shift register module : http://www.haberocean.com/2019/05/7-digit-seven-segment-display-module-from-arduino-uno-through-shift-register-module/
7-digit seven segment display by ESP-12F IOT module through 32-bit serial-in parallel-out shift register module : http://www.haberocean.com/2019/07/7-digit-seven-segment-display-using-esp-12f-iot-module-through-32-bit-serial-in-parallel-out-shift-register-module/
7-digit seven segment display by Arduino UNO through 32-bit serial-in parallel-out shift register module : http://www.haberocean.com/2019/08/7-digit-seven-segment-display-module-using-arduino-uno-through-32-bit-serial-in-parallel-out-shift-register-module/
Purchase from Amazon : http://www.amazon.in/dp/B07T25K3YL?ref=myi_title_dp
Upload the following program to Arduino board
//Pin connected to ST_CP (12) of 74HC595
int latchPin = 12;
//Pin connected to SH_CP (11) of 74HC595
int clockPin = 11;
////Pin connected to DS (14) of 74HC595
int dataPin = 10;
int numDigitArray[7] = {0, 0, 0, 0, 0, 0, 0};
int dotPointArray[7] = {0, 0, 0, 0, 0, 0, 0};
void displayValueAndDigit(byte value, byte digit, byte dp, byte NDY) {
digitalWrite(latchPin, 0);
customDelay();
shiftOut(dataPin, clockPin, value);
shiftOut(dataPin, clockPin, digit);
shiftOut(dataPin, clockPin, dp);
shiftOut(dataPin, clockPin, 0x00);
digitalWrite(latchPin, 1);
customDelay();
}
void displayNumberInDigit(int numberToDisplayInDigit, int digitNumber, byte dotPointHex) {
byte numberHex, digitNumberHex;
switch(numberToDisplayInDigit)
{
case 0:
numberHex = 0x00;
break;
case 1:
numberHex = 0x01;
break;
case 2:
numberHex = 0x02;
break;
case 3:
numberHex = 0x03;
break;
case 4:
numberHex = 0x04;
break;
case 5:
numberHex = 0x05;
break;
case 6:
numberHex = 0x06;
break;
case 7:
numberHex = 0x07;
break;
case 8:
numberHex = 0x08;
break;
case 9:
numberHex = 0x09;
break;
case 15:
numberHex = 0x0F;
break;
default:
numberHex = 0x00;
break;
}
switch(digitNumber) {
case 0:
digitNumberHex = 0xBF;
break;
case 1:
digitNumberHex = 0xDF;
break;
case 2:
digitNumberHex = 0xEF;
break;
case 3:
digitNumberHex = 0xF7;
break;
case 4:
digitNumberHex = 0xFB;
break;
case 5:
digitNumberHex = 0xFD;
break;
case 6:
digitNumberHex = 0xFE;
break;
default:
digitNumberHex = 0x00;
break;
}
displayValueAndDigit(numberHex, digitNumberHex, dotPointHex, 0x00);
displayValueAndDigit(numberHex, 0xFF, dotPointHex, 0x00);
}
int decPartProcess(double decPart) {
int i = 0;
double decPartMult10, decPartMult100, tempFractionalPart;
int dotPointPosition;
int decPartArray[] = {0, 0};
int decPartToInt = int(decPart * 100);
// decPart decPartToInt
// .0 0
// .05 5
// .5 50
// .58 58
decPartMult10 = decPart * 10;
decPartArray[0] = (int) decPartMult10;
tempFractionalPart = decPartMult10 - decPartArray[0];
decPartMult100 = tempFractionalPart * 10;
decPartArray[1] = (int) decPartMult100;
tempFractionalPart = decPartMult100 - decPartArray[1];
// decPartArray[0] decPartArray[1]
// 0 0
// 0 5
// 5 0
// 5 5
if(decPartArray[0] == 0 && decPartArray[1] == 0) {
dotPointArray[0] = 0;
dotPointArray[1] = 0;
dotPointArray[2] = 0;
dotPointArray[3] = 0;
dotPointArray[4] = 0;
dotPointArray[5] = 0;
dotPointArray[6] = 0;
dotPointPosition = 6;
} else if(decPartArray[0] == 0 && decPartArray[1] > 0) {
dotPointArray[0] = 0;
dotPointArray[1] = 0;
dotPointArray[2] = 0;
dotPointArray[3] = 0;
dotPointArray[4] = 1;
dotPointArray[5] = 0;
dotPointArray[6] = 0;
numDigitArray[5] = decPartArray[0];
numDigitArray[6] = decPartArray[1];
dotPointPosition = 4;
} else if(decPartArray[0] > 0 && decPartArray[1] == 0) {
dotPointArray[0] = 0;
dotPointArray[1] = 0;
dotPointArray[2] = 0;
dotPointArray[3] = 0;
dotPointArray[4] = 0;
dotPointArray[5] = 1;
dotPointArray[6] = 0;
numDigitArray[6] = decPartArray[0];
dotPointPosition = 5;
} else if(decPartArray[0] > 0 && decPartArray[1] > 0) {
dotPointArray[0] = 0;
dotPointArray[1] = 0;
dotPointArray[2] = 0;
dotPointArray[3] = 0;
dotPointArray[4] = 1;
dotPointArray[5] = 0;
dotPointArray[6] = 0;
numDigitArray[5] = decPartArray[0];
numDigitArray[6] = decPartArray[1];
dotPointPosition = 4;
}
for(i = 0; i< 7;i++) {
Serial.print(numDigitArray[i]);
}
Serial.print(" ");
Serial.print(dotPointPosition);
Serial.println("");
return(dotPointPosition);
}
void intPartProcess(long int intPart, int dotPointPosition, byte sign) {
// intPart dotPointPosition
// 846 4
int i = 0;
int quotient;
int tempDotPointPosition = dotPointPosition;
long int tempIntPart = intPart;
for(i=0;i<=dotPointPosition;i++) {
numDigitArray[i] = 15;
}
if(tempIntPart == 0) {
numDigitArray[tempDotPointPosition] = 0;
}
while(tempIntPart > 0) {
numDigitArray[tempDotPointPosition] = tempIntPart % 10;
tempIntPart /= 10;
tempDotPointPosition--;
if(tempDotPointPosition < 0) {
break;
}
}
if(sign == 0x80) {
numDigitArray[0] = 15;
}
}
void customDelay() {
delayMicroseconds(1);
}
void displayNumber(int dotPointPosition, byte sign) {
int i;
byte dotPointHex, dotAndSign;
switch(dotPointPosition) {
case 0:
dotPointHex = 0x40;
break;
case 1:
dotPointHex = 0x20;
break;
case 2:
dotPointHex = 0x10;
break;
case 3:
dotPointHex = 0x08;
break;
case 4:
dotPointHex = 0x04;
break;
case 5:
dotPointHex = 0x02;
break;
case 6:
dotPointHex = 0x00;
break;
default:
dotPointHex = 0x00;
break;
}
dotAndSign = dotPointHex | sign;
for(i=0;i<7;i++) {
displayNumberInDigit(numDigitArray[i], i, dotAndSign);
}
}
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
byte sign = 0x00;
// Upper limit +32767
// Lower limit -32767
//long double numberToDisplay = -2689.6;
long double numberToDisplay = random(-32767, 32767) / 15.0;
if(numberToDisplay < 0.0) {
numberToDisplay*=-1;
sign = 0x80;
}
long int intPart = (int) numberToDisplay;
float decPart = numberToDisplay - intPart;
int dotPointPosition, i;
dotPointPosition = decPartProcess(decPart);
intPartProcess(intPart, dotPointPosition, sign);
displayNumber(dotPointPosition, sign);
delay(300);
}
// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// This shifts 8 bits out MSB first,
//on the rising edge of the clock,
//clock idles low
//internal function setup
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);
//clear everything out just in case to
//prepare shift register for bit shifting
digitalWrite(myDataPin, 0);
customDelay();
digitalWrite(myClockPin, 0);
customDelay();
//for each bit in the byte myDataOut
//NOTICE THAT WE ARE COUNTING DOWN in our for loop
//This means that %00000001 or "1" will go through such
//that it will be pin Q0 that lights.
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);
customDelay();
//if the value passed to myDataOut and a bitmask result
// true then... so if we are at i=6 and our value is
// %11010100 it would the code compares it to %01000000
// and proceeds to set pinState to 1.
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
//Sets the pin to HIGH or LOW depending on pinState
digitalWrite(myDataPin, pinState);
customDelay();
//register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
customDelay();
//zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
customDelay();
}
//stop shifting
digitalWrite(myClockPin, 0);
customDelay();
}
Leave a Reply
You must be logged in to post a comment.