How to use 4-digit 7-segment without library!
In this tutorial I will show you how to use 4-digit 7-segment with out any library!
Components and supplies
1
4-digit 7-segment
1
Arduino UNO
4
Resistor 330 ohm
1
Jumper wires (generic)
Apps and platforms
1
Arduino IDE
Project description
Code
functions.h
h
1void Reset() 2{ digitalWrite(D1, !mode); 3 digitalWrite(D2, !mode); 4 digitalWrite(D3, !mode); 5 digitalWrite(D4, !mode); 6 for(byte i = 0 ; i < 8 ; i++){ 7 digitalWrite(seg[i],mode); 8 } 9} 10 11 12 13void printDigit(char Chara,int digitPort) 14{ Reset(); 15 int character = -1; 16 digitalWrite(digitPort,mode); 17 for(int i = 0 ; i < charsInArray ; i++){ 18 19 if(Chara == Char[i][8]){ 20 character = i; 21 } 22 } 23 if (character == -1){ 24 digitalWrite(pinG,!mode); 25 }else{ 26for(int i = 0;i<= 7;i++) 27 {if(mode == common_anode) digitalWrite(seg[i],!Char[character][i]); 28 else if(mode == common_cathode) digitalWrite(seg[i],Char[character][i]); 29 30 } 31 } 32} 33 34 35 36 37 38void printDisplay(String Phrase,int Delay) 39{ 40char char1 = Phrase.charAt(0); 41char char2 = Phrase.charAt(1); 42char char3 = Phrase.charAt(2); 43char char4 = Phrase.charAt(3); 44//char char5 = Phrase.charAt(4); 45char char1Num = 0; 46char char2Num = 0; 47char char3Num = 0; 48char char4Num = 0; 49int stringLength = Phrase.length(); 50 51if(stringLength < 5){ 52 for(int ti = 0 ; ti <= (Delay / 8) ; ti++){ 53 if(1 > stringLength) char1 = ' '; 54 else char1 = Phrase.charAt(0); 55 if(2 > stringLength) char2 = ' '; 56 else char2 = Phrase.charAt(1); 57 if(3 > stringLength) char3 = ' '; 58 else char3 = Phrase.charAt(2); 59 if(4 > stringLength) char4 = ' '; 60 else char4 = Phrase.charAt(3); 61 /* Reset(); 62 delay(2);*/ 63 printDigit(char1,D1); 64 delay(2); 65 printDigit(char2,D2); 66 delay(2); 67 printDigit(char3,D3); 68 delay(2); 69 printDigit(char4,D4); 70 delay(2); 71 } 72}else{ 73for(int t = 0 ; t <= stringLength ; t++){ 74 for(int ti = 0 ; ti <= (Delay / 8) ; ti++){ 75 76 /*Reset(); 77 delay(2);*/ 78 printDigit(char1,D1); 79 delay(2); 80 printDigit(char2,D2); 81 delay(2); 82 printDigit(char3,D3); 83 delay(2); 84 printDigit(char4,D4); 85 delay(2); 86} 87 if(t + 1 > stringLength) char1 = ' '; 88 else char1 = Phrase.charAt(t); 89 if((t + 2) > stringLength) char2 = ' '; 90 else char2 = Phrase.charAt(t + 1); 91 if((t + 3) > stringLength) char3 = ' '; 92 else char3 = Phrase.charAt(t + 2); 93 if((t + 4) > stringLength) char4 = ' '; 94 else char4 = Phrase.charAt(t + 3); 95 96 97 98} 99} 100} 101 102
array.h
h
1 2#define DP 30 3 4const int charsInArray = 37; 5byte digits[]{D1,D2,D3,D4}; 6byte seg[] {pinA,pinB,pinC,pinD,pinE,pinF,pinG,pinDP}; 7byte Char[37][9] { 8 9 {1,1,1,1,1,1,0,0,'0'},//0 10 {0,1,1,0,0,0,0,0,'1'},//1 11 {1,1,0,1,1,0,1,0,'2'},//2 12 {1,1,1,1,0,0,1,0,'3'},//3 13 {0,1,1,0,0,1,1,0,'4'},//4 14 {1,0,1,1,0,1,1,0,'5'},//5 15 {1,0,1,1,1,1,1,0,'6'},//6 16 {1,1,1,0,0,0,0,0,'7'},//7 17 {1,1,1,1,1,1,1,0,'8'},//8 18 {1,1,1,1,0,1,1,0,'9'}, //9 19 {1,1,1,0,1,1,1,0,'a'},//A/1 20 {0,0,1,1,1,1,1,0,'b'},//b/2 21 {0,0,0,1,1,0,1,0,'c'},//C/3 22 {0,1,1,1,1,0,1,0,'d'},//d/4 23 {1,0,0,1,1,1,1,0,'e'},//E/5 24 {1,0,0,0,1,1,1,0,'f'},//F/6 25 {1,0,1,1,1,1,0,0,'g'},//G/7 26 {0,1,1,0,1,1,1,0,'h'},//H/8 27 {0,1,1,0,0,0,0,0,'i'},//I/9 28 {0,1,1,1,1,0,0,0,'j'},//J/10 29 {0,0,0,1,1,1,0,0,'l'},//L/11 30 {0,0,1,0,1,0,1,0,'n'},//n/12 31 {0,0,1,1,1,0,1,0,'o'},//o/13 32 {1,1,0,0,1,1,1,0,'p'},//P/14 33 {1,1,1,0,0,1,1,0,'q'},//q/15 34 {0,0,0,0,1,0,1,0,'r'},//r/16 35 {1,0,1,1,0,1,1,0,'s'},//S/17 looks like number 5 36 {0,0,0,1,1,1,1,0,'t'},//t/18 37 {0,1,1,1,1,1,0,0,'u'},//U/19 38 {0,1,1,1,0,1,1,0,'y'},//y/20 39 {0,0,0,0,0,0,0,1,'.'},//. 40 {0,0,0,0,0,0,1,0,'-'},//dash/negative 41 {0,0,0,1,0,0,0,0,'_'},//underscore 42 {1,0,0,1,1,1,0,0,'['},//[ 43 {1,1,1,1,0,0,0,0,']'},//] 44 {1,1,0,0,1,0,1,0,'?'},//? 45 {0,0,0,0,0,0,0,0,' '}//blank 46 47 }; 48
functions.h
h
1void Reset() 2{ digitalWrite(D1, !mode); 3 digitalWrite(D2, !mode); 4 5 digitalWrite(D3, !mode); 6 digitalWrite(D4, !mode); 7 for(byte i = 0 ; 8 i < 8 ; i++){ 9 digitalWrite(seg[i],mode); 10 } 11} 12 13 14 15void printDigit(char 16 Chara,int digitPort) 17{ Reset(); 18 int character = -1; 19 digitalWrite(digitPort,mode); 20 21 for(int i = 0 ; i < charsInArray ; i++){ 22 23 if(Chara == Char[i][8]){ 24 25 character = i; 26 } 27 } 28 if (character == -1){ 29 digitalWrite(pinG,!mode); 30 31 }else{ 32for(int i = 0;i<= 7;i++) 33 {if(mode == common_anode) digitalWrite(seg[i],!Char[character][i]); 34 35 else if(mode == common_cathode) digitalWrite(seg[i],Char[character][i]); 36 37 38 } 39 } 40} 41 42 43 44 45 46void printDisplay(String Phrase,int 47 Delay) 48{ 49char char1 = Phrase.charAt(0); 50char char2 = Phrase.charAt(1); 51char 52 char3 = Phrase.charAt(2); 53char char4 = Phrase.charAt(3); 54//char char5 = Phrase.charAt(4); 55char 56 char1Num = 0; 57char char2Num = 0; 58char char3Num = 0; 59char char4Num = 0; 60int 61 stringLength = Phrase.length(); 62 63if(stringLength < 5){ 64 for(int ti = 0 65 ; ti <= (Delay / 8) ; ti++){ 66 if(1 > stringLength) char1 = ' '; 67 else char1 68 = Phrase.charAt(0); 69 if(2 > stringLength) char2 = ' '; 70 else char2 = Phrase.charAt(1); 71 72 if(3 > stringLength) char3 = ' '; 73 else char3 = Phrase.charAt(2); 74 if(4 75 > stringLength) char4 = ' '; 76 else char4 = Phrase.charAt(3); 77 /* Reset(); 78 79 delay(2);*/ 80 printDigit(char1,D1); 81 delay(2); 82 printDigit(char2,D2); 83 84 delay(2); 85 printDigit(char3,D3); 86 delay(2); 87 printDigit(char4,D4); 88 89 delay(2); 90 } 91}else{ 92for(int t = 0 ; t <= stringLength ; t++){ 93 for(int 94 ti = 0 ; ti <= (Delay / 8) ; ti++){ 95 96 /*Reset(); 97 delay(2);*/ 98 printDigit(char1,D1); 99 100 delay(2); 101 printDigit(char2,D2); 102 delay(2); 103 printDigit(char3,D3); 104 105 delay(2); 106 printDigit(char4,D4); 107 delay(2); 108} 109 if(t + 1 > stringLength) 110 char1 = ' '; 111 else char1 = Phrase.charAt(t); 112 if((t + 2) > stringLength) 113 char2 = ' '; 114 else char2 = Phrase.charAt(t + 1); 115 if((t + 3) > stringLength) 116 char3 = ' '; 117 else char3 = Phrase.charAt(t + 2); 118 if((t + 4) > stringLength) 119 char4 = ' '; 120 else char4 = Phrase.charAt(t + 3); 121 122 123 124} 125} 126} 127 128 129
array.h
h
1 2#define DP 30 3 4const int charsInArray = 37; 5byte digits[]{D1,D2,D3,D4}; 6byte seg[] {pinA,pinB,pinC,pinD,pinE,pinF,pinG,pinDP}; 7byte Char[37][9] { 8 9 {1,1,1,1,1,1,0,0,'0'},//0 10 {0,1,1,0,0,0,0,0,'1'},//1 11 {1,1,0,1,1,0,1,0,'2'},//2 12 {1,1,1,1,0,0,1,0,'3'},//3 13 {0,1,1,0,0,1,1,0,'4'},//4 14 {1,0,1,1,0,1,1,0,'5'},//5 15 {1,0,1,1,1,1,1,0,'6'},//6 16 {1,1,1,0,0,0,0,0,'7'},//7 17 {1,1,1,1,1,1,1,0,'8'},//8 18 {1,1,1,1,0,1,1,0,'9'}, //9 19 {1,1,1,0,1,1,1,0,'a'},//A/1 20 {0,0,1,1,1,1,1,0,'b'},//b/2 21 {0,0,0,1,1,0,1,0,'c'},//C/3 22 {0,1,1,1,1,0,1,0,'d'},//d/4 23 {1,0,0,1,1,1,1,0,'e'},//E/5 24 {1,0,0,0,1,1,1,0,'f'},//F/6 25 {1,0,1,1,1,1,0,0,'g'},//G/7 26 {0,1,1,0,1,1,1,0,'h'},//H/8 27 {0,1,1,0,0,0,0,0,'i'},//I/9 28 {0,1,1,1,1,0,0,0,'j'},//J/10 29 {0,0,0,1,1,1,0,0,'l'},//L/11 30 {0,0,1,0,1,0,1,0,'n'},//n/12 31 {0,0,1,1,1,0,1,0,'o'},//o/13 32 {1,1,0,0,1,1,1,0,'p'},//P/14 33 {1,1,1,0,0,1,1,0,'q'},//q/15 34 {0,0,0,0,1,0,1,0,'r'},//r/16 35 {1,0,1,1,0,1,1,0,'s'},//S/17 looks like number 5 36 {0,0,0,1,1,1,1,0,'t'},//t/18 37 {0,1,1,1,1,1,0,0,'u'},//U/19 38 {0,1,1,1,0,1,1,0,'y'},//y/20 39 {0,0,0,0,0,0,0,1,'.'},//. 40 {0,0,0,0,0,0,1,0,'-'},//dash/negative 41 {0,0,0,1,0,0,0,0,'_'},//underscore 42 {1,0,0,1,1,1,0,0,'['},//[ 43 {1,1,1,1,0,0,0,0,']'},//] 44 {1,1,0,0,1,0,1,0,'?'},//? 45 {0,0,0,0,0,0,0,0,' '}//blank 46 47 }; 48
4-digit_7-Seg.ino
arduino
this is the main code
1/* 2 Showing numbers, chars and phrases 3 A 4 --- 5F | | B 6 | G | 7 --- 8E | | C 9 | | 10 --- 11 D 12 13 */ 14 15 16 17#define common_cathode 0 18#define common_anode 1 19 20bool mode = common_anode;// my display is common anode 21 22#define pinA 2 23#define pinB 3 24#define pinC 4 25#define pinD 5 26#define pinE 7 27#define pinF 12 28#define pinG 8 29#define pinDP 13 30#define D1 6 31#define D2 9 32#define D3 10 33#define D4 11 34 35#include "array.h" 36#include "functions.h" 37 38 39 40 41 42void setup() { 43 // initialize the digital pins as outputs. 44 45 pinMode(pinA, OUTPUT); 46 pinMode(pinB, OUTPUT); 47 pinMode(pinC, OUTPUT); 48 pinMode(pinD, OUTPUT); 49 pinMode(pinE, OUTPUT); 50 pinMode(pinF, OUTPUT); 51 pinMode(pinG, OUTPUT); 52 pinMode(pinDP, OUTPUT); 53 pinMode(D1, OUTPUT); 54 pinMode(D2, OUTPUT); 55 pinMode(D3, OUTPUT); 56 pinMode(D4, OUTPUT); 57 Serial.begin(9600); 58 59} 60 61 62// the loop routine runs over and over again forever: 63void loop() { 64 65 printDisplay("2021",1000);// use this function to print a string (has numbers, characters or phrases) when the length of string is 4 or less than 4, the second variable is the time for printing on display 66 Reset();// use this function to reset the display 67 delay(1000); 68 printDisplay("all usable characters [[ 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j l n o p q r s t u y - _ . [ ] ? ]]",300);// when the length of string is more than 4, the second variable is custom speed for movement 69 delay(1000); 70 printDigit('y',D1);//print any char on any digit 71 delay(1000); 72 73} 74
Downloadable files
circuit:
circuit:

circuit:
circuit:

Comments
Only logged in users can leave comments